Prosty kalkulator [asembler]... Dlaczego nie działa
Strona [ 1 ] z 1
| Czesio25 |
09-03-2010 20:54 |
|
|
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] od zmienna "liczba" powinna byc wczytana cyfra, chyba ze sie myle???mov bh, [liczba2] odobnie i tutajadd 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,"$" |
|
|
| Shalom |
09-03-2010 21:13 |
|
Użytkownik Status: Offline Dołączył: 30-01-2004 Skąd: Będzin / Kraków |
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. Non nascuntur sed fiunt christiani ![]() Nie masz kłopotów? Kup komputer... [Na prv/gg przyjmuje tylko zlecenia. Masz problem? Pisz na forum, nie do mnie] Ostatnio zmodyfikowany: 09-03-2010 21:15 przez Shalom |
|
|
| Nevar |
09-03-2010 21:20 |
|
Użytkownik Status: Offline Dołączył: 24-01-2003 Skąd: Warszawa |
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. |
|
|
| Czesio25 |
09-03-2010 21:22 |
|
|
Wielkie dzieki:) |
|
|
|
|
|
Strona [ 1 ] z 1
| 1 użytkownik(ów) przegląda ten temat (1 gości) |
|---|
| (żadnych zarejestrowanych użytkowników) |





od zmienna "liczba" powinna byc wczytana cyfra, chyba ze sie myle???





