Zadanie wyglądało następująco: Napisać program, który pobiera z wejścia dwa łańcuchy znakowe, a następnie sprawdza, czy sumy ich kodów ASCII są równe, wypisując na ekran stosowny komunikat.
Mój problem polega na tym że program poprawnie liczy sumę znaków ASCII z ciągu, ale gdy ciągi są różnej długości nie wiadomo dlaczego zawsze podaje że suma nie jest równa.
org 100h ;Przesuniecie
xor si,si
xor dx,dx
czysto:
cmp si,30
je oczysz
mov ah,2
mov dl,10
int 21h
mov dl,13
int 21h
inc si
jmp czysto
oczysz:
mov ah,9
mov dx,kom1
int 21h
mov ah,9
mov dx,kom11 ;komunikat poczatkowy o dzialaniu programu
int 21h
mov ah,9
mov dx,kom12
int 21h
jeszcze:
call ent
mov ah,9
mov dx,kom2 ;komentarz o podanie pierwszego ciagu
int 21h
call ent
call pobierz ;pobranie pierwszego ciagu
call suma ;liczenie sumy kodow jego znakow ascii
mov dx,[wynik]
mov [wynik1],dx ;wrzucanie pierwszego wyniku do zmiennej
;drugi wynik zostanie w zmiennej z procedury
call ent
mov ah,9
mov dx,kom3 ;kompentrz o podanie drugiego ciagu
int 21h
call ent
inc si
call pobierz ;pobranie drugiego ciagu
call suma ;liczenie drugiej sumy
call ent
call porownaj ;porownanie sum znakow ASCII z ciagow
call powt ;zapetlenie
koniec:
mov ax,4C00h ;Koniec Programu
int 21h
ilosc db 0
wynik dw 0
wynik1 dw 0
kom1 db " Program pobiera dwa lancuchy znakowe",10,13,36
kom11 db " i sprawdza czy suma numerow ASCII ciagow jest rowna",10,13,36
kom12 db " ENTER konczy dzialanie programu",10,13,36
kom2 db "Podaj pierwszy ciag znakow (zakoncz ciag spacja):$"
kom3 db "Podaj drugi ciag znakow (zakoncz ciag spacja):$"
kom4 db " Suma kodow ASCII podanych ciagow jest rowna",10,13,36
kom5 db " Suma kodow ASCII podanych ciagow NIE jest rowna",10,13,36
kom6 db " Wynik sumy pierwszego ciagu:",36
kom7 db " Wynik sumy drugiego ciagu:",36
kom8 db "Czy chcesz porownac kolejne ciagi? TAK-t NIE-ENTER ",10,13,36
kom9 db "Podales niewlasciwy symbol",10,13,36
ent:
mov ah,2
mov dl,10
int 21h
mov dl,13
int 21h
ret
pobierz:
xor di,di
xor ax,ax
xor bx,bx
xor cx,cx
pop cx
petla1:
mov ah,1
int 21h
cmp al,13
je koniec
cmp al,32
je dalej
push ax
inc di
jmp petla1
dalej:
mov [ilosc],di
push cx
ret
suma:
xor cx,cx
xor dx,dx
xor ax,ax
xor di,di
pop cx
mov [wynik],dx
petla2:
inc di
cmp di,[ilosc]
jg dalej1
pop dx
add ax,dx
jmp petla2
dalej1:
mov [wynik],ax
push cx
ret
porownaj:
xor ax,ax
xor bx,bx
xor cx,cx
pop cx
mov ax,[wynik1]
mov bx,[wynik]
cmp ax,bx
je tak
jne nie
tak:
mov ah,9
mov dx,kom6
int 21h
mov ah,2
mov dx,[wynik1]
int 21h
call ent
mov ah,9
mov dx,kom7
int 21h
mov ah,2
mov dx,[wynik]
int 21h
call ent
mov ah,9
mov dx,kom4
int 21h
jmp po
nie:
mov ah,9
mov dx,kom6
int 21h
mov ah,2
mov dx,[wynik1]
int 21h
call ent
mov ah,9
mov dx,kom7
int 21h
mov ah,2
mov dx,[wynik]
int 21h
call ent
mov ah,9
mov dx,kom5
int 21h
po:
push cx
ret
powt:
call ent
mov ah,9
mov dx,kom8
int 21h
mov ah,1
int 21h
cmp al,116
je jeszcze
cmp al,13
je koniec
call ent
mov ah,9
mov dx,kom9
int 21h
jmp powt
ret