多定义符号 masm 5.0
Multi Defined symbol masm 5.0
抱歉,我会有一个probelam。
在实践中,MASM 汇编程序无法识别我的宏标签,或者更确切地说,即使我将它们定义为本地的,以下 returns 对我来说:
ERROR A2005 Multidefined Symbol
....
This for more and more time
我会post这里的宏代码:
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, ds: data, cs: code
_start:
mov ax, data
mov ds, ax
abMacro
abMacro
mov ah, 04ch
mov al, 1
int 21h
code ENDS
END _start
在我看来,汇编程序已经疯了。
对我来说,它给了我一个写得不好的汇编器,或者我触摸了一些文件,这不太可能,因为我什至不知道源在哪里。
超级奇怪,但是在删除宏定义和 LOCAL
s 之间的空行后它开始工作了。
所以如果你的宏声明是
abMacro MACRO
LOCAL jump, doNothing
它将 return 一堆重定义错误,如您的 post
但是如果你去掉那个空行,就会变成这样
abMacro MACRO
LOCAL jump, doNothing
抱歉,我会有一个probelam。 在实践中,MASM 汇编程序无法识别我的宏标签,或者更确切地说,即使我将它们定义为本地的,以下 returns 对我来说:
ERROR A2005 Multidefined Symbol
....
This for more and more time
我会post这里的宏代码:
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, ds: data, cs: code
_start:
mov ax, data
mov ds, ax
abMacro
abMacro
mov ah, 04ch
mov al, 1
int 21h
code ENDS
END _start
在我看来,汇编程序已经疯了。 对我来说,它给了我一个写得不好的汇编器,或者我触摸了一些文件,这不太可能,因为我什至不知道源在哪里。
超级奇怪,但是在删除宏定义和 LOCAL
s 之间的空行后它开始工作了。
所以如果你的宏声明是
abMacro MACRO
LOCAL jump, doNothing
它将 return 一堆重定义错误,如您的 post
但是如果你去掉那个空行,就会变成这样
abMacro MACRO
LOCAL jump, doNothing