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_,但大写不工作,我试图寻找所有在互联网上,但无论哪种我在寻找错了,或者我不知道要搜索什么.
NAME是MASM指令的名称,被视为保留字.使用保留字作为变量名将导致问题.该NAME指令特别没有做任何有用的,因为文档建议MASM只是忽略它.从MASM手册:
Run Code Online (Sandbox Code Playgroud)NAME modulename忽略.
在EMU8086中,除了将name变量重命名为其他内容之外,没有任何真正的方法.
在MASM 5.x +中,您可以通过OPTION以下方式使用指令来解决此问题:
OPTION NOKEYWORD:<NAME>
Run Code Online (Sandbox Code Playgroud)
OPTION NOKEYWORD在MASM手册中以这种方式定义:
除预定义符号外,MASM保留字不区分大小写(请参阅本章后面的"预定义符号").
如果在源代码中使用保留字作为变量,代码标签或其他标识符,汇编程序将生成错误.但是,如果您需要将保留字用于其他目的,OPTION NOKEYWORD指令可以选择性地禁用单词的状态作为保留字.
例如,要删除STR指令,MASK运算符和MASM单词集中的NAME指令识别为保留,请在首次引用STR,MASK或NAME之前在程序的代码段中使用此语句:
Run Code Online (Sandbox Code Playgroud)OPTION NOKEYWORD:<STR MASK NAME>