kalkulator w asemblerze

kalkulator w asemblerze
D6
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1
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ć

Kopiuj
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,"$"
lukasz1235
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1105
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?

BR
  • Rejestracja: dni
  • Ostatnio: dni
0

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

  • Rejestracja: dni
  • Ostatnio: dni
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?

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
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.

  • Rejestracja: dni
  • Ostatnio: dni
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

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
0

A czego konkretnie nie potrafisz?

  • Rejestracja: dni
  • Ostatnio: dni
0
_13th_Dragon napisał(a)

A czego konkretnie nie potrafisz?

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

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
0

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

Zieluowaty
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 19
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 ;)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.