Prosty kalkulator [asembler]... Dlaczego nie działa

0

Witam, mam do napisania na zajecia prosty kalkulator w asemblerze, tz dodawanie i odejmowanie liczba ktorych suma nie moze przekroczyc 9:) dodam iz tydzien temu po raz pierwszy zetknalem sie z tym jezykiem... Problem polega na tym ze program ktory napisalem nie wyswietla mi wyniku... Prosze o pomoc...

format binary
org 100h

start:

mov ah, 9
mov dx, Podaj1
int 21h

mov ah, 1
int 21h
mov [liczba], al ; to co jest w rejestrze al przesówam do liczba???

mov ah, 9
int 21h
mov dx, Podaj2

mov ah, 1
int 21h
mov [liczba2], al

mov ah, [liczba]    ;pod zmienna "liczba" powinna byc wczytana cyfra, chyba ze sie myle???
mov bh, [liczba2]   ;podobnie i tutaj

add ah, bh
add ah, 30h

mov [suma], ah
mov ah, 2
mov dl, [suma]  ;nie wiem dlaczego nie wypisuje mi wyniku?????
int 21h

mov ah,0
int 16h

mov     ax, 4C00h
int     21h

suma db 0
liczba2 db 0
liczba db 0
Podaj1 db "Podaj pierwsza liczbe:",10,13,"$"
Podaj2 db "Podaj druga liczbe:",10,13,"$"

0
		mov ah, 09h
		mov dx, offset Podaj1 ;musisz ten adres pod którym jest napis ustawić PRZED przerwaniem...
		int 21h

		mov ah, 01h
		int 21h
		sub al,'0' ;obliczamy jaka to cyfra!
		mov [liczba], al

		mov ah, 09h
		mov dx, offset Podaj2 ;jw.
		int 21h
		
		mov ah, 01h
		int 21h
		sub al,'0' ; jw + nie musisz tego zapisywać znów w pamięci, to zbędna komplikacja	

		mov ah, [liczba] ;pobieramy pierwszą cyfrę

		add al,ah ;sumujemy
		add al, '0' ;dodajemy '0' żeby nam wyswietliło to co chcemy

		mov dl, al
		mov ah, 2		
		int 21h

		mov ah,0
		int 16h

Działa i wyświetla.

0

Można prościej. Zamień w orginalnym programie.
add ah, 30h

Na
sub ah, 30h

    mov ah, 1
    int 21h
    mov [liczba], al ; to co jest w rejestrze al przesówam do liczba???

To co masz w al to właściwie nie jest liczba tylko znak. Znaki są kodowane od 0 do 9 po przez liczby od 30h do 39h. Tak więc przykładowo podałeś do programu dwie liczby 3 i 4, to masz w zmiennych wartości odpowiednio 33h i 34h. Przy wypisywaniu funkcją 2 przerwania 21h też posługujesz się znakiem liczby.

0

Wielkie dzieki:)

1 użytkowników online, w tym zalogowanych: 0, gości: 1