Kalkulator Assembler

0

Witajcie.
Postanowiłem napisać ten temat z jednego powodu:
Siedzę już dłuższy czas na próbie programowania w Assemblerze i wciąż nie mogę dojść do tego co mam zamierzone...
Chcę zrobić prosty kalkulator do obliczania podstawowych obliczeń (dodawanie, odejmowanie, mnożenie i dzielenie).
Do tej pory mam coś takiego jak zamieściłem poniżej.

I teraz pytanie do Was:
Jak dokończyć ten kod żeby był dobry? W programie chodzi mi o to by program pytal o dwie liczby które użytkownik by musiał podać i żeby nastepnie obliczyło z tych liczb te 4 podstawowe operacje arytmetyczne jak wyżej w nawiasie..

W kodzie brakuje dużo i chciałbym byście mi troche z tym pomogli (jestem nowicjuszem wręcz amatorem). miałem zamiar jeszcze do tego kodu wprowadzić pare etykiet żeby w nich były wykonywane te obliczenia. A i chciałbym aby mi wyświetliło wyniki po zakończeniu. Proszę o pomoc..

Z góry dzięki.

PS> mam nadzieje że coś wymyślimy...

 .model tiny
.code

napis db "Co chcesz zrobic?" ,13,10, "1-dod  2-odej  3-mnoz  4-dziel$"
dod   db "DODAWANIE:$"
odej  db "ODEJMOWANIE:$"
mnoz  db "MNOZENIE:$"
dziel db "DZIELENIE:$"
pod   db "Podaj liczbe1: $"
pod2  db "podaj liczbe2: $"

licz1 dw ?
licz2 dw ?

start:

liczby:
 mov ax,@data
 mov ds,ax
  mov ah,09h
  mov dx,offset pod     ;wyswietlenie tekstu
  int 21h
  mov ah,0
  int 16h

  mov ah,09h
  mov dx,offset pod2
  int 21h
  mov ah,0
  int 16h                               

;wczytanie klawisza
 mov ah,09h
 mov dx,offset napis    ;wyswietlenie tekstu
 int 21h
                         
  mov ax,4C00h
  int 21h


end start
0

nie wiem czy to coś pomoże ale działam dalej i troche pozmieniałem kod:

.model tiny
.code

napis db "Co chcesz zrobic?" ,13,10, "1-dod  2-odej  3-mnoz  4-dziel$"
dod   db "DODAWANIE:$"
odej  db "ODEJMOWANIE:$"
mnoz  db "MNOZENIE:$"
dziel db "DZIELENIE:$"
pod   db "Podaj liczbe1: $"
pod2  db "podaj liczbe2: $"

licz1 db ?
licz2 db ?
klawisz db ?
wynik db ?

start:

liczby:
 mov ax,@data
 mov ds,ax

;liczba 1
  mov ah,09h
  mov dx,offset pod     ;wyswietlenie tekstu
  int 21h
  mov ah,0              ;wczytanie 1-ej liczby
  int 16h

  mov bl,al             ;liczba 1 w bl
                           ;?int 21h

;liczba 2
  mov ah,09h
  mov dx,offset pod2    ;wyswietlenie napisu
  int 21h
  mov ah,0              ;wczytanie 2-ej liczby
  int 16h               ;liczba 2 w al

  mov cl,al



;wczytanie klawisza
 mov ah,09h
 mov dx,offset napis    ;wyswietlenie tekstu
 int 21h
 mov ah,0
 int 16h

 mov klawisz, '1'
 cmp klawisz, al
 je dodaj
  
           dodaj:
             mov ah, 09h
             mov ah, offset dod
             int 21h                      
             add bl, cl             ;dodawanie
             mov wynik, bl
             ret

  mov ah, 09h
  int 21h

  mov ax,4C00h
  int 21h


end start
0

i jeszcze takie coś:
jedynie co to wyskakuje mi tu błąd systemowy.. coś mam jeszcze źle.

.model tiny

.stack 100h
.code

napis db "Co chcesz zrobic?" ,13,10, "1-dod  2-odej  3-mnoz  4-dziel$"
dod   db "DODAWANIE:$"
odej  db "ODEJMOWANIE:$"
mnoz  db "MNOZENIE:$"
dziel db "DZIELENIE:$"
pod   db "Podaj liczbe1: $"           
pod2  db "podaj liczbe2: $"           
wynik db ?
klawisz db ?
start:

liczby:
 mov ax,@data
 mov ds,ax

;liczba 1
  mov ah,09h
  mov dx,offset pod     ;wyswietlenie tekstu
  int 21h
  mov ah,0              ;wczytanie 1-ej liczby
  int 16h

  mov bl,al             ;liczba 1 w bl
                         

;liczba 2
  mov ah,09h
  mov dx,offset pod2    ;wyswietlenie napisu
  int 21h
  mov ah,0              ;wczytanie 2-ej liczby
  int 16h               ;liczba 2 w al

  mov cl,al



            ;wczytanie klawisza
 mov ah,09h
 mov dx,offset napis    ;wyswietlenie tekstu
 int 21h
 mov ah,0
 int 16h
 jmp por1

 por1:
   mov klawisz, '1'
   cmp klawisz, al
   je dodaj           ;przejscie do etykiety dodaj
   jne por2
  
           dodaj:
             mov ah, 09h
             mov ah, offset dod                     
             add bl, cl             ;dodawanie
             mov wynik, bl
             int 21h
             ret
 por2:
   mov klawisz, '2'
   cmp klawisz, al
   je odejmij           ;przejscie do etykiety odejmij
   jne por3

           odejmij:
             mov ah, 09h
             mov ah, offset odej                    
             sub bl, cl             ;odejmowanie
             mov wynik, bl
             int 21h
             ret

 por3:
   mov klawisz, '3'
   cmp klawisz, al
   je mnoze           ;przejscie do etykiety mnoze
   jne por4

           mnoze:
             mov ah, 09h
             mov ah, offset mnoz
             mov al, bl
             
             mul cl             ;mnozenie
             mov wynik, al
             int 21h
             ret

 por4:
   mov klawisz, '4'
   cmp klawisz, al
   je dziele           ;przejscie do etykiety dziele
   jne koniec

           dziele:
             mov ah, 09h
             mov ah, offset dziel
             mov al, bl

             div cl             ;dzielenie
             mov wynik, al
             int 21h
             ret

  mov ah, 09h
  int 21h

koniec:
  mov ax,4C00h
  int 21h


end start
0

emu8086 twoim przyjacielem.

0

Co robi ten program? pomoże mi z tym kodem? (jestem zielony...) Możecie mi przerobić ten kod żeby działał?

0
  1. Pozwala ci klikać przez program instrukcja po instrukcji, wyświetlając jednocześnie stan rejestrów i zrzut pamięci.
  2. Jeśli masz iq > 70 to pomoże. Jeśli mniejsze to juz ci nic nie pomoże.
  3. Nie, nie moglibyśmy. Niby czemu komus miałoby się chcieć to robić bardziej niż tobie? o_O
0
Shalom napisał(a):
  1. Pozwala ci klikać przez program instrukcja po instrukcji, wyświetlając jednocześnie stan rejestrów i zrzut pamięci.
  2. Jeśli masz iq > 70 to pomoże. Jeśli mniejsze to juz ci nic nie pomoże.
  3. Nie, nie moglibyśmy. Niby czemu komus miałoby się chcieć to robić bardziej niż tobie? o_O

nie będę ukrywał że jesteś "bardzo miły" kolego... może Ty masz mniej niż 70 :P ale spoko sam sobie poradzę bez łaski.. kiedyś Tobie może być potrzebna pomoc...

0
             mov ah, 09h
             mov ah, offset dod                     
             add bl, cl             ;dodawanie
             mov wynik, bl
             int 21h

Ile wynosi ah a ile powinno?

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