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

szukaj na forum nowy temat odpowiedz

Strona [ 1 ] z 1

Czesio25 ten post 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]    ;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,"$"
Przejdź na górę strony
cytuj
Shalom ten post 09-03-2010 21:13
avatar

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
Przejdź na górę strony
cytuj
Nevar ten post 09-03-2010 21:20
avatar

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.
Przejdź na górę strony
cytuj
Czesio25 ten post 09-03-2010 21:22





Wielkie dzieki:)
Przejdź na górę strony
cytuj
szukaj na forum nowy temat odpowiedz

Strona [ 1 ] z 1

1 użytkownik(ów) przegląda ten temat (1 gości)
(żadnych zarejestrowanych użytkowników)

Copyright © 2000-2006 by Coyote Group 0.9.3-pre3
Czas generowania strony: 0.0454 sek. (zapytań SQL: 9)