Obliczenia wyrażenia arytmetycznego – codereview

0

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!

2

Te makra tylko Ci gmatwają kod (wywal je, wrzuć bezpośrednio w kod i dodaj komentarz) i ogólnie jest to jakiś idiotyczny przykład wykorzystania stosu (nie jest on nigdzie tak stosowany). Praktyczne zastosowanie stosu to wykorzystanie go przy wywoływaniu funkcji, zachowywaniu tymczasowych wartości rejestrów (a tu nie potrzebujesz niczego tymczasowego), ochrona wrażliwych rejestrów w ciałach funkcji (które nie mogą być modyfikowane pomiędzy wywołaniami funkcji) i to chyba tyle. Temu, który wymyślił Ci taki przykład "wykorzystania stosu" przekaż, żeby został przy programowaniu CSS-a przez JavaScript.

A co do błędu to polecam wrzucić sobie kod do jakiegoś debuggera i krok po kroku prześledzić jego działanie i obserwować stan rejestrów po kolejnych operacjach. Nauczysz się tak więcej i szybko znajdziesz jakikolwiek błąd, zwłaszcza w tak małym programie.

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