Zadaci Asm Prog - Jez.

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 13

Zadatsak: Objasnniti kod na asemblerskom jeziku. SP registar je inicijalno postavlen na 50.

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

Zadatak. Prevesti sa viseg programskog jezika u asembler:


Int x = 10;
Int y = 7;
Int z = 5;

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

;heksadecimalni broj koji pocinje slovom mora imati 0 ispred

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

;uporedjujemo trenutni min sa trenutnim clanom niza


;ako je min manji skacemo
;ukoliko nije njega upisujemo kao minimum
;uporedjujemo trenutno najveci sa sledecim u nizu
;ukoliko je max veci skacemo
; ukoliko nije upisujemo novi max
;ispitivanje sledeceg elementa

Mov ax, 4c02H


Int 21h
Code ends
End start

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

;heksadecimalni broj koji pocinje slovom mora imati 0 ispred

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

Sub dx, zbir + 2


Jns rez_poz
Neg ax
Neg dx
Rez_poz:
Mov razlika, ax
Mov razlika + 2, dx
........................
Zadatak: Za brojeve zadate na memoriskim lokacijma BR1, BR2, BR3, BR4, BR5 izraunati izraz
(BR1 + BR2)*BR3 BR4/BR5
Ako su BR3 i BR4 16-bitni, dok su BR1, BR2 i BR5 8-bitni. Predpostaviti da su sva deljenja celobrojna.
Name aritmetika
Data segment
Br1 db 5
Br2 db 10
Br3 dw 2
Br4 dw 20
Br5 db 10
Data ends
Code segment
Assume cs:code, ds:data
Start:
Mov ax, data
Mov ds, ax
Mov ax, br4
Mov cl, br5
Div cl

; 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

;jer sabiranje 8bitnih podataka moze da ima prenos


;rezultat je u dx:ax
;oduzimanje
;jer oduzimanje moe da bude sa pozjmicom

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

; adresa prvog elementa niza


; u ah je razlika izmedju malog i odgovarajuceg velikog

slova
petlja: mov al, [si]
cmp al, 0
je kraj

; provera da li je kraj niza

cmp al, 'A'


jb
preskok ; nije slovo u pitanju
cmp al, 'Z'
ja
mozdamalo
;nije veliko slovo u pitanju
add al, ah
;konverzija u malo slovo
jmp upis
mozdamalo: ; ovde dosao zato sto je vece od 'Z'
cmp al, 'a'
jb preskok ; nije slovo u pitanju
cmp al, 'z'
ja preskok ; nije slovo u pitanju
sub al, ah
;konverzija u veliko slovo
upis: mov [si], al
preskok: inc si
jmp petlja
kraj:
code

mov ah,4Ch
int 21h
ends

end

start

Zadatak: Napisati asemblerski program za izraunavanje izraza:


(1*2 + 2*3 + 3*4 + ... + (n-1)*n) / (n*n)
pri emu je n 8-bitni broj zadat na lokaciji N, proizvodi su 16-bitni brojevi, a zbir proizvoda je 32-bitni
broj. Rezultat deljenja smestiti na lokaciju REZ, a ostatak na lokaciju OST. NAPOMENA: Nije dozvoljeno
koridenje pomodnih memorijskih lokacija.
ame

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

mov word ptr BR+2,cx

code
end

; puni visu rec u mem. iz CX

mov ah,4Ch
int 21h
ends
start

Zadatak: Napisati program na asemblerskom jeziku za izracunavanje izraza:


( 1! / 1 ) + ( 2! / 2 ) + ( 3! / 4 ) + . . . + ( n! / 2n-1 )
pri cemu je N osmobitni broj. Faktorijele tretirati kao 32-bitne brojeve, stepene broja dva kao 16-bitne
brojeve. Dobijeni rezultat (32-bitni broj) smestiti na lokaciju REZ. Maksimizovati brzinu izvravanja
programa.

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

; u SI je nizi 16-bitni deo faktorijela


; u DI je visi 16-bitni deo faktorijela

mov cl,1
xor ch,ch

; pamti k, za racunanje faktorijela


; i CX = k takodje

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

Zadaci za samostalno vebanje


Zadatak Odrediti broj pojavljivanja broja 25 u nizu elementa, zadatom na lokaciji niz i zameniti sva ta
pojavljivanja brojem 50. Elementi niza su 16-bitni.
Zadatak Odrediti zbir elemenata niza zadatog na memoriskoj lokaciji niz, pri emu je broj elemenata niza
dat na lokaciji broj. Elementi niza su 32-bitni. Zbir elemenata treba smestiti na memoriskoj adresi zbir.
Zadatak. Odrediti zbir elementata niza 16-bitnih elemenata zadatog na memoriskoj lokaciji niz, pri emu
je dato da se niz zavrava elementom #.
Zadatak Odrediti broj elemenata 16-bitnog niza koji se nalazi na memoriskoj adresi niz koji su manji od
100 i vedi od 10.
Zadatak. Koridenjem logikih instrukcija odrediti broj nula u zadatom 16-bitnom podatku na lokaciji
BR1. Rezultat smestiti na adresu BROJ.

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.

Zadatak:Objasnniti kod na asemblerskom jeziku. SP registar je inicijalno postavljen na 500.


Stack segment
Bos dw 100 dup(?)
Tos label word
Stack ends
Code segment:
Start:
Assume ss:stack
Mov ax, stack
Mov ss, ax
Lea sp, tos

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

Zadatak: Iskaz na visem programskom jeziku prevesti na assembler.


X=30;
Y=20;
For i= 1 to 5
{
If(x<y)
{
Z= x+i
{
Else
{
Z=y-i
}
}
Zadatak:.
Napisati program koji pronalazi najmanji element niza. Niz sadrzi sledece cifre
5,10,11,50,100,3.

You might also like