2017-05-06 1 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

手順については、ローカルラベルを使用する方法は? .PETLA%%PETLAUse procedure scope to avoid local labels?のように追加しようとしましたが、それでも動作しません。
私は、あなたがする必要があるTASMと手順でローカルラベルを使用するには...

答えて

2

これをachiveする方法見当がつかない:

  • は、ラベル名の@@接頭辞を使用します。
  • LOCALS @@をファイルの先頭に置きます。

かわり@@のdiferentプレフィックスを使用することができますが、@@は一般的なものです。

http://www.ousob.com/ng/masm/ng54fa6.phpを参照してください。

関連する問題