Asembler kolejność działań


(Michal Noworolnik) #1

Mam napisać programik w asemblerze (kompilator emu 8086): "Wykonać działanie 2+25*4-90/6. Wynik zapisać w rejestrze bazowym.

(uwaga na kolejność wykonywania działań) "

Możecie sprawdzić jaki błąd popełniłem bo wynik powinien być chyba 87 w rejestrze bazowym a mi wychodzi 38.

Kod: http://wklej.to/DuaP7


(Grzelix) #2

Jak dla mnie to strasznie tu namieszałeś (komentarze nie zgadzają się z komendami, szczerze ty to pisałeś? czy robiłeś kopiuj wklej z różnych skryptów bez większego zastanowienia?):

MOV AX, 25 ; wpisuje wartość 25 do rejestru AX 

MOV BX, 4 ; wpisuje wartość 4 do rejestru BX 

MUL BX ; MNOZYMY przez siebie wartości AX i BX (wynik w AX)  

MOV BX, AX ;wynik mnożenie wstawiamy do BX -- Poprawione po uwadze od @Pablo_Wawa

MOV AX,90 ; wpisuje wartość 90 do rejestru AX 

MOV CX,6 ; wpisuje wartość 6 do rejestru CX 

div CX ; DZIELIMY przez siebie wartości AX i CX (wynik w AX)  

sub bx,ax ; bx czyli 25*4 subtract ax czyli 90/6 (wynik w BX)

add bx,2

ret

ja bym tak to widział.

EDIT:

kod poprawiony zgodnie z poniższą uwagą.


(Pablo_Wawa) #3
MOV AX, BX ;wynik mnożenie wstawiamy do BX

Przecież powinno być

MOV BX, AX ;wynik mnożenie wstawiamy do BX

bo w takim zapisie argument prawy (AX) ląduje do lewego (BX), prawda?

A reszta wygląda na w porządku. :slight_smile:


(Michal Noworolnik) #4

Nie robiłem ze skryptów natomiast z poprzedniego programiku zostały komentarze. Przepraszam za chaos. :slight_smile: