kalkulator w asemblerze

0

Cześć, mam do napisania projekt w NASMie - kalkulator wykonujący dodawanie, odejmowanie, mnożenie i dzielenie. Mam już część kodu, dodającą dwie liczby. Ale niestety dodaje tylko cyfry, których suma nie przekracza 9 :/ Jak zrobić działania na wyższych liczbach? I dodać inne opcje oprócz dodawania? np w jakimś menu startowym gdzie wybieram jakie działania chcę przeprowadzić

org 100h

start:

mov ah, 9
mov dx, Podaj1
int 21h

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

mov ah, 9
int 21h
mov dx, Podaj2

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

mov ah, [liczba]
mov bh, [liczba2]

add ah, bh
sub ah, 30h

mov [suma], ah
mov ah, 2
mov dl, [suma]
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
dusia6 napisał(a)

Jak zrobić działania na wyższych liczbach?
Najprościej będzie jak do wczytywania i wypisywania liczb użyjesz scanf z libc.
I dodać inne opcje oprócz dodawania? np w jakimś menu startowym gdzie wybieram jakie działania chcę przeprowadzić
Czego dokładnie nie potrafisz?

0

http://re.coldwind.pl/?vart=6 - Videoart omawiający podstawy asm'a (Gynvael pokazuje i omawia jak wykonać prosty kalkulator)

0

<quote=lukasz1235> Najprościej będzie jak do wczytywania i wypisywania liczb użyjesz scanf z libc. <quote> Niestety nie moge korzystac z bibliotek C w tym projekcie. Wiec dalej nie wiem jak zrobic dzialania na wiekszych liczbach. A co do menu to nie wiem jak zrobic takie cos zeby program rozpoznal jaki znak wpiszemy (np "dodawanie - wcisnij 1, odejmowanie - 2...") i po wcisnieciu wybranej opcji jak program ma przeskoczyc do prawidlowej czesci?

0

@dusia6 twoje pytanie jest dość dziwne. Jak to jak? Musisz najpierw napisać podprocedurę do wczytywania liczb większych od 9. Jak? Zerujesz wynik, mnożysz aktualny wynik * 10, wczytujesz liczbę 0-9, dodajesz do aktualnego wyniku. Powtarzasz te kroki aż nie ma co wczytywać. Następnie wykonujesz na tych liczbach działania.

0
Shalom napisał(a)

@dusia6 twoje pytanie jest dość dziwne. Jak to jak? Musisz najpierw napisać podprocedurę do wczytywania liczb większych od 9. Jak? Zerujesz wynik, mnożysz aktualny wynik * 10, wczytujesz liczbę 0-9, dodajesz do aktualnego wyniku. Powtarzasz te kroki aż nie ma co wczytywać. Następnie wykonujesz na tych liczbach działania.

Przykro mi ale to moje pierwsze kroki w asm :( gdybym potrafiła to zrobić to bym nie prosiła o pomoc w dziale Newbie

0

A czego konkretnie nie potrafisz?

0
_13th_Dragon napisał(a)

A czego konkretnie nie potrafisz?

przerobic tego programu tak aby dodawal liczby, ktorych suma przekracza 9

0

Przecież dostałaś już odpowiedź jak to zrobić, więc czego nie potrafisz w tym co zaproponowano?

0

Asembler jest szalenie trudny (moim zdaniem). Musisz myśleć trochę inaczej niż przy programowaniach generacji 3.

Polecam tak:

  1. Zrobić makro od wypisywania tekstu.
  2. Zrobić makro wczytujące znak bez echa. Oraz makro wyświetlające jeden znak.
  3. Skonstruować algorytm i przepisać go na kod, jaki algorytm, już mówię:

I) Sczytaj znak wprowadzony z klawiatury.
II) Jeśli to jest enter, to sprawdź czy wpisano już jakąś liczbę, jak nie, to olej go. Jeśli tak, masz wpisaną w jakimś rejestrze liczbę.
III) Wpisano co innego niż enter, sprawdź czy znak jest znakiem 0-9 (po kodzie ASCII!).
IV) Jeśli to jest cyfra to wyświetl ją, pomnóż to co jest w rejestrze przechowującym liczbę razy 10 i dodaj to co teraz wprowadzono.
V) Jeśli to nie liczba, po prostu wróć na początek do sczytywania zmiennej.

Jak dalej sobie nie będziesz radzić to pisz ;)

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