Witam, czy ktoś mógłby wyjaśnić w czym tkwi błąd?
polecenie: Napisać program, króty pobiera łańcuch znakowy z wejścia, dodaje kody ASCII wszystkich znakoów wchodziących w jego skład oraz wypisuje tą sume na ekranie. Program powinien być w stanie powtarzac operacje dopóki użytkownik nie naciśnie klawisza "+". Wykorzystać procedury i stos. Przewidzieć sytuacje wyjątkowe.
org 100h
start:
mov cx,0 ;czyszczenie licznika
petla:
mov ah,1
int 21h
xor ah,ah
cmp al,43 ;wyjscie jesli '+'
je koniec
cmp al,13 ;koniec pobierania dla 'entera'
je koniec_czytania
jne na_stos
na_stos:
push ax
add cx,2
call na_asci
xor bx,bx
jmp petla
na_asci:
mov bx,10
p3:
div bx
add dx,48
mov [napis+di],dx
inc di
xor dx,dx
cmp ax,0
jz powrot
jnz p3
koniec_czytania:
inc di
mov byte [napis+di],"$"
call wyswietlanie
call powrot_bp
call wyswietlnie_asci
mov bx,cx
call czyszczenie_stosu
xor cx,cx
xor di,di
jmp petla
czyszczenie_stosu:
p2:
cmp bx,0
je powrot
pop dx
sub bx,2
jmp p2
wyswietlanie:
pop dx ;sciagamy powrot karetki zostajacy po enterze
push bp
mov bp,sp
add bp,cx
p1:
cmp cx,0
je powrot
mov ah,2
mov dx,[bp]
int 21h
sub bp,2
sub cx,2
jmp p1
wyswietlnie_asci:
p4:
mov ah,2
mov dx,[napis+di]
dec di
int 21h
cmp di,0
je powrot
jne p4
powrot_bp:
;mov ah,9
;mov dx,napis
;int 21h
;xor dx,dx
mov ah,9
mov dx,nowa_linia
int 21h
pop bp
ret
powrot:
ret
koniec:
mov ax, 4C00h
int 21h
section .data:
nowa_linia db 10,13,"$"
napis times 512 db 0