2017-05-06 4 views
0

j'ai écrit simplementComment utiliser les étiquettes locales dans les procédures 8086 assembleur?

.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 

Mais je ne peux pas le compiler avec tasm parce que j'obtiens l'erreur:

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

Comment utiliser des étiquettes locales pour les procédures? J'ai essayé d'ajouter .PETLA et %%PETLA comme dans Use procedure scope to avoid local labels? mais cela ne fonctionne toujours pas.
Je ne sais pas comment ça ... achive

Répondre

2

Pour utiliser les étiquettes locales dans les procédures avec TASM vous devez:

  • Utilisez le préfixe @@ pour votre nom d'étiquette; et
  • Placez LOCALS @@ au début de votre fichier.

Vous pouvez utiliser un préfixe diferent au lieu de @@, mais @@ est celui commun.

Voir http://www.ousob.com/ng/masm/ng54fa6.php.