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

別のIPに移動するprocとは異なり、マクロコードをコードにコピーするため、マクロはコードをコピーするだけなので、同じ名前ラベルを2回作成することはできません...コンパイラエラーなので、ローカルを使用してください

于 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 に答える