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?과 같이 추가하려고했지만 여전히 작동하지 않습니다.
나는 당신이 필요로하는

답변

2

이 TASM과 절차에 지역 레이블을 사용하려면 ... 방법이 실현하려 아무 생각이 없습니다 :

  • 사용 레이블 이름의 @@ 접두사;
  • 파일 시작 부분에 LOCALS @@을 입력하십시오.

@@ 대신 다른 접두사를 사용할 수 있지만, @@이 일반적입니다.

http://www.ousob.com/ng/masm/ng54fa6.php을 참조하십시오.

관련 문제