汇编 - 宏观中的一些问题

时间:2012-04-12 16:32:31

标签: assembly x86-16

我有一个汇编程序如下。

;=======================
.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宏。

2 个答案:

答案 0 :(得分:2)

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

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

因为它会将宏代码复制到您的代码中 不喜欢将您带到另一个IP的proc 宏只是复制代码,所以您不能两次创建相同的名称标签...其编译器错误,因此请使用本地

答案 1 :(得分:1)

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

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