MİKROİŞLEMCİLER VİZE 1. a) Aşağıdaki data segment tanımlaması için bellek yerleşimini yapınız . b) Tabloda komutlar çalıştırıldığında yapılan atamaları ayrılan yerlere yazınız. MY_DATA SEGMENT PARA 'DATA' LIST_A db 1, 2 dup(3), 4, 8, 32 NUM1 db 10100111b LIST_B dw 09h, 0C1Dh, 10FCh NUM2 dw -4 NUM3 EQU 134 MY_DATA ENDS Offset Address Memory Content 0000h Örnek: MOV AX, 0000H 0001h MOV AX, LIST_A[3] 0002h ADD AX, NUM2 0003h MOV BX, OFFSET LIST_B 0004h MOV AL, [BX]+2 0005h ADD AL, 07H 0006h MUL BX 0007h 0008h 0009h 000Ah 000Bh 000Ch 000Dh 000Eh SUB AX, LIST_B[2][2] MOV AX, NUM3 MOV BL, LIST_B DIV BL Register High Low AX 00 00 2. DS=1300H, SS=1400H , BP=1500H ve SI=0100H için aşağıda verilen komutlar için hangi adrese erişileceğini bulunuz (real mode için). a) MOV EAX, [BP+200H] Effektif Adres: b) MOV AL, [BP+SI-200H] Effektif Adres: c) MOV AL, [SI-0100H] Effektif Adres: 3. LDS CX, [DI] Opcode: REG: mod: D: W: R/M: Displacement: Data: Tüm komut hexadecimal formda: DEC BYTE PTR [SI+1000H] Opcode: REG: mod: R/M: Displacement: Data: Tüm komut hexadecimal formda: D: W: MOV BX, DS Opcode: REG: mod: D: W: R/M: Displacement: Data: Tüm komut hexadecimal formda: MOV WORD PTR [BX-4H], 1004H Opcode: REG: mod: D: W: D: W: R/M: Displacement: Data: Tüm komut hexadecimal formda: ADC [1000H], DI Opcode: REG: mod: R/M: Displacement: Data: Tüm komut hexadecimal formda: 4. a) SP=1236, AX=24B6, DI=85C2 ve DX=5F93 ise aşağıdaki komutlar işlendiğinde yığıtın (stack) içeriğinin nasıl değişeceğini kademeli olarak aşağıdaki şekil üzerinde gösterip SP’nin alacağı değeri yazınız. PUSH AX PUSH DI PUSH DX b) SP=18FA iken yığıtın içeriği aşağıdaki şekilde verilmiştir. Aşağıdaki komutlar işlendiğinde yığıtın (stack) içeriğinin nasıl değişeceğini kademeli olarak aşağıdaki şekil üzerinde gösterip SP’nin ve ilgili registerların alacağı değerleri yazınız. POP CX POP DX POP BX 5) Bir veri segmenti için aşağıda verilen bellek gösteriminde 0007H offset adresinden itibaren sırasıyla LIST1 adında byte tipinde 5 elemanlı bir liste, LIST2 adında word tipinde 4 elemanlı bir liste vardır. Buna göre; verilen bellek gösterimi için aşağıdaki soruları yanıtlayınız. Offset Address Memory Content 0007H 0AEH 0008H 0ADH 0009H 0ACH 000AH 0ABH 000BH 0AAH 000CH 0A9H 000DH 0A8H 000EH 0A7H 000FH 0A6H 0010H 0A5H 0011H 0A4H 0012H 0A3H 0013H 0A2H 0014H 00A2H a) Aşağıdaki kod çalıştırıldığı zaman register'ların değerlerinin nasıl değiştiğini yazınız. MOV DI,2 DI = LEA BX, LIST2 BX = MOV DX, [BX][DI]+1 DX = MOV BX, OFFSET LIST1 BX = INC DI DI = SUB BX, DI BX = MOV CL, LIST1[BX] CL = b) 0014H adresindeki 1 byte'lık veriyi, 000DH adresine kopyalayan kodu yazınız. c) LIST2'nin 3. elemanını, LIST2'nin 0. elemanına kopyalayan kodu yazınız. 6. A)Aşağıdaki boşlukları doldurunuz. I. Segment ve offset değerler tarafından oluşturulmuş adrese ..................................denir. II. BP,................................'i adresler. BX,DI,SI ise .................................'i adresler. III. 16 bitlik POP komutu, SP'yi ............ arttırır. IV. İki blok arasındaki verinin transferini sağlayan komut ...................dır. V. İki register arasındaki bilginin değiş tokuşunu sağlayan komut ..........'dır. VI. Memory lokasyonu ile al,ax ve eax arasında veri transferini gerçekleştiren adresleme yöntemi ..................................'dir. VII. Near CALL komutu .......... byte uzunluğundadır. VIII. .............komutu,bir register(segment registerlar hariç) veya hafıza alanın içeriğine 1 ekler. IX. ............komutu, tablodan veri çekmek için kullanılır. B) Doğru /Yanlış sorularını yapınız. I. MOV register-register veya register-memory arasında 8086-80286 işlemciler için byte veya word, 80386 ve üstü işlemciler için byte,word veya doubleword data transfer eder. ( ) II. MOV komutu sadece hedef register'ı değiştirir, CMP komutu hedef register'ı değiştirmez. ( ) III. Register Addresleme Modunda her iki operand segment register’ı olabilir. ( IV. MOV BX,OFFSET LIST=LEA BX,LIST ( V. DIV komutunda flag değişimi önceden belirlenemez.( ) ) )