Hej,
dostałem następujące polecenie:
Napisz program w ASM, który będzie obliczał następujące wyrażenie arytmetyczne na liczbach całkowitych 16 bitowych bez znaku:
z=3(a+2(b+c))
Dane wejściowe (oczywiście trzeba je zamienić na jakieś sensowne) powinny być zapisane w programie jako:
a: dw 0
b: dw 0
c: dw 0
Wynik powinien być zapisany pod etykietą:
z: dw 0
Program nie musi nic wypisywać, tylko obliczanie.
Napisałem do tego taki kod:
%macro dodawanie 2
pop ax
pop bx
add ax, bx
push ax
%endmacro
%macro odejmowanie 2
pop ax
pop bx
sub ax, bx
push ax
%endmacro
%macro mnozenie 1
pop ax
mul bx
push ax
%endmacro
;obliczanie z=3(a+2(b+c)) za pomoca stosu
org 100h ;przejscie w tryb graficzny
;mov ax, 13h - w tym programmie to nie jest potrzebne
push word [c] ;c na stos
push word [b] ;b na stos
dodawanie ax, bx ;wywolanie macra dodawanie
push word [b]
push word 2
mnozenie bx
push word [b]
push word [a]
dodawanie ax, bx
push word [a]
push word 3
mnozenie bx
z: pop ax
mov ax, 4c00h ;zakonczenie programu
int 21h
a: dw 2 ;deklarowanie a
b: dw 3 ;deklarowanie b
c: dw 4 ;deklaorowanie c
;z: dw 0 ;deklaorwanie z - tutaj bedzie zapisany wynik
No i tutaj moja prośba - potrzebuje kogoś kto mi to sprawdzi i napisze co jest źle :)
Dzięki!