为什么程序集8086中不允许使用变量名"name"?

Ant*_*aji 3 assembly x86-16 emu8086

当我尝试声明一个名为"name"的变量时,它不起作用,它给了我一个错误,这一个there are errors.有以下解释

(22) wrong parameters: MOV  BL, name
(22) probably no zero prefix for hex; or no 'h' suffix; or wrong addressing; or undefined var: name
Run Code Online (Sandbox Code Playgroud)

这是我的代码

; multi-segment executable file template.

data segment
    ; add your data here!
    pkey db "press any key...$"
    name db "myname"
ends

stack segment
    dw   128  dup(0)
ends

code segment
start:
; set segment registers:
    mov ax, data
    mov ds, ax
    mov es, ax

    ; add your code here

    MOV BL, name


    ;;;;;

    lea dx, pkey
    mov ah, 9
    int 21h        ; output string at ds:dx

    ; wait for any key....
    mov ah, 1
    int 21h

    mov ax, 4c00h ; exit to operating system.
    int 21h
ends

end start ; set entry point and stop the assembler.
Run Code Online (Sandbox Code Playgroud)

事实是,如果我尝试别的名称,它适用的变数,namee,nname,name_,但大写不工作,我试图寻找所有在互联网上,但无论哪种我在寻找错了,或者我不知道要搜索什么.

Mic*_*tch 6

NAMEMASM指令的名称,被视为保留字.使用保留字作为变量名将导致问题.该NAME指令特别没有做任何有用的,因为文档建议MASM只是忽略它.从MASM手册:

NAME modulename
Run Code Online (Sandbox Code Playgroud)

忽略.

EMU8086中,除了将name变量重命名为其他内容之外,没有任何真正的方法.

MASM 5.x +中,您可以通过OPTION以下方式使用指令来解决此问题:

OPTION NOKEYWORD:<NAME>
Run Code Online (Sandbox Code Playgroud)

OPTION NOKEYWORDMASM手册中以这种方式定义:

除预定义符号外,MASM保留字不区分大小写(请参阅本章后面的"预定义符号").

如果在源代码中使用保留字作为变量,代码标签或其他标识符,汇编程序将生成错误.但是,如果您需要将保留字用于其他目的,OPTION NOKEYWORD指令可以选择性地禁用单词的状态作为保留字.

例如,要删除STR指令,MASK运算符和MASM单词集中的NAME指令识别为保留,请在首次引用STR,MASK或NAME之前在程序的代码段中使用此语句:

OPTION NOKEYWORD:<STR MASK NAME>
Run Code Online (Sandbox Code Playgroud)