Kalkulator Assembler

Odpowiedz Nowy wątek
2014-12-29 15:24
Everuss
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

Pozostało 580 znaków

2014-12-29 16:45
Everuss
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

Pozostało 580 znaków

2014-12-29 19:41
Everuss
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

Pozostało 580 znaków

2014-12-30 13:17
0

emu8086 twoim przyjacielem.


Na PW przyjmuje tylko (ciekawe!) zlecenia. Masz problem? Pisz na forum, nie do mnie.

Pozostało 580 znaków

2014-12-30 15:11
Everuss
0

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

Pozostało 580 znaków

2014-12-30 17:45
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

Na PW przyjmuje tylko (ciekawe!) zlecenia. Masz problem? Pisz na forum, nie do mnie.

Pozostało 580 znaków

2015-01-02 11:34
Everuss
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...

Pozostało 580 znaków

2015-01-04 18:18
0
mov ah, 09h
mov ah, offset dod                     
add bl, cl             ;dodawanie
mov wynik, bl
int 21h

Ile wynosi ah a ile powinno?

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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