2017-05-06 78 views
0

我寫了簡單的如何在程序8086彙編器中使用本地標籤?

.MODEL small 

.STACK 100h 
.DATA 
    liczba dw 0h 
    licznik dw 0 
    potega dw 1 
    liczbaString dw ? 

    buff db 26 
.CODE 
    Program: 
    mov ax, @DATA 
    mov ds, ax 

    call PobierzString 
    call PetlaIteracjiZnaku 

    ;zwraca do ax pobraną liczbę 
    PetlaIteracjiZnaku PROC 
     mov si, liczbaString 
     call ZnajdzDlugoscString 
     mov si, liczbaString 
     add si, 2 
     mov bl, 1 
     petla: 
      xor ax, ax 
      mov al, [si] 
      cmp al, 24h; sprawdza czy nie jest koniec wprowadzanej liczby '$' 
      je return 
      sub al, 30h ; odejmuję 30 żeby zamienić znak na liczbę 
      mul bx 
      add [liczba], ax 
      mov ax, bx 
      mov bx, 0Ah 
      mul bx 
      mov bx, ax 
      inc si 
     jmp petla 
     return: 
      ret 
    PetlaIteracjiZnaku ENDP 

    ; ! si - caly string 
    ; - ax - dlugosc stringu 
    ZnajdzDlugoscString PROC 
     mov al, 0h 
     petla: 
      mov dl, [si] 
      cmp dl, 24h 
      je return 
      inc al 
     jmp petla 
     return: 
      ret 
    ZnajdzDlugoscString ENDP 

    PobierzString PROC 
     xor ax,ax 
     mov ah, 0Ah 
     mov dx, offset buff 
     int 21h  
     mov liczbaString, dx 
     ret 
    PobierzString ENDP 
    Koniec: 
    mov  ah, 4ch 
    int  21h 

    end Program 

但我不能用TASM編譯它,因爲我得到錯誤:

Symbol already defined elswere: PETLA
Symbol already defined elswere: RETURN

如何使用本地標籤的程序?我試圖在Use procedure scope to avoid local labels?中添加.PETLA%%PETLA,但它仍然不起作用。
我不知道如何實現這一目標?

回答

2

要與TASM過程中使用本地標籤,你需要:

  • 使用@@前綴爲您的標籤名稱;和
  • LOCALS @@放置在文件的開頭。

您可以使用不同的前綴代替@@,但@@是常用的前綴。

請參閱http://www.ousob.com/ng/masm/ng54fa6.php