Professional Documents
Culture Documents
Zadaci Asm Prog - Jez.
Zadaci Asm Prog - Jez.
Zadaci Asm Prog - Jez.
Prikazati u
svakom koraku sadrzaj memorijske lokacije u magacin na koji ukazuje SP. Upisati krajnje vrednosti u
registre Ax, Bx Cx i Dx.
mov ax,6
push ax
mov bx,3
push bx
mov cx,1
push cx
mov dx,8
push dx
pop ax
pop bx
pop dx
pop cx
odgovor: ax=8, bx=1, cx=3, dx=6
For i = 1 to 3
{
If ( x > y )
z = z + i;
Else
z = z i;
}
pon:
x db 10
y db 7
z db 5
mov dl, z
mov bl, 1
mov al, x
mov cx, 3
cmp al, y
jg skok
sub dl, bl
jmp kraj
skok:
add dl, bl
kraj: inc bl
loop ponovi
mov z, dl
Zadatak. Odrediti maksimalni i minimalni element niza, ako je broj elemenata dat na lokaciji broj, a
elementi niza su 16-bitni brojevi. Minimalni i maksimalni element smestiti na memoriske lokacije min
i max
Name MinMax
Data segment
Br1 dw 0af05
Broj db 0
Data ends
Code segment
Assume cs:code, ds:data
Start:
Mov ax, data
Mov ds, ax
Lea si, niz
Mov bx, [si]
Mov dx, bx
Mov cl, broj
Mov ch,0
Petlja:
Mov ax, [si]
Cmp bx, ax
Jna
min_je_manji
Mov bx, ax
min_je_manji:
Cmp dx, ax
Ja max_je_veci
Mov dx, ax
Max_je veci:
Add si,2
Loop petlja:
Mov min, bx
Mov max, dx
Zadatak Koridenjem logikih instrukcija odrediti zbir jedinica u zadatom 16-bitnom podatku na
lokaciji BR1. Rezultat smestiti na adresu BROJ.
Name logika
Data segment
Br1 dw 0af05
Broj db 0
Data ends
Code segment
Assume cs:code, ds:data
Start:
Mov ax, data
Mov ds, ax
Mov bx, br1
Mov ax,0
Mov dx,0001h
Mov cx, 16
Adc al,0
Petlja:
And dx, bx
Add al, dl
Shr bx, 1
mov dx, 0001h
loop petlja
;priprema brojaa
;priprema maske
;priprema petlje
;izdvajamo cifru po cifru
;izdvajanje poslednje cifre
;sabiranje sa 0 ili 1
;pomeranje podatka u bx za jednp mesto u desno
;ponovo postavljamo masku u dx
mov broj, al
Mov ax, 4c02H
Int 21h
Code ends
End start
Zadatak. Odrediti razliku zbira dva niza 16-bitnih elemenata zadatih na memoriskim adresama niz1 i
niz2 pri emu je broj elemenata niza isti i dat na memoriskoj adresi brojel. Rezultat smestiti na
memoriskoj adresi RAZLIKA, a zbirove na ZBIR1 i ZBIR2.
.......................
Mov si, offset niz1
Mov cl, brojel
Mov ch,0
Xor dx, dx
Petlja:
Add dx, [si]
Adc zbir1 + 2, 0
Add si, 2
Loop petlja1
Mov zbir1, dx
Lea si, niz2
Mov cl, brojwl
Mov ch,0
Xor dx, dx
Petlja2:
Add dx, [si]
Adc zbir2 + 2, 0
Add si,2
Loop petlja
Mov zbir2, dx
;oduzimanje
Mov ax, zbir2
Sub ax, zbir1
Mov dx zbir2 +2
Sbb dx,0
; izracunavanje br4/br5
;rezultat je u al, ostatak je u ah
Xor cx, cx
Mov cl, al
Mov ax,0
Mov al, br1
Add al, br2
Adc ah,0
Mov cx, br3
Mul cx
Sub ax, cx
Sbb dx,0
Mov ax, 4c02H
Int 21h
Code ends
End start
Zadatak 1: Dat je tekst koji je zapamcen u memoriji kao niz pocev od lokacije TEXT. Niz se zavrava
bajtom 00h. Tekst se sastoji od malih, velikih slova i interpunkcijskih znakova. Napisati program na
asemblerskom jeziku kojim se sva mala slova u tekstu konvertuju u velika, a sva velika slova se
konvertuju u mala. Ostale karakere ne treba menjati.
name
Jun_2005_2
data
segment
TEXT db '
ends
data
prva
Recenica.
A ovo je
druga
.', 0h
code
segment
assume cs:code, ds:data
start: mov ax,data
mov ds,ax
lea
mov
mov
sub
si,
ah,
al,
ah,
TEXT
'a'
'A'
al
slova
petlja: mov al, [si]
cmp al, 0
je kraj
mov ah,4Ch
int 21h
ends
end
start
Mart_2001_1
data
segment
N db 5
REZ dw ?
OST dw ?
ends
data
code
segment
assume cs:code,ds:data
start: mov ax,data
mov ds,ax
mov cl,N
mov ch,0
dec cx
xor dx,dx
xor bp,bp
petlja: mov al,cl
mov bl,al
inc bl
mul bl
add dx,ax
adc bp,0
loop petlja
mov al,N
mul al
mov bx,ax
mov ax,dx
mov dx,bp
div bx
mov REZ,ax
mov OST,dx
code
end
mov ah,4Ch
int 21h
ends
start
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
(cl)=n
(cx)=n
(cx)=n-1
(dx)=0
(bp)=0
(al)=k (tekuci korak)
(bl)=k
(bl)=k-1
(ax)=k*(k-1)
(dx)=(dx)+(ax)
(bp)=(bp)+carry
Skok ako je (cx)<>0
(al)=n
(ax)=n*n
(bx)=n*n
u AX je niza rec zbira
u DX je visa rec zbira
(ax)=(dx:ax)div(bx),(dx)=(dx:ax)mod(bx)
Zadatak: Dat je niz pakovanih BCD cifara na lokaciji NIZ. Kraj niza je oznaen binarnom etvorkom 1111.
Napisati program na asemblerskom jeziku koji zadati niz prevodi u 32-bitni binarni broj na lokaciji BR.
name
Mart_2001_2
data
segment
NIZ db 12h,34h,56h,78h,0F0h
BR dd ?
ends
data
code
segment
assume cs:code,ds:data
start: mov ax,data
mov ds,ax
lab:
kraj:
xor ax,ax
; (ax)=0 - u AX je niza rec bin. broja
xor cx,cx
; (cx)=0 - u CX je visa rec bin. broja
mov di,10
; koristi se kod mnozenja
lea si,NIZ
; (si)=offset(NIZ)
mov bl,NIZ[si] ; u BL se smesta k-ti bajt
inc si
; (si)=(si)+1 - priprema za sledeci prolaz
mov bh,bl
; pravi se kopija u BH
shr bl,1
; shiftuje u desno cetiri puta
shr bl,1
shr bl,1
shr bl,1
; posmatramo prvu BCD cifru u bajtu
cmp bl,0Fh
; da li je to kraj niza
je kraj
; ako jeste 1111 izlazi iz petlje
; OBRADA PRVE BCD CIFRE IZ UCITANOG BAJTA
mul di
; (dx:ax)=(ax)*10
mov bp,ax
; prvi kopiju reg. AX u BP
mov ax,cx
; CX ide u AX
mov cx,dx
; rezultat iz DX je deo nove vise reci broja
mul di
; mnozi staru visu rec sa 10 (dx:ax)
add cx,ax
; (cx)=(cx)+(ax)
mov ax,bp
; vraca nizu rec u AX (ostalo se odbacuje)
add al,bl
; dodaje tekucu cifru
adc ah,0
; visem bajtu nize reci dodaje prenos
adc cx,0
; visoj reci dodaje eventualni prenos
; OBRADA DRUGE BCD CIFRE IZ UCITANOG BAJTA
mov bl,bh
; kopira sacuvani bajt iz BH u BL
and bl,0Fh
; postavlja visi polubajt na 0000
cmp bl,0Fh
; ispituje da li je to 1111
je kraj
; ako jeste izlazi iz petlje
mul di
; mozenje je identicno kao malopre
mov bp,ax
mov ax,cx
mov cx,dx
mul di
add cx,ax
mov ax,bp
add al,bl
adc ah,0
adc cx,0
jmp lab
; bezuslovni skok na pocetak petlje
mov word ptr BR,ax
; puni nizu rec u mem. iz AX
code
end
mov ah,4Ch
int 21h
ends
start
name
Jun_2003_1
data
segment
N
db 9
REZ dd ?
ends
data
code
segment
assume cs:code,ds:data
start: mov ax,data
mov ds,ax
mov si, 1
xor di,di
mov cl,1
xor ch,ch
petlja: mov ax, si ; treba pomnoziti 32b faktorijel (DI:SI) sa k (CX). Dva
parcijalna proizvoda, koji se saberu
mul cx
; prvi parcijalni proizvod u dx:ax
mov bx, ax ; BP:BX privremeno cuva faktorijel
mov bp, dx
mov ax, di ; gornja rec faktorijela se mnozi
mul cx
add bp, ax
; donja rec drugog parc. proizvoda + gornja rec prvog
parc. proizvoda. Gornja rec drugog parc. proizv. se odbacuje, po uslovu
zadatka
mov si, bx ; faktorijel spreman za sledecu iteraciju
mov di, bp
mov ax, cx
; u petlji cemo 32-bitni faktorijel
dvojke.
deljenje: sub ax, 1 ; petlja ce se ponavljati k-1 puta
jz dalje
deliti
stepenom
rcr bp, 1
rcr bx, 1
jmp deljenje
dalje: add word ptr REZ, bx
adc word ptr REZ+2, bp
inc cx
cmp cl, N
jle petlja
code
end
mov ah,4Ch
int 21h
ends
start
Zadatak: Napisati program na asemblerskom jeziku koji od zadatog 32-bitnog broja zadatog poev od
memorijske lokacije BROJ oduzima sve elemente niza 16-bitnih elemenata zapamdenog poev od
memorijske lokacije NIZ. Broj elemenata niza je osmobitni broj zapamden na memorijskoj lokaciji N.
Rezultat smestiti poev od memorijske lokacije BROJ. (15 poena)
name oduz
data segment
broj dd 00010000h
niz dw 1, 2, 3
n db 3
data ends
code segment
assume cs: code, ds: data
start:
mov ax, data
mov ds, ax
mov ax, word ptr broj
mov dx, word ptr broj+2
mov cl, n
xor ch, ch
xor si, si
petlja:
sub ax, niz[si]
sbb dx, 0
add si, 2
loop petlja
mov word ptr broj, ax
mov word ptr broj+2, dx
code ends
end start
Zadatak: Sabrati niz od K rei koje poinju od adrese RECI a rezultat tipa dupla re smestiti na lokaciju
ZBIR.
name zbir
data segment
reci dw 5 dup(1,2,3,4,5)
k dw 25
zibr dd 0
data ends
code segment
assume cs: code, ds:data
start:
mov ax, data
mov ds, ax
mov cx, k
mov ax, 0
mov si, ax
lab1: add ax, reci[si]
adc dx, 0
add si, 2
loop lab1
mov word ptr zbir, ax
mov word ptr zbir+2, dx
code ends
end start
Zadatak: Napisati program na asembleru koji sabira sve elemente niza a zatim dobijeni rezlutat oduzeti
od vrednosti 50.Rezlutat sauvati u promenjivoj Rez. Elementi niza su: 56,34,200,23,69,100.
Zadatak. Kopirati sve parne elemente niza Niz u drugi niz pom;
Zadatak: Napisati program na asembleru koji odredjuje maksimalni i minimalni element niza a zatim
oduzeti te dve vrednosti i rezlutat smesiti u promenjivoj REZ. Elementi niza su: 56,34,200,23,69,100.
Zadatak. Napisati deo koda koji sabira podatke na memoriskim lokacijama DS:0001 i DS:0002 i smeta ih
na lokaciju DS:001h.
Zadatak: Sabrati dva 32 bitna broja x i y i smestiti rezultat na lokaciju z.
Zadatak. Izraunati izraz x = A/B/C, svi operandi su 16-bitni neoznaeni brojevi. Rezultat treba da bude
ceo broj, zanemariti ostatke koji nastanu pri deljenju.
mov ax,1
push ax
mov bx,2
push bx
pop ax
pop bx
Code ends
Zadatak: Dat je kod na asemblerskom jeziku. Objasniti ulogu svake instrukcije i napisati krajnji rezlutat
programa za promenjive pod1, pod2 i pod3
Niz db 10,2,8,3,6
Pod1 db ?
Pod2 db ?
Pod3 db ?
Mov bx,offset niz
Mov dl,[bx]
Mov al,[bx]
Mov cx,4
Inc bx
Petlja:
Cmp al,[bx]
Jg Skok
Mov al,[bx]
Skok:
Cmp dl,[bx]
Jl Manji
Mov dl,[bx]
Manji
Inc bx
Loop Petlja
Add al,dl
Mov pod3,al
Zadatak: Iskaz na visem programskom jeziku prevesti na asembler.
x=100,y=200
For i= 1 to 5
{
If(x<y)
{
x=x+1
{
Else
{
y=y-1
}
x++
y++
}
rez=x+y