Zadaci Asm

Embed Size (px)

DESCRIPTION

Zadaci Asembler

Citation preview

Zadatsak: Objasnniti kod na asemblerskom jeziku

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 cxmov dx,8push dx pop ax pop bxpop 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;Elsez = z i;}

x db 10y db 7z db 5mov dl, zmov bl, 1mov al, xmov cx, 3pon:cmp al, yjg skoksub dl, bljmp krajskok:add dl, blkraj:inc blloop ponovimov 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 MinMaxData segmentBr1 dw 0af05;heksadecimalni broj koji pocinje slovom mora imati 0 ispredBroj db 0Data endsCode segmentAssume cs:code, ds:dataStart:Mov ax, dataMov ds, ax

Lea si, nizMov bx, [si]Mov dx, bxMov cl, brojMov ch,0Petlja:Mov ax, [si]Cmp bx, ax;uporedjujemo trenutni min sa trenutnim clanom nizaJna min_je_manji;ako je min manji skacemoMov bx, ax;ukoliko nije njega upisujemo kao minimummin_je_manji:Cmp dx, ax;uporedjujemo trenutno najveci sa sledecim u nizuJa max_je_veci;ukoliko je max veci skacemoMov dx, ax; ukoliko nije upisujemo novi maxMax_je veci:Add si,2;ispitivanje sledeceg elementaLoop petlja:Mov min, bxMov max, dx

Mov ax, 4c02HInt 21hCode endsEnd start

Zadatak Korienjem logikih instrukcija odrediti zbir jedinica u zadatom 16-bitnom podatku na lokaciji BR1. Rezultat smestiti na adresu BROJ.

Name logikaData segmentBr1 dw 0af05;heksadecimalni broj koji pocinje slovom mora imati 0 ispredBroj db 0Data endsCode segmentAssume cs:code, ds:dataStart:Mov ax, dataMov ds, ax

Mov bx, br1Mov ax,0;priprema brojaaMov dx,0001h;priprema maskeMov cx, 16;priprema petljeAdc al,0Petlja:;izdvajamo cifru po cifruAnd dx, bx;izdvajanje poslednje cifreAdd al, dl;sabiranje sa 0 ili 1Shr bx, 1;pomeranje podatka u bx za jednp mesto u desnomov dx, 0001h;ponovo postavljamo masku u dxloop petlja

mov broj, al

Mov ax, 4c02HInt 21hCode endsEnd 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 niz1Mov cl, brojelMov ch,0Xor dx, dxPetlja:Add dx, [si]Adc zbir1 + 2, 0Add si, 2Loop petlja1Mov zbir1, dxLea si, niz2Mov cl, brojwlMov ch,0Xor dx, dxPetlja2:Add dx, [si]Adc zbir2 + 2, 0Add si,2Loop petlja

Mov zbir2, dx;oduzimanjeMov ax, zbir2Sub ax, zbir1Mov dx zbir2 +2Sbb dx,0Sub dx, zbir + 2

Jns rez_pozNeg axNeg dx

Rez_poz:Mov razlika, axMov razlika + 2, dx........................

Zadatak: Za brojeve zadate na memoriskim lokacijma BR1, BR2, BR3, BR4, BR5 izraunati izraz(BR1 + BR2)*BR3 BR4/BR5Ako su BR3 i BR4 16-bitni, dok su BR1, BR2 i BR5 8-bitni. Predpostaviti da su sva deljenja celobrojna.

Name aritmetikaData segmentBr1 db 5Br2 db 10Br3 dw 2Br4 dw 20Br5 db 10Data endsCode segmentAssume cs:code, ds:dataStart:Mov ax, dataMov ds, ax

Mov ax, br4; izracunavanje br4/br5Mov cl, br5Div cl;rezultat je u al, ostatak je u ah

Xor cx, cxMov cl, al

Mov ax,0Mov al, br1Add al, br2Adc ah,0;jer sabiranje 8bitnih podataka moze da ima prenosMov cx, br3Mul cx;rezultat je u dx:ax

Sub ax, cx;oduzimanjeSbb dx,0;jer oduzimanje moe da bude sa pozjmicom

Mov ax, 4c02HInt 21hCode endsEnd 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

datasegmentTEXT db ' prva Recenica. A ovo je druga .', 0hdataends

codesegmentassumecs:code, ds:datastart:mov ax,datamov ds,ax

lea si, TEXT; adresa prvog elementa nizamov ah, 'a'mov al, 'A'sub ah, al ; u ah je razlika izmedju malog i odgovarajuceg velikog slovapetlja: mov al, [si]cmp al, 0; provera da li je kraj nizaje krajcmp al, 'A'jbpreskok; nije slovo u pitanjucmp al, 'Z'jamozdamalo;nije veliko slovo u pitanjuadd al, ah;konverzija u malo slovojmp upismozdamalo: ; ovde dosao zato sto je vece od 'Z'cmp al, 'a'jb preskok ; nije slovo u pitanjucmp al, 'z'ja preskok ; nije slovo u pitanjusub al, ah;konverzija u veliko slovoupis: mov [si], alpreskok: inc sijmp petljakraj: mov ah,4Chint 21hcodeendsendstart

Zadatak: Napisati asemblerski program za izraunavanje izraza:(1*2 + 2*3 + 3*4 + ... + (n-1)*n) / (n*n)pri emu jen8-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 korienje pomonih memorijskih lokacija.ame Mart_2001_1

datasegmentN db 5REZ dw ?OST dw ?dataends

codesegmentassumecs:code,ds:datastart:mov ax,datamov ds,ax

mov cl,N; (cl)=nmov ch,0; (cx)=ndec cx; (cx)=n-1xor dx,dx; (dx)=0xor bp,bp; (bp)=0petlja:mov al,cl; (al)=k (tekuci korak)mov bl,al; (bl)=kinc bl; (bl)=k-1mul bl; (ax)=k*(k-1)add dx,ax; (dx)=(dx)+(ax)adc bp,0; (bp)=(bp)+carryloop petlja; Skok ako je (cx)0mov al,N; (al)=nmul al; (ax)=n*nmov bx,ax; (bx)=n*nmov ax,dx; u AX je niza rec zbiramov dx,bp; u DX je visa rec zbiradiv bx; (ax)=(dx:ax)div(bx),(dx)=(dx:ax)mod(bx)mov REZ,axmov OST,dx

mov ah,4Chint 21hcodeendsendstart

Zadatak: Dat je niz pakovanih BCD cifara na lokaciji NIZ. Kraj niza je oznaen binarnom etvorkom 1111. Napisatiprogram na asemblerskom jeziku koji zadati niz prevodi u 32-bitni binarni broj na lokaciji BR.name Mart_2001_2

datasegmentNIZ db 12h,34h,56h,78h,0F0hBR dd ?dataends

codesegmentassumecs:code,ds:datastart:mov ax,datamov ds,ax

xor ax,ax; (ax)=0 - u AX je niza rec bin. brojaxor cx,cx; (cx)=0 - u CX je visa rec bin. brojamov di,10 ; koristi se kod mnozenjalea si,NIZ; (si)=offset(NIZ)lab:mov bl,NIZ[si]; u BL se smesta k-ti bajtinc si; (si)=(si)+1 - priprema za sledeci prolazmov bh,bl; pravi se kopija u BHshr bl,1 ; shiftuje u desno cetiri putashr bl,1shr bl,1shr bl,1 ; posmatramo prvu BCD cifru u bajtucmp bl,0Fh; da li je to kraj nizaje kraj; ako jeste 1111 izlazi iz petlje; OBRADA PRVE BCD CIFRE IZ UCITANOG BAJTAmul di; (dx:ax)=(ax)*10mov bp,ax; prvi kopiju reg. AX u BPmov ax,cx; CX ide u AXmov cx,dx; rezultat iz DX je deo nove vise reci brojamul 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 cifruadc ah,0 ; visem bajtu nize reci dodaje prenosadc cx,0; visoj reci dodaje eventualni prenos; OBRADA DRUGE BCD CIFRE IZ UCITANOG BAJTAmov bl,bh; kopira sacuvani bajt iz BH u BL and bl,0Fh; postavlja visi polubajt na 0000cmp bl,0Fh; ispituje da li je to 1111je kraj; ako jeste izlazi iz petljemul di; mozenje je identicno kao malopremov bp,axmov ax,cxmov cx,dxmul diadd cx,axmov ax,bp add al,bladc ah,0adc cx,0jmp lab; bezuslovni skok na pocetak petljekraj:mov word ptr BR,ax; puni nizu rec u mem. iz AXmov word ptr BR+2,cx ; puni visu rec u mem. iz CX

mov ah,4Chint 21hcodeendsendstart

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

datasegmentN db 9REZ dd ?dataends

codesegmentassumecs:code,ds:datastart:mov ax,datamov ds,ax

mov si, 1 ; u SI je nizi 16-bitni deo faktorijelaxor di,di ; u DI je visi 16-bitni deo faktorijela

mov cl,1 ; pamti k, za racunanje faktorijelaxor ch,ch ; i CX = k takodjepetlja: mov ax, si ; treba pomnoziti 32b faktorijel (DI:SI) sa k (CX). Dva parcijalna proizvoda, koji se saberumul cx ; prvi parcijalni proizvod u dx:axmov bx, ax ; BP:BX privremeno cuva faktorijelmov bp, dxmov ax, di ; gornja rec faktorijela se mnozimul cxadd bp, ax ; donja rec drugog parc. proizvoda + gornja rec prvog parc. proizvoda. Gornja rec drugog parc. proizv. se odbacuje, po uslovu zadatkamov si, bx ; faktorijel spreman za sledecu iteracijumov di, bpmov ax, cx ; u petlji cemo 32-bitni faktorijel deliti stepenom dvojke. deljenje: sub ax, 1 ; petlja ce se ponavljati k-1 putajz daljercr bp, 1 rcr bx, 1jmp deljenjedalje:add word ptr REZ, bxadc word ptr REZ+2, bpinc cxcmp cl, Njle petljamov ah,4Chint 21hcodeendsendstart

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 zapamenog poev od memorijske lokacije NIZ. Broj elemenata niza je osmobitni broj zapamen na memorijskoj lokaciji N. Rezultat smestiti poev od memorijske lokacije BROJ. (15 poena)

name oduzdata segmentbroj dd 00010000hniz dw 1, 2, 3n db 3data endscode segmentassume cs: code, ds: datastart:mov ax, datamov ds, axmov ax, word ptr brojmov dx, word ptr broj+2mov cl, nxor ch, chxor si, sipetlja:sub ax, niz[si]sbb dx, 0add si, 2loop petljamov word ptr broj, axmov word ptr broj+2, dxcode endsend start

Zadatak: Sabrati niz od K rei koje poinju od adrese RECI a rezultat tipa dupla re smestiti na lokaciju ZBIR.

name zbirdata segmentreci dw 5 dup(1,2,3,4,5)k dw 25zibr dd 0data endscode segmentassume cs: code, ds:datastart: mov ax, datamov ds, axmov cx, kmov ax, 0mov si, axlab1: add ax, reci[si]adc dx, 0add si, 2loop lab1mov word ptr zbir, axmov word ptr zbir+2, dxcode endsend 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 vei od 10.

Zadatak. Korienjem 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 segmentBos dw 100 dup(?)Tos label wordStack endsCode segment:Start:Assume ss:stackMov ax, stackMov ss, axLea sp, tos mov ax,1 push ax mov bx,2 push bx pop ax pop bxCode 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 nizMov dl,[bx]Mov al,[bx]Mov cx,4Inc bxPetlja:Cmp al,[bx]Jg SkokMov al,[bx]Skok:Cmp dl,[bx]Jl ManjiMov dl,[bx]ManjiInc bxLoop PetljaAdd al,dlMov pod3,al

Zadatak: Iskaz na visem programskom jeziku prevesti na asembler. x=100,y=200 For i= 1 to 5 {If(x