bil324_arasinav_cozumler

5
BĐL324 MĐKROĐŞLEMCĐLER Arasınavı 21 Kasım 2007 1. Mikroişlemci adresleme modlarından 5 tanesini örnekler vererek detaylı açıklayınız. (20 puan) Aşağıdaki adresleme modlarından 5 tanesi seçilebilir. Register adresleme Bir byte veya word datayı kaynak register veya memory’den hedef register veya memory’ye aktarır. MOV CX,DX komutu word (16-bit) boyutundaki DX içeriğini CX register’ına aktarır. Immediate adresleme Bir byte veya word datayı hedef register veya memory’ye aktarır. MOV AL,22H komutu byte boyutundaki 22H değerini AL register’ına aktarır. Direct adresleme Bir byte veya word datayı register ile memory arasında aktarır. MOV CX,LIST komutu hafızada LIST adresindeki word boyutundaki içeriği CX register’ına aktarır. Register Indirect adresleme Bir byte veya word datayı register ile index register veya base register tarafından adreslenen memory alanı arasında aktarır. MOV AX,[BX] komutu data segment içerisinde BX offset adresindeki bir word datayı AX register’ına aktarır. Base-plus-index adresleme Bir byte veya word datayı register ile base register(BP,BX)+ index register (DI,SI) tarafından adreslenen memory alanı arasında aktarır. MOV [BX+DI],CL komutu bir byte CL içeriğini data segment içerisinde BX+DI offset adresine aktarır. Register relative adresleme Bir byte veya word datayı register ile index register(DI,SI)+displacement(kayma) tarafından adreslenen memory alanı veya base register(BP,BX) arasında aktarır. MOV AX,[BX+4] komutu AX register’ına data segment içerisinde BX+4 offset adresinin içeriğini aktarır.

Upload: burakizu

Post on 22-Dec-2015

1 views

Category:

Documents


0 download

DESCRIPTION

kk

TRANSCRIPT

Page 1: BIL324_Arasinav_Cozumler

BĐL324 MĐKROĐŞLEMCĐLER Arasınavı 21 Kasım 2007

1. Mikroişlemci adresleme modlarından 5 tanesini örnekler vererek detaylı açıklayınız.

(20 puan) Aşağıdaki adresleme modlarından 5 tanesi seçilebilir.

Register adresleme

Bir byte veya word datayı kaynak register veya memory’den hedef register veya memory’ye

aktarır.

MOV CX,DX komutu word (16-bit) boyutundaki DX içeriğini CX register’ına aktarır.

Immediate adresleme

Bir byte veya word datayı hedef register veya memory’ye aktarır.

MOV AL,22H komutu byte boyutundaki 22H değerini AL register’ına aktarır.

Direct adresleme

Bir byte veya word datayı register ile memory arasında aktarır.

MOV CX,LIST komutu hafızada LIST adresindeki word boyutundaki içeriği CX

register’ına aktarır.

Register Indirect adresleme

Bir byte veya word datayı register ile index register veya base register tarafından adreslenen

memory alanı arasında aktarır.

MOV AX,[BX] komutu data segment içerisinde BX offset adresindeki bir word datayı AX

register’ına aktarır.

Base-plus-index adresleme

Bir byte veya word datayı register ile base register(BP,BX)+ index register (DI,SI) tarafından

adreslenen memory alanı arasında aktarır.

MOV [BX+DI],CL komutu bir byte CL içeriğini data segment içerisinde BX+DI offset

adresine aktarır.

Register relative adresleme

Bir byte veya word datayı register ile index register(DI,SI)+displacement(kayma) tarafından

adreslenen memory alanı veya base register(BP,BX) arasında aktarır.

MOV AX,[BX+4] komutu AX register’ına data segment içerisinde BX+4 offset

adresinin içeriğini aktarır.

Page 2: BIL324_Arasinav_Cozumler

MOV AX,ARRAY[BX] komutu AX register’ına data segment içerisinde ARRAY+BX

offset adresinin içeriğini aktarır.

MOV ARRAY[SI],BL komutu BL register’ının içeriğini data segment içerisinde

ARRAY+SI offset adresinin içeriğini aktarır.

Base relative-plus-index adresleme

Bir byte veya word datayı base register(BP,BX)+index register(DI,SI)+displacement(kayma)

tarafından adreslenen memory alanı ile bir register arasında aktarır.

MOV AX,ARRAY[BX+DI] komutu AX register’ına data segment içerisinde ARRAY+BX+DI

offset adresinin içeriğini aktarır.

MOV AX,[BX+DI+4] komutu AX register’ına data segment içerisinde BX+DI+4 offset

adresinin içeriğini aktarır.

Scaled-index adresleme

Offset adres için kullanılan ikinci register bir ölçek faktörüyle (scale factor) 2x, 4x, 8x değiştirilir.

MOV EDX,[EAX+4*EBX] komutu EDX register’ına data segment içerisinde EAX+4*EBX

offset adresinin içeriğini aktarır.

Ölçeklendirme word (2x), doubleword (4x) veya quadword (8x) içeriğe ulaşmayı sağlar.

2. Her bir elemanı 4 byte lık olan (quadword) 51 elemanlı bir dizinin elemanlarını kendi

yerinde ters çeviren bir Assembly programı yazınız. Dizinin elemanları hafızada 0100H-01CBH adres aralığında bulunmaktadır. (20 puan)

MOV CX,51 MOV DI,0100H DONGU1: MOV [DI],CX INC DI INC DI INC DI INC DI LOOP DONGU1 MOV AX,DS MOV ES,AX MOV SI,0100H MOV DI,01C8H MOV EAX,[SI] MOV EDX,[DI] MOV [DI],EAX MOV [SI],EDX DONGU2: SUB DI,4 ADD SI,4 MOV EAX,[SI] MOV EDX,[DI] MOV [DI],EAX

Page 3: BIL324_Arasinav_Cozumler

MOV [SI],EDX CMP SI,DI JNE DONGU2 RET

3. 32 bitlik işaretsiz bir sayı ile 64 bitlik işaretsiz bir sayıyı çarpan bir Assembly programı

yazınız. 32 bitlik işaretsiz sayı, hafızada 0100H adresinde, 64 bitlik işaretsiz sayı, hafızada 0104H adresindedir, sonuç hafızada 010CH adresinden başlayarak yazılsın. (30 puan)

MOV ECX,123456789 MOV [0100H],ECX MOV ECX,123456789 MOV [0104H],ECX MOV ECX,123456789 MOV [0108H],ECX MOV AX,DS MOV ES,AX MOV SI,0100H MOV EAX,[SI] MOV SI,0104H MOV EBX,[SI] MUL EBX MOV [010CH],EAX MOV [0110H],EDX MOV SI,0108H MOV EAX,[SI] MUL EBX ADD [0110H],EAX ADC EDX,0 MOV DI,010CH MOV ECX,[010CH] MOV [DI],ECX ADD DI,4 MOV ECX,[0110H] MOV [DI],ECX ADD DI,4 MOV [DI],EDX RET

4. Hafızada 0100H-0113H adres aralığında bulunan 20 sayının içindeki asal sayıları bulup

hafızada 0114H adresine asal sayı adedini ve 0115H adresinden başlayarak asal sayıları kaydeden bir Assembly programı yazınız. (30 puan)

org 0100h

mov si,0 ; hafizadan okunacak adres

mov di,0 ; hafizada asal sayi yazilacak adres

mov cl,0 ; asal sayi adedi icin

; varolan degerler alinabilir

mov [0100h],1

mov [0101h],3

Page 4: BIL324_Arasinav_Cozumler

mov [0102h],6

mov [0103h],7

mov [0104h],17

mov [0105h],10

mov [0106h],70

mov [0107h],71

mov [0108h],55

mov [0109h],33

mov [010Ah],30

mov [010Bh],22

mov [010Ch],23

mov [010Dh],16

mov [010Eh],21

mov [010Fh],41

mov [0110h],56

mov [0111h],83

mov [0112h],90

mov [0113h],73

disdongu: ; her sayi icin tekrarlanir

mov bl,2 ; bolme islemi 2 ile baslar

mov dl,[si+0100h] ; al kontrol edilen sayiyi tutar

icdongu:

xor ah,ah ; ah sifirlandi

mov al,dl ; al kontrol edilen sayiyi tutar

div bl ; ax bolme islemleri icin kullanildi

cmp ah,0 ; kalan kotrol edildi

je sonrakisayi ; kalan yoksa asal degildir

inc bl ; bolen artiriliyor

cmp bl,dl

jae asalsayi

; asagidaki kisim daha kisa surede sonuc bulur

; mov ch,bl ; bolunen sayinin yarisindan buyukse

; add ch,ch ; bolmeye devam edilmez

; cmp ch,dl ; bolen sayiya esitse asal sayidir

; ja asalsayi

jmp icdongu ; degilse yeni bolenle devam edilir

asalsayi:

mov [di+0115h],dl ; dh sifirlandi

inc di

Page 5: BIL324_Arasinav_Cozumler

inc cl

sonrakisayi:

inc si ; sonraki sayiya geciliyor

cmp si,20 ; girilen sayiya esitse program biter

jne disdongu

mov [0114h],cl ; asal sayi adedi yaziliyor

hlt