0

プログラムで一般的なラベルにプレフィックスが使用されないように、プロシージャでローカルラベルを使用したいと思います。ローカルラベル(@@)を使ってみました。私の本によると、「ローカルラベルの寿命は、次の非ローカルラベルまで前後にしか伸びません」。ただし、ファイルをコンパイルしようとすると、次のエラーメッセージが返されます。

Turbo Assembler  Version 3.1  Copyright (c) 1988, 1992 Borland International

Assembling file:   test.ASM
**Error** test.ASM(20) Symbol already defined elsewhere: @@EXIT
**Error** test.ASM(33) Symbol already defined elsewhere: @@EXIT
Error messages:    2   
Warning messages:  None
Passes:            1   
Remaining memory:  472k

ソースコードは次のとおりです。

Data    segment
Data    ends

Stack1  segment Stack "Stack"
    dw  256 dup(?)
Stack1  ends

Code    segment
assume cs:Code, ss:Stack1, ds:Data
.386

proc1   proc
    ; some code here
    @@exit:
    ret
proc1   endp

proc2   proc
    ; some code here
    @@exit:
    ret
proc2   endp

main    proc
    mov ax, Data
    mov ds, ax

    @@repeat:
    call    proc1
    call    proc2
    jz  @@repeat

    @@exit:
    mov ah, 4Ch
    mov al, 0
    int 21h     
main    endp

Code    ends

end main
4

1 に答える 1

3

ローカルシンボルはデフォルトでは有効になっていません。これを有効にするにLOCALSは、ソースにディレクティブが必要です。このディレクティブは独自の行に配置する必要があり、複数回使用できます。2文字で構成される1つのパラメーターが必要です。このテキストは、すべてのローカルシンボルのプレフィックスとして使用されます。

例:LOCALS @@またはLOCALS ZZ

于 2012-11-06T02:52:16.593 に答える