如何在 TASM 程序中使用本地标签?

A. *_*zak 0 assembly tasm x86-16

我写的简单

\n\n
.MODEL  small\n\n.STACK 100h\n.DATA \n    liczba dw 0h\n    licznik dw 0\n    potega dw 1\n    liczbaString dw ?\n\n    buff db 26\n.CODE\n  Program:\n    mov ax, @DATA\n    mov ds, ax\n\n    call PobierzString\n    call PetlaIteracjiZnaku\n\n    ;zwraca do ax pobran\xc4\x85 liczb\xc4\x99\n    PetlaIteracjiZnaku PROC\n        mov si, liczbaString\n        call ZnajdzDlugoscString\n        mov si, liczbaString\n        add si, 2\n        mov bl, 1\n        petla:\n            xor ax, ax\n            mov al, [si]\n            cmp al, 24h; sprawdza czy nie jest koniec wprowadzanej liczby \'$\'\n            je return\n            sub al, 30h ; odejmuj\xc4\x99 30 \xc5\xbceby zamieni\xc4\x87 znak na liczb\xc4\x99\n            mul bx\n            add [liczba], ax\n            mov ax, bx\n            mov bx, 0Ah\n            mul bx\n            mov bx, ax\n            inc si\n        jmp petla\n        return:\n            ret\n    PetlaIteracjiZnaku ENDP\n\n    ; ! si - caly string \n    ; - ax - dlugosc stringu\n    ZnajdzDlugoscString PROC\n        mov al, 0h\n        petla:\n            mov dl, [si]\n            cmp dl, 24h\n            je return\n            inc al\n        jmp petla\n        return: \n            ret\n    ZnajdzDlugoscString ENDP\n\n    PobierzString PROC\n        xor ax,ax\n        mov ah, 0Ah \n        mov dx, offset buff\n        int 21h     \n        mov liczbaString, dx\n        ret\n    PobierzString ENDP\n    Koniec:\n    mov     ah, 4ch\n    int     21h\n\n    end Program\n
Run Code Online (Sandbox Code Playgroud)\n\n

但我无法用 tasm 编译它,因为我收到错误:

\n\n
\n

符号已定义为:PETLA
\n 符号已定义,否则:RETURN

\n
\n\n

如何在程序中使用本地标签?我尝试添加.PETLAand %%PETLAas使用过程范围以避免本地标签?但它仍然不起作用。
\n我不知道如何实现这个...

\n

YSK*_*YSK 5

要在 TASM 过程中使用本地标签,您需要:

  • 使用@@标签名称的前缀;和
  • 放在LOCALS @@文件的开头。

您可以使用不同的前缀来代替@@,但@@它是通用的。

请参阅《TASM 用户指南》第 130 页。