inicijalno postavlen na 50.Prikazati u Zadatsak: Objasnniti kod na asemblerskom jeziku. SP registar je inicijalno 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 – 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
Zaatak Korišdenjem logičkih instrukcija oreiti zbir jeinica u zaatom 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 brojača ;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 at na memoriskoj aresi 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 izračunati 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
;rezultat je u dx:ax
Sub ax, cx Sbb dx,0
;oduzimanje ;jer ouzimanje može a bue sa pozjmicom
Mov ax, 4c02H Int 21h
;jer sabiranje 8bitnih podataka moze da ima prenos
Code ends End start
Zadatak 1: Dat je tekst koji je zapamcen u memoriji kao niz pocev o lokacije TEXT. Niz se završava
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 m enjati.
name
Jun_2005_2
data
segment TEXT db ' ends
data code assume start:
prva
Recenica.
A ovo je
druga
.', 0h
segment cs:code, ds:data 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 izračunavanje 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 korišdenje pomodnih memorijskih lokacija. ame
Mart_2001_1
data
segment N db 5 REZ dw ? OST dw ? ends
data code assume start:
segment cs:code,ds:data 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 označen 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 assume start:
lab:
kraj:
segment cs:code,ds:data mov ax,data mov ds,ax 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 izvršavanja programa.
name
Jun_2003_1
data
segment N db 9 REZ dd ? ends
data code assume start:
segment cs:code,ds:data 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 zaatog počev o memorijske lokacije BROJ oduzima sve elemente niza 16-bitnih elemenata zapamdenog počev o memorijske lokacije NIZ. Broj elemenata niza je osmobitni broj zapamden na memorijskoj lokaciji N. Rezultat smestiti počev o 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 o K reči koje počinju o arese RECI a rezultat tipa upla 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 ve žbanje 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 Oreiti zbir elemenata niza zaatog 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 zaatog na memoriskoj lokaciji niz, pri čemu je ato a se niz završava elementom „#“. Zadatak Odrediti broj elemenata 16-bitnog niza koji se nalazi na memoriskoj adresi niz koji su manji od 100 i vedi o 10. Zadatak. Korišdenjem logičkih instrukcija oreiti broj nula u zaatom 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 sačuvati 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 eo koa koji sabira poatke na memoriskim lokacijama DS:0001 i DS:0002 i smešta ih
na lokaciju DS:001h. Zadatak: Sabrati dva 32 bitna broja x i y i smestiti rezultat na lokaciju z. Zadatak. Izračunati izraz x = A/B/C, svi operani su 16-bitni neoznačeni brojevi. Rezultat treba a bue
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
} 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
Napisati program koji pronalazi najmanji element niza. Niz sadrzi sledece cifre
5,10,11,50,100,3.