bil324_arasinav_cozumler
DESCRIPTION
kkTRANSCRIPT
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.
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
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
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
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