如何解决多定义符号 masm 5.0
对不起,我会有一个问题。 实际上,MASM 汇编器无法识别我的宏标签,或者更确切地说,即使我将它们定义为本地,以下内容也会返回给我:
ERROR A2005 Multidefined Symbol
....
This for more and more time
input_int MACRO register
LOCAL input,stop_input
push ax
push cx
xor register,register
mov cx,5
input: mov ah,01h
int 21h
xor ah,ah
cmp al,13
je stop_input
cmp al,48
jb stop
cmp al,57
ja stop
sub al,48
mov store_in,ax
mov ax,10
mul register
add store_in,ax
mov register,store_in
loop input
pop cx
pop ax
stop_input: mov ah,02h
mov dl,13
int 21h
mov dl,10
int 21h
ENDM
这里是那里的扩展
code SEGMENT Para PUBLIC
ASSUME ss: stack,ds: data,cs: code
_start:
;load the DS
mov ax,data
mov ds,ax
;ouput msg1
mov ah,09h
mov dx,OFFSET msg1
int 21h
;input1
input_int bx
;output msg2
mov ah,09h
mov dx,OFFSET msg2
int 21h
;input msg2
input_int dx
stop: mov ah,04ch
mov al,1
int 21h
code ENDS
END _start
我没有错误,但是有。 在我看来,汇编程序已经疯了,您建议使用另一个版本的 MASM 来生成没有此错误的 16 位可执行文件。 我目前使用的是 MASM 5.0。
abMacro MACRO
LOCAL jump,donothing
mov cx,5
jump: add ax,10
cmp ax,30
je donothing
loop jump
donothing: nop
ENDM
stack SEGMENT Para STACK
db ?
stack ENDS
data SEGMENT Para PUBLIC
db ?
data ENDS
code SEGMENT Para PUBLIC
ASSUME ss: stack,cs: code
_start:
mov ax,data
mov ds,ax
abMacro
abMacro
mov ah,04ch
mov al,1
int 21h
code ENDS
END _start
在我看来,汇编程序已经疯了。 对我来说,它给了我一个写得很糟糕的汇编程序,或者我接触了一些文件,这不太可能,因为我什至不知道来源在哪里。
解决方法
这很奇怪,但在删除宏定义和 LOCAL
之间的空行后它开始工作了。
所以如果你的宏声明是
abMacro MACRO
LOCAL jump,doNothing
但是如果你去掉那个空行,就是这个样子
abMacro MACRO
LOCAL jump,doNothing
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。