0

我有一个如下的汇编程序。

;=======================
.MODEL SMALL
.STACK 100h

putchar MACRO char
    label:
    mov dl, char
    mov ah, 2
    int 21h
ENDM
.CODE
    MAIN Proc
         putchar  'A'
         putchar  'S'
         putchar  'M'
         mov ah, 4ch
         int 21h
    MAIN ENDP

我的程序无法编译。

P/S:不能修改putchar宏。

4

2 回答 2

2

你不能在宏中使用这样的标签你需要使用本地标签

 putchar MACRO char
    local label
    label:
    mov dl, char
    mov ah, 2
    int 21h
    ENDM

因为它会将宏代码复制到您的代码中,而不是像 proc 那样将您带到另一个 ip 宏只是复制代码,因此您不能两次制作相同的名称标签......它的编译器错误,所以使用本地

于 2018-07-27T21:00:39.070 回答
1

您的问题可能是label:宏中的标签被多次定义(宏的每次扩展)。您需要删除标签(实际上没有理由让它在那里),或者使用本地标签。在此页面上搜索“本地标签”:http ://webster.cs.ucr.edu/Page_TechDocs/MASMDoc/ProgrammersGuide/Chap_09.htm 。

如果您无法修改putchar宏,那么我看不出如何使此代码编译。

于 2012-04-12T17:44:41.760 回答