Skip to main content Link Menu Expand (external link) Document Search Copy Copied
WIA2 Lab 5

Arytmetyka

Niby proste, ale system zawiesić potrafi


Dzisiaj zaczniemy od dodawania i odejmowania, potem przejdziemy do dzielenia i mnożenia. Zaczniemy od utworzenia sobie labeli ze zmiennymi a, b oraz c. Wynik przechowamy sobie w y. Dzisiejsze zadania będziemy realizować na tych trzech „zmiennych”.

a dw 0x05
b dw 0x3B
c dw 0x4C
y dw 0x0

Pamiętać należy o tym, że w takie sposób:

MOV AX, a

przypiszemy do rejestru AX adres z pamięci etykiety a. Jeśli chcemy umieścić tam wartość z pamięci, to tę etykietę wziąć musimy w nawias kwadratowy:

MOV AX, [a]

Instrukcje

Od najprostszych zaczynając: DEC i INC - instrukcje dekrementujące i inkrementujące. Przyjmują jeden argument - rejestr lub adres w pamięci - i zmniejszą lub zwiększą podaną wartość o 1.

INC AX
DEC [b]

Dalej czeka nas dodawanie i odejmowanie. ADD i SUB są rownież bardzo proste - przyjmują dwa argumenty, z czego pierwszy musi być rejestrem lub adresem z pamięci, drugi natomiast może być rejestrem, adresem z pamięci lub sztywną wartością - podanie jako obu argumentów adresów z pamięci nie jest możliwe. Wynik operacji przechowywany będzie w pierwszym podanym argumencie.

ADD AX, 5h      ;AX=AX+5
SUB AX, 10h     ;AX=AX-10h

Najtrudniejszymi operacjami będą MUL i DIV - obie te operacje przyjmują tylko jeden argument, natomiast drugi argument determinowany będzie na podstawie rozmiaru tego podanego.

Jeśli do MUL podany argument będzie rozmiaru byte, to przemnożony zostanie rejestr AL, wynik umieszczony w AX. Jeśli podany argument będzie miał rozmiar word, to przemnożony przez niego zostanie rejestr AX, a wynik przechowany będzie na parze DX:AX

MUL DL      ;AX=AL*DL

Jeśli do DIV podany argument będzie rozmiaru byte, to podzielony zostanie rejestr AX, wynik umieszczony w AL, reszta w AH. Jeśli podany argument będzie miał rozmiar word, to podzielona przez niego zostanie liczba zapisana na parze DX:AX, wynik przechowany będzie w AX, reszta w DX.

DIV DL      ;AL=AX/DL

Zadania do laboratorium

Na punkt z zajęć - 7 z 10 zadań.

  1. Napisz program który obliczy wzór: a+b+c
  2. Napisz program obliczający wzór: 𝑎∗𝑏+𝑐
  3. Napisz program obliczający wzór: 2𝑎+2𝑏−2𝑐
  4. Napisz program obliczający wzór: (a/b)+𝑐
  5. Napisz program obliczający wzór: a/(b+c)
  6. Napisz program obliczający wzór: a*(b/c)
  7. Napisz program obliczający wzór: a^2+2b+c
  8. Napisz program obliczający wzór: 2a*(b/2c)
  9. Napisz program obliczający wzór: a*(b+a/c)
  10. Napisz program obliczający wzór: a/2+b/3+c/4