IIIe - ZA
KONTROLNI pogledati SVE zadatke
1. NAP (napisati asemblerski program) koji unosi broj sa ulaza i ispisuje
ga u izlazni prozor(output prozor u programu SIMx86).
GET ;upisuje broj sa ulaza u AX
PUT ;upisuje program iz AX u izlaz
RESENJE:
GET
PUT
HALT
Uporedite sa
C kôdom:
#include
<stdio.h>
main()
{
unsigned a;
scanf(“%u”,
&a);
printf(“%u”,a);
}
2. NAP koji
unosi broj sa ulaza i ispisuje ga u
memorijske lokacije (1000)16
GET
MOV [1000],AX
HALT
Kako bi ovo uradili u C-u? Moze li to?
3. NAP koji unosi broj sa ulaza i ispisuje broj za
15 veci u izlazni prostor. Ne zaboravite (15)10 = (F)16
GET
ADD AX,f
PUT
HALT
4. NAP koji ispisuje u izlazni prostor
broj za 15 veci od broja koji se nalazi na memorijskoj
lokaciji (1000)16.
MOV AX, [1000]
ADD AX,f
PUT
HALT
5. NAP koji broj sa memorijske lokacije (1000)16 uvecava za 1.
Nekorektno resenje (sintaksna greska u naredbi ADD, jer [1000] nije CPU
registar):
ADD
[1000], 1
HALT
Korektno
resenje:
MOV
AX, [1000]
ADD
AX,1
MOV
[1000], AX
HALT
6. NAP koji sa
ulaza unosi dva broja, a na izlaz ispisuje njihov maksimum.
GET
MOV BX,AX ;
BX=prviBroj
GET ; AX=drugiBroj
CMP
AX, BX ; rez=prviBroj-drugiBroj
JA
k ; if (rez >0) goto a; tj, ispisi AX, tj. ispisi drugiBroj
MOV
AX, BX ; else AX=prviBroj
k:
PUT ; ispisi AX
HALT
7. NAP koji poredi sadrzaj sa
dve memorijske lokacije (1000)16 i (1002)16 i na izlaz
ispisuje veci sadrzaj.
MOV
AX, [1000]
MOV
BX, [1002]
CMP
AX,BX
JA
k ; if (AX >BX) goto k
MOV
AX, BX ; else AX=BX
k:
PUT ; ispisi AX
HALT
8.
NAP koji ispisuje na standardni izlaz 0, ako sadrzaj
sa memorijske lokacije [1000] je paran, a u suprotnom ispisuje 1
IDEJA: Ako je broj AX paran onda
test and ax,1 ce dati AX=0, jer se parni broj AX zavrsava sa 0
MOV AX, [1000]
and ax,1 ;provera da li broj u ax je paran putem provere najnizeg bita
PUT
HALT
9.
NAP koji ispisuje na standardni izlaz 1, ako sadrzaj
sa memorijske lokacije [1000] je paran, a u suprotnom ispisuje 0
IDEJA: Ako je broj AX paran
onda test and ax,1 ce dati AX=0, jer se parni broj AX
zavrsava sa 0
MOV AX, [1000]
and ax,1 ;provera da li broj u ax je paran putem provere najnizeg bita
CMP AX,0
JE k ;tad treba u AX upisati 1 i
zavrsiti program
MOV AX,0 ; u suprotnom treba upisati 0 u AX i zavrsiti program
JMP g
k: MOV AX,1
g: PUT
HALT
10. Sastaviti program za hipotetički
procesor x86 koji bi izračunavao vrednost izraza:
AX:=2*(2a+3b-c)
gde su a, b c simbolička imena za
memorijske reči koje se nalaze na adresama 1000, 1002 i 1004.
;upotreba registara AX, BX, CX
mov ax,[1000]
mov bx,[1002]
mov cx,[1004]
add ax,ax
;ax=2a
add ax,bx ;ax=2a+b
add bx,bx; bx=2b
add ax,bx
;ax=2a+3b
sub ax,cx
;ax=2a+3b-c
add ax,ax
;ax=2(2a+3b-c)
halt
RESENJE br.2
;upotreba registara AX, BX
mov bx,[1000]
;bx=a
add bx,[1002] ;bx=a+b
add bx,bx ;bx=2(a+b)
add bx,[1002] ;bx=2a+3b
sub bx,[1004] ;bx=2a+3b-c
mov ax,bx ;ax=2a+3b-c
add ax,ax ;ax=2(2a+3b-c)
halt
11. Sastaviti program za hipotetički procesor x86 koji bi za ulazne
podatke x1, x2 i x3 i izračunavao i prikazivao vrednost izraza:
y = min (x1, x2, x3)
get
;ax=x1
mov bx,ax
;bx=x1
get
;ax=x2
cmp bx,ax
;cmp x1,x2
jb a
;ako x1<x2 labela a
mov bx,ax
;ako x1>=x2, neka bx=min(x1,x2)=x2
a: get
;ax=x3
cmp ax,bx
;cmp x3, min(x1,x2)
jb b
; ako min=x3 u AXu, skoci na stampu
mov ax,bx
;inace BX cuva min, te premesti ga tako da AX=min(x1,x2,x3)
b:put
;stampaj AX
halt
12. Sastaviti program za hipotetički procesor x86 koji bi izračunavao
vrednost izraza:
AX:=(a+b)-(c+d)
gde su a, b, c, d simbolička imena za
memorijske reči koje se nalaze na adresama 1000, 1002, 1004 i 1006.
mov ax,[1000] ; a->ax
add ax,[1002] ; a+b ->ax
sub ax,[1004] ;a+b –c ->ax
sub ax,[1006] ;a+b –c-d ->ax
halt