Sie sind auf Seite 1von 29
BAB 2 Mode Addressing PENDAHULUAN Perkembangan software yang efisien untuk 8086/8088 memerlukan penguasaan yang baik mengenai mode addressing yang terdapat pada setiap instruksi, Dalam bab ini, kita akan menggunakan instruksi MOV (pemindahan data) untuk men- jelaskan mode data-addressing. MOV memindahkan bytes atau kata data antara register atau antara register dan memori. Dalam menjelaskan memori program — mode addressing, kita akan menggunakan instruksi call dan jump, yang mengu- bah arus program. Mode data-addressing yang akan kita bahas di sini mencakup: register, imme- diate, direct, register indirect, base-plus-indeks, register relatif, dan byte relatif- plus-indeks addressing. Memori program-mode addressing mencakup: program relatif, direct dan indirect addressing. TUJUAN Setelah menyelesaikan bab ini, anda akan mampu: 1. Menjelaskan operasi dari tiap mode data-addressing. 2. Menggunakan mode data-addressing untuk membentuk pernyataan bahasa rakitan. 3. Menjelaskan operasi dari tiap memori program-mode addressing. 35 36 Pengantar Mikroprosesor 4. Menggunakan memori program-mode addressing untuk membentuk pernya- taan bahasa rakitan. 5. Memilih mode addressing yang tepat untuk mencapai tugas yang ditentukan. SUE eee MODE DATA-ADDRESSING Karena instruksi MOV adalah salah satu instruksi 8086/8088 yang paling seder- hana dan fleksibel, dia akan memberikan landasan bagi penjelasan mengenai mode data-addressing dalam seluruh bab ini, Gambar 2-1 menggambarkan in- struksi MOV dan menentukan arah dari arus data. Perhatikan bahwa sumber itu jauh di sebelah kanan dan tujuannya terletak di samping opcode dengan sumber dan tujuan yang terpisah oleh koma, Jika anda mengenal betul dengan mikropro- sesor 8085, hal ini bukan sesuatu yang baru; namun jika anda menguasai mikro- prosesor yang lainnya, ini agak membingungkan. Beberapa mikroprosesor memindahkan data dengan arah yang berlawanan Instruksi MOV AX,BX memindahkan isi dari register sumber (BX) ke dalam register tujuan AX, Dengan kata lain, instruksi ini mengkopi isi dari register BX ke dalam register AX. Ini penting untuk dicatat bahwa sumber tidak pernah be- rubah dan tujuan Aampir selalu berubah. Ini memang benar tanpa memandang mode atau instruksi data-addressing, Gambar 2-2 menggambarkan operasi yang dilakukan oleh setiap mode data- addressing untuk instruksi MOV. Mode data-addressing yang digunakan dengan instruksi ini mencakup: 1. Register Addressing — digunakan untuk mentransfer byte atau kata (word) data ke dalam register tujuan, (Yaitu MOV AX,CX akan mengkopi isi dari register CX ke dalam register AX), 2. Immediate Addressing — digunakan untuk mentransfer byte atau kata data langsung ke dalam register tujuan. (Yaitu, MOV AX,1234H ke dalam regis- MOV destination. Mov AN. BN GAMBAR 2-1 Instruksi AX.BX MOV yang menggambarkan bagaimana sumber dikopi ke dalam tujuan. Mode Addressing 37 HoosTT GOW Aso Hoosol $10 1100 wonmusacy oooh + x sa + 8808/9808 Suissouppe-eiep spo Z-Z AVAWVD tu10001 rasta, xv saistig, XV saividoy xv ronson xv ord tive snsidoyy xe oamnos sap arny XV-lIS + XH AVaRIV XV'lr | NAL AOW NAH AC wwlxa AOW xv AGI Hive HL AGW X#XV AON sayin, ay 38 Pengantar Mikroprosesor 2-2 ter AX) Perhatikan bahwa bila huruf H mengikuti bilangan, dia akan menun- jukkan nilai heksadesimal. 3. Direct Addressing — mentransfer byte atau kata di antara memori dan regis- ter. Address memori data disimpan dengan instruksi. (Yaitu, MOV AX,LIST membutuhkan isi address memori 16-bit LIST dan memindahkan mereka ke dalam register AX.) 4. Register Indirect Addressing — mentransfer byte atau kata antara register dan lokasi memori yang ditangani oleh suatu register. (Yaitu, MOV AX, (BX) memindahkan 16-bit isi lokasi memori yang ditangani oleh register BX ke dalam register AX.) 5. Base-Plus-Indeks Addressing — digunakan untuk mentransfer byte atau kata antara register dan lokasi memori yang ditunjukkan oleh jumlah register base dan register indeks. (Yaitu, MOV AX. (BX + SI) memindahkan isi address 16-bit yang ditunjukkan oleh jumlah BX + SI ke dalam register AX.) 6. Register relatif Addressing — mentransfer byte atau kata antara register dan lokasi memori yang ditangani oleh suatu register dan displacement. (Yaitu, MOV AX, (BX + 4) atau MOV AX, ARRAY(SI). Instruksi pertama men- transfer isi 16-bit dari lokasi memori yang ditunjukkan oleh lokasi memori yang ditangani oleh ARRAY + SI). 7. Base Relatif-Plus-Indeks-Addressing — digunakan untuk mentransfer-byte atau kata antara register dan lokasi memori yang ditangani oleh suatu register base dan register indeks ditambah displacement. (Yaitu, MOV AX,AR- RAY(BX + DI) atau MOV AX,(BX + DI-4). Contoh pertama mengaddress lokasi memori yang ditunjukkan oleh ARRAY + BX + DI dan mentransfer bilangan 16-bit dari lokasi memori ke dalam register AX. Contoh kedua menggunakan address yang dijelaskan oleh BX + DI + 4.) REGISTER ADDRESSING Addressing register adalah dalah satu mode addressing yang paling mudah dikuasai segera sesudah banyak register di dalam 8086/8088 diketahui. 8086/ 8088 mengandung register 8-bit berikut ini: AH, AL, BA, BL, CH, CL, DH, dan DL dan register 16-bit berikut ini: AX, BX, CX, DX, SP, BP, SI, DI, CS, DS, SS, dan ES. Dalam kebanyakan instruksi, salah satu register ini akan berupa sumber (source) atau tujuan (destinas’) — kecuali untuk register segmen, yang digunakan Mode Addressing 39 dengan hanya beberapa jenis instruksi (MOV, PUSH, dan POP). Penting sekali bahwa register yang dipindahkan ata dioperasikan memiliki ukuran yang sera~ gam. Jangan pernah campurkan jenis register 8- dan 16-bit, karena assembler akan mengeluarkan pesan error untuk operasi yang tidak dibolehkan ini. abel 2-1 mengilustrasikan sebagian dari banyak versi yang berbeda dari instruksi pemindahan register. Hampir tidak mungkin untuk mendaftar semuanya karena ada banyak sekali kombinasi yang tersedia. Sebagai contoh, subset 8-bit dari instruksi MOV saja yang terdiri atas 256 instruksi 8086/8088 yang berbeda. Satu-satunya bentuk MOV yang tidak dibolehkan, selain yang mencampur ukuran data, adalah MOV dari satu segmen ke segmen lain. Gambar 2-3 mengilustrasikan fungsi instruksi MOV BX, CS. Perhatikan bah- wa sumbernya tidak berubah, tetapi tujuannya berubah. Di sini disalin 1234H dari register CX ke dalam register BX. i 2-3 ADDRESSING LANGSUNG Mode data-addressing lainnya yang relatif sederhana adalah addressing langsung, disebut demikian karena data disimpan secara langsung setelah opcode desimal dalam memori. Addressing langsung mentransfer byte atau kata data secara lang- sung dari suatu instruksi program ke dalam register atau lokasi memori. Gambar eS Assembly Language Operation MOV AL,BL BL AL MOV CH,CL cL CH MOV AX,CX CX + AX Mov SP.BP BP — SP MOV DS,AX AX — DS MOV SI, DI=sI MOV D1SI SIDI MOV BX,ES ES—-BX ° Mov CS,0S Not allowed (segment-to- segment) MOV BL.BX Not allowed (mixed sizes} ee TABEL 2-1 Contoh instruksi addresing register. 40 Pengantar Mikroprosesor ax BX T6AF cx 1234 T2334 Dx sP GAMBAR 2-3 Efek dari eksekusi instruksi MOV BX,CX pada point sebelum register BX berubah. Perhatikan bahwa 1234H dikopi dari register CX dan akan memasuki register BX. Setelah 1234H memasuki register BX, 76AFH yang berada di dalam BX telah hilang, 2-4 menggambarkan instruksi operasi MOV AX,3456H. Instruksi ini mengkopi 3456H dari instriksi ke dalam register AX. Dalam bahasa simbolis rakitan, data langsung didahului oleh simbol # pada beberapa, bukan seluruh perakit 8086/8088, misainya, MOV AX, #3456H. Teks ini tidak menggunakan simbol # untuk menunjukkan data langsung. Kita menun- jukkan data ini sebagai heksadesimal dengan menambahkan huruf H, atau sebagai desimal yang menunjukkan data tanpa karakter khusus tertentu., (Instruksi MOV AL,33 memindahkan 33 desimal ke dalam 8-bit register AL). Tabel 2-2 meng- gambarkan beberapa instruksi MOV dengan data langsung. i — ee 2-4 ADDRESSING DATA LANGSUNG Addressing data langsung tidak hanya dengan perintah umumnya namun juga untuk sebagian besar instruksi dalam program yang tipikal. Dia mempunyai dua Register array Program MOV AX. 3450H GAMBAR 2-4 Efek dari eksekusi instruksi MOV AX,3456H. Di sini data, yang mengikuti opcode B8, dipindahkan dari memori ke dalam register AX. Operasi ini ditunjukan pada point beberapa saat sebelum register AX berubab. Mode Addressing 41 aX BX cx _ Assembly Language Operation MOV BL.44 2CH — BL MOV AX.44H 0043H — AX MOV S10 0000H — SI MOV CH,100 64H — CH MOV SP3000H 3000H — SP TABEL 2-2 Contoh addressing langsung dengan instruksi MOV. bentuk dasar: addressing langsung, yang menggunakan hanya instruksi MOV dan, khususnya, pada MOV antara memori dan AX atau AL; dan addressing displacement, yang, digunakan pada hampir semua instruksi dalam set instruksi 8086/8088. Addressing Langsung Addressing langsung dimasukkan ke dalam set instruksi sehingga instruksi 8085 LDA dan STA bisa dengan mudah diubah ke dalam instruksi 8086/8088. Mode ini digunakan bila data ditransfer antara AL dan memori atau AX dan memori. (Bila kita menguasai bahasa mesin pada Bab 3, alasan itu akan muncul dengan jelas). Instruksi ini panjangnya 3 bytes. Instruksi MOV AL,DATA, seperti yang ditunjukkan pada perakit 8086/8088, mentransfer suatu kopi byte data yang disimpan dalam lokasi memori DATA Memory AH puiaese| es @ BO) sss BH BL cA = GAMBAR 2-5. Efek dari eksekusi instruksi MOV AL,(1234H) jika DS = 1000H. Di sini register AL ditunjukkan setelah data (12) menghancurkan isi register AL sebelumnya. 42. Pengantar Mikroprosesor Assembly Language Operation MOV AL,NUMBER —_—A byte 1s copied from the data segment plus offset NUMBER into AL MOV AX,COW ‘A word is copied from the data segment plus offset COW into AX MOV NEWS,AL AL is stored at a location in the data segment plus offset NEWS. MOV THERE,AX AX is stored at a location in the data segment plus offset THERE TABEL 2-3 Empat bentuk yang mungkin dari addressing langsung. (1234H di sini) dalam segmen data pada register AL. (Beberapa perakit menun- Jukkan instruksi ini dengan MOV AL.(1234H), Gambar 2-5 menunjukkan bagai- mana instruksi ini dilaksanakan, Di sini DS = 1000H, sehingga address memori yang sebenarnya yang ditunjukkan oleh instruksi itu adalah 11234H — jumlah 1234H + 10000H (1000H X 10H). Tabel 2-3 mencatat empat bentuk yang mungkin dari instruksi addressing langsung ini. Sekali lagi, hanya register AX dan AL yang mungkin dipindahkan ke dan dari memori dengan tipe instruksi ini Addressing Displacement Addressing displacement hampir mirip dengan addressing langsung kecuali bah- wa instruksi itu sering mempunyai lebar 4 byte bukan 3 byte. Tipe addressing data langsung ini juga lebih fleksibel karena sebagian besar instruksi 8086/8088 bisa menggunakannya. Gambar 2-6 menggambarkan instruksi operasi MOV CL,(2000H). Perhatikan bahwa instruksi ini beroperasi dengan cara yang sama sebagai instruksi MOV AL,(1234H) dari Gambar 2-5. Perbedaan itu hanya menjadi jelas setelah dilaku- 0000 AO 1234 MOV AL, [1234H] 0003 8A OE 2000 MOV CL, [2000H] CONTOH 2-1 Mode Addressing 43 «a GF w ax [BH a, Memon eX [CH CL sa 8A, 3A 120004, i GAMBAR 2-6 Efek dari cksekusi instruksi MOV CL, (2000H) jika DS = 1000H. Di sini register CL ditunjukkan setelah data (8a) menghancurkan isi CL sebelumnya kan pemeriksaan dari versi yang dirakit dari instruksi ini: MOV AL, (1234H) ada- lah instruksi 3-byte, dan MOV CL,(2000H) adalah instruksi 4-byte, seperti yang ditunjukkan pada Contoh 2-1 Tabel 2-4 menunjukkan beberapa bentuk MOV displacement dari addressing data langsung. Tidak semua bentuk dicatat karena terdapat 512 instruksi MOV yang berbeda dari tipe ini. Addressing Tidak Langsung Register Addressing tidak langsung register memungkinkan data ditangani pada lokasi memori yang ditunjukkan oleh satu di antara register berikut ini: BX, BP, SI dan DI. Misalnya, jika register BX berisi 1000H dan instruksi MOV AX, (BX) dilakukan, data pada lokasi memori 1000H dalam segmen data dikopi ke dalam ee Assembly Language Operation MOV CH,D0G The contents of memory location DOG in the data segment are copied into CH. The actual value of DOG is calculated by the assembler MOV CH,[1000H] The contents of the memory location addressed by offset 1000H in the data segment are copied into CH MOV DATA.BP. BP is copied into memory location DATA and DATA ~ 1 in the data segment MOV NUMBER.SP —_ SP Is copied into memory location NUMBER and NUMBER - 1 in the data segment ee TABEL 2-4 Contoh addressing data langsung dengan menggunakan displacement, 44 Pengantar Mikroprosesor Memory Register aray AX OAs? 6as> ay 02001 BX 2000 2 02000H [——— = 010001. 7 (DS x 10H) GAMBAR 2-7 _Efek dari eksekusi instruksi MOV AX,(BX) jika DS = 0100H dan BX = 1000H. Di sini register AX ditunjukkan setelah data (6A42H) telah menghancurkan isi AX sebelumnya. register AX. Anggaplah bahwa DS = 0100H, instruksi ini kemudian mengkopi kata data dari lokasi memori 2000H ke dalam register AX (Jihat Gambar 2-7). Perhatikan bahwa simbol [] menjelaskan addressing tidak langsung dalam bahasa rakitan 8086/8088. Beberapa instruksi tipikal yang menggunakan addressing register tidak langsung digambarkan pada Tabel 2-5. BX,BP,SI, dan DI. Bila menggunakan addressing tidak langsung register atau satu di antara mode addressing yang mengikutinya, penting untuk diingat bahwa register BX, SI dan DI biasanya menangani memori dalam segmen data (DS), dan BP biasanya menangani memori dalam segmen stack (SS). Addressing tidak langsung sering digunakan untuk menunjukkan data tabular dalam memori. Misalnya, misalnya anda harus menciptakan suatu tabel informasi yang akan menampung 50 sampel yang diambil dari suatu voltmeter digital. Gambar 2-8 menggambarkan tabel dan juga register BX yang digunakan untuk menangani setiap lokasi dalam tabel secara berurutan. Untuk mencapai hal ini, anda perlu memasukkan lokasi tabel ini ke dalam register BX dengan instruksi Mode Addressing 45 i Assembly Language Operation MOV CX,[BX] A word from the location addressed by the 8X register within the data segment is copied into CX MOV [BP},OL. A byte is copied into the stack segment at the location ad- dressed by BP MOV [01],8H A byte is copied into the data segment at the location addressed by DI MOV (D1],(8X] Memory-to-memory moves are not allowed except for string in- structions Ee ‘TABEL 2-5 Contoh instruksi dengan menggunakan addressing tidak langsung register langsung MOV. Setelah menginisialisasi addressing awal tabel, anda kemudian menggunakan mode addressing tidak langsung untuk menyimpan data secara berurutan. Memory TABLE > 49 TABLE - 48 ' TABLE TABLE ~ 2 TABLE BX TABLE [=n TABLE LT ' ‘ GAMBAR 2-8 Suatu array data (TABLE) berisi $0 bytes yang secara tidak langsung ditangani melalui register BX. 46 Pengantar Mikroprosesor instructions that read 50 bytes of data from DATA_PORT yand stores them in a TABLE. 0000 BB 0000 R MOV BX BX,OFFSET TABLE address TABLE 0003 B9 0032 MOV CZ,50 ;load counter 0006 AGAIN: 0006 E4 2a IN AL, DATA_PORT jread data 0008 88 07 MOV [BX],AL 7save data 000A 43 INC BK yaddress next 000B E2 F9 LOOP AGAIN CONTOH 2-2 Urutan yang ditunjukkan dalam Contoh 2-2 memasukkan BX dengan address tabel dan menginisialisasi perhitungan yang ditempatkan dalam register CX pada 50. Direktif OFFSET memberitahu perakit untuk memasukkan BX dengan ad- dress offset TABEL dan bukan isi TABLE. Setelah counter dan pointer diinisiali- sasi, loop pengulangan hingga CX-0 dimasukkan. Di sini data adalah input (IN) dari voltmeter dan kemudian disimpan dalam lokasi memori secara tidak lang- sung ditangani oleh BX. BX kemudian diinkrementasi sehingga pengulangan loop akan menyimpan data voltmeter pada lokasi memori urutan berikutnya, TABLE -1. Akhirnya, instruksi LOOP mendekrementasi register CX dan mencek untuk melihat apakah CX adalah 0. Jika CX bukan 0, program akan berlanjut pada lokasi memori AGAIN, dan jika CX 0 dan dia berakhirnya atau berlanjut dengan instruksi urutan lainnya ADDRESSING BASE-PLUS-INDEKS Addressing base-plus-indeks mirip dengan addressing tidak langsung register karena dia secara tidak Jangsung menangani data memori dengan'menggunakan register base BP atau BX ditambah suatu register indeks (DI atau SI), Pada Mode Addressing 47 ax Bx cx Dx SP BP sl or beberapa hal, register base menampung address awal dari suatu array memori, dan register indeks menampung posisi relatif dari data dalam array. Ingat bahwa BX menangani data di dalam segmen data dan BP menangani data di dalam seg- men stack. Data Addressing Gambar 2-9 menggambarkan bagaimana data ditangani untuk instruksi MOV DX,[BX + DI]. Di sini, BX = 1000H, DI = 0010H. dan DS = 0100H, yang menterjemahkan ke add ress memori 02010H untuk transfer data ini. Instriksi ini mengkopi data dari lokasi memori 02010H ke dalam register DX. Tabel 2-6 mencatat beberapa instruksi yang ditemukan untuk addressing base-plus-indeks Array Addressing Penggunaan utama dari addressing base-plus-indeks adalah menangani elemen di dalam array data. Misal nya bahwa kita ingin menangani elemen di dalam suatu Memory Register array —_—e a | 1000 An oll 020108 0010 eS bW~~_ GAMBAR 2-9 Suatu contoh yang menunjukkan bagaimana mode base-plus-indeks untuk mena- ngani fungsi untuk instruksi MOV DX.(BX + Di), Perhatikan bahwa address memori 02010 ditunjukkan oleh instruksi ini menghasilkan address ini karena DS (0100H), BX (1000H), dan DI (0010H) dijumlahkan untuk 48 Pengantar Mikroprosesor _ Assembly Language Operation MOV CX,[BX + DI] CX is loaded from a location in the data segment addressed by the sum of BX and DI MOV CHBP + Si] CHis loaded trom a location in the stack segment addressed by the sum of BP and SI MOV [BX + Si],SP The SP register is stored in the data segment at the location ad- dressed by the sum of BX and SI MOV [BP + DI],CS The CS register is stored in the stack segment at the location addressed by the sum of BP and DI en nn nn TABEL 2-6 Contoh addressing base-plus-indeks array data yang terdapat di dalam segmen data pada lokasi ARRAY. Untuk mendapatkan hal ini, anda perlu memasukkan register BX (base) dengan address ARRAY dan DI (register indeks) dengan bilangan elemen array untuk diakses. Meno a — DI | eenen Bx ARRAY -| Lt ARRAY ARRAY ~ ARRAY ~ ARRAY - ARRAY + ARRAY GAMBAR 2-10 Suatu contoh yang menunjukkan addressing base-plus-indeks. Di sini suatu elemen (DI) dari array data (BX) diakses. Mode Addressing 49 jusing the base plus index addressing mode 0000 3B 0032 R MOV BX,OFFSET ARRAY ;address ARRAY 0003 BF 0010 MOV DI, 10H jaddress element 10H 0006 8a 01 MOV. AL, [BX+DI]} get data 0008 BF 0020 MOV DI, 20H jaddress element 000B 88 OL MoV [BK~DI],AL ysave data CONTOH 2-3 Gambar 2-10 menggambarkan penggunaan BX dan DI untuk mengakses suatu elemen di dalam array data. 2-6 ADDRESSING RELATIF REGISTER Addressing relatif register mirip dengan addressing base-plus-indeks dan addres- sing displacement (dibahas pada addressing data langsung). Dalam addressing relatif register, data dalam segmen memori ditangani dengan menambahkan dis- placement pada isi base atau register indeks (BP, BX, DI atau SI). Gambar 2-1! menggambarkan operasi instruksi MOV AX, (BX + 1000H). Di sini BX = 0100H —_—__ eS Assembly Language Operation MOV AXJDI + 100H] Data are transferred from the data segment location ad- dressed by the sum of 100H and the contents of DI MOV ARRAY{SI],BL BL is stored in the data segment at memory array address ARRAY, element St MOV LISTIBP},CL CLs stored in the stack segment at memory array address LIST, element BP MOV D1SETIBX} Di is loaded from the data segment at array SET, element 8X Ne TABEL 2-7 Contoh address 2 relatif register 50 Pengantar Mikroprosesor Memory Ra ster aay aK A076 A076 30 031018 76 031004 ax 100 icon. , oak (Bx, jQOOH — _0U™\oH (Disp.y ws L~ J GAMBAR 2-11 _Efek dari cksckusi instruksi MOV AX. (BX + 1000H) jika BX = 0100H dan DS = 0200H dan DS = 0200H, schingga address yang dihasilkan adalah jumlah DS x 10H, BX, dan displacement 1000H untuk total 03100H. Ingat bahwa jika anda mengguna- kan BP untuk menangani memori dengan mode ini, address ditempatkan dalam segmen stack. Tabel 2-7 mencatat beberapa instruksi yang menggunakan addres- sing relatif register. Addressing Data Array Kita mungkin bisa menangani data array dengan relatif register dengan mena- ngani lebih banyak seperti apa yang dilakukan oleh base-plus-indeks addressing. (Mengacu pada Seksi 2-5 untuk teknik addressing base-plus-indeks). Dalam Gambar 2-12, kita menggambarkan addressing relatif register dengan contoh yang sama yang kita gunakan untuk menggambarkan addressing relatif register untuk menunjukkan bagaimana displacement ARRAY ditambahkan pada register indeks DI untuk menghasilkan suatu referensi pada suatu elemen array. Mode Addressing 51 2-7 000A jusing register relative addressing 0000 BF 0010 0003 8A 85 0300 R MOV 0007 BF 0020 88 85 0300 R MOV CONTOH 2-4 MOV MOV DI, 108 AI,ARRAY[DI] jaddress element 10H get data jaddress element 20H save data Contoh 2-4 menunjukkan bagaimana teknik addressing yang baru ini bisa mentransfer isi dari elemen array 10H untuk mengarray elemen 20H. Perhatikan kemiripan antara program dan program addressing base-plus-indeks. BASE RELATIF-PLUS-INDEKS ADDRESSING Mode data-addressing final yang terdapat di dalam 8086/8088 adalah address- ing relatif-plus-indeks base. Mode ini mirip dengan addressing base-plus-in- Displacement ARRAY Memory ~~ ———————4 ARRAY ot ARRAY ARRAY Element ARRAY ARRAY ARRAY ARRAY L~™ GAMBAR 2-12 Addressing relatif register yang digunakan untuk menangani elemen ARRAY. Displacement menangani awal dart array, dan isi dari DI (elemen) memilih suatu elemen dari array itu. 52 Pengantar Mikroprosesor deks, namun selain menambahkan isi suatu register base dan register indeks, dia juga menambahkan suatu displacement untuk menghasilkan address. Tipe ad- dressing sering digunakan untuk menangani array dua dimensi dari data memori. Addressing Data Addressing relatif-plus-indeks base adalah mode addressing yang paling jarang digunakan. Gambar 2-13 menunjukkan bagaimana data ditunjukkan jika instruksi dieksekusi oleh 8086/8088 adalah MOV AX.(BX + SI + 100H). Di sini displace- ment 100H.BX = 0020H, SI = 0010H, dan DS = 1000H, sehingga address yang efektif untuk instruksi ini adalah lokasi memori 10130H — jumlah displacement, BX, SI dan DS x 10H. Jelasnya, mode ini terlalu kompleks untuk digunakan secara berkala. Beberapa instruksi yang tipikal untuk addressing relatif-plus-in- deks base dicatat pada Tabel 2-8. Memory Register array a ax A316 Aue 6 ax 0020 / x ¥ ox} = a $ = \ < ps < 10H se s ve | aa == 10 ee sf 0010 a Displacement es bE 1O131H 10130H GAMBAR 2-13 Contoh addressing relatif-plus-indeks base digambarkan dengan instruksi MOV.100H (BX + SI). Instruksi ini memindahkan data dari memorim ke rehister AX. Address ‘memori adalah jumlah dari DS x 10H, 100H, BX dan SI Mode Addressing 53 ee Assembly Language Operation MOV DHBX = DI + 20H] OH is loaded from the data segment memory location addressed by the sum of 8X, DI, and the displacement ‘of 20H. MOV AX,FILE[BX + Di] AX is loaded from the data segment location addressed by the sum of BX, Dl, and the offset FILE MOV LISTIBP + DI],CL. CLis stored at the location in the stack segment ad- dressed by the sum of BP, DI, and the offset address usT ee ee TABEL 2-8 Contoh instruksi relatif-plus-indeks base Addressing Array Misalkan bahwa suatu file dari banyak catatan muncul dalam memori dan tiap catatan itu berisi banyak elemen. Displacement menangani file itu, register base menangani satu catatan dalam file, dan register indcks menangani suatu elemen di dalam catatan itu, Bentuk penanganan (addressing) yang sangat kompleks ini digambarkan dalam Gambar 2-14. Contoh 2-5 memberikan suatu program yang akan mengkopi elemen 0 dari catatan A ke dalam elemen 2 dari catatan C, dengan menggunakan addressing relatif-plus-indeks base. using the base plus indexed addressing mode 0009 BB 0364 R MOV BX,OFFSET RECA address record A 0003 BF 0000 MOV DI,0 zaddress element 0 0006 8A 81 O4F4 R MOV L,FILE(BX+DI] ;get data 000A BB 042C R MOV BX,OFFSET RECC address record C 000D BF 0002 MOV DI,2 jaddress element 2 0010 88 81 O4F4 R MOV FILE(BX+DI],AL save data CONTOH 2-5 54 Pengantar Mikroprosesor Memory a { 1 ————>1_ Element DI REC C Element REC B File BX REC C REC A Displacement el GAMBAR 2-14 Addressing relatif-plus-indeks base digunakan untuk menangani FILE yang berisi catatan multiple (REC); setiap catatan berisi banyak elemen. MODE PROGRAM MEMORI-ADDRESSING Mode program memori-addressing digunakan dengan instruksi JMP dan CALL dan terdiri dari tiga bentuk yang berbeda: direct, relatif dan indirect, Bagian ini menyajikan semua ketiga bentuk addressing memori program itu, dengan meng- gunakan instruksi JMP. Mode Addressing 55 Opcode Offset iow Offset —high Segment—tow Segment—high EA 00, 00, 0 0 GAMBAR 2-15 Instruksi bahasa mesin 5-byte untuk instruksi JMP (10000H). Opcode diikuti dengan address offset (0000H) dan kemudian address segmen kode (1000H) Addressing Memori Program Direct Addressing memori program direct adalah apa yang digunakan oleh mikroprose- sor 8085 untuk semua jump dan call-nya. (Mikroprosesor 8-bit lainnya sudah jarang menggunakan mode ini). 8086/8088 juga bisa menggunakan bentuk ad- dressing ini, namun jangan menggunakannya sebanyak addressing program rela- tif dan indirect. Instruksi untuk addressing memori program direct menyimpan address dengan opcode. Misalnya, jika sebuah program akan melompat (jump) ke lokasi memori 10000H untuk instruksi berikutnya dalam suatu program, address 10000H disim- pan dengan opcode. Gambar 2-15 menunjukkan instruksi JMP intersegmen direct dan 4 bytes yang dibutuhkan untuk menyimpan segmen selanjutnya dan address offset. JMP 10000H menyimpan suatu bilangan segmen 1000H, yang dimasuk- kan ke dalam CS, dan suatu offset 0000H, yang dimasukkan ke dalam IP. Satu-satunya instruksi lainnya untuk addressing program direct adalah in- struksi CALL intersegmen, Dalam banyak hal, nama label mengacu pada suatu address memori bukan suatu address heksadesimal. Bila kita menggunakan nama suatu label, sebgain besar perakit memilih bentuk yang terbaik untuk menangani instruksi JMP atau instruksi CALL. Addressing Memori Program Relatif Addressing memori program relatif tidak terdapat di dalam mikroprosesor 8085, namun tersedia pada sebagian besar mikroprosesor 8-bit lainnya, selain juga 8086/8088. Istilah relatif sebenamya berarti ““relatif terhadap pointer insiruksi (IP). Misainya, jika suatu instruksi JMP akan melompati dua bytes berikutnya, maka relatif terhadap pointer instruksi, yang selalu menunjuk pada instruksi 56 Pengantar Mikroprosesor 10000 EB - toa oe | PIN, 10002 = 10003. = 1000$ =~ GAMBAR 2-16 _Instruksi MP (2), yang akan melompati dua bytes berikutnya dalam program. Dalam contoh ini, program akan berlanjut pada lokasi 10004H. selanjutnya, 2 ditambahkan untuk melompati 2 bytes. Contoh relatif JMP digam- barkan pada Gambar 2-16. Perhatikan bahwa instruksi JMP adalah instruksi L-byte, dan displacement, bilangan yang ditambahkan pada pointer instruksi juga bilangan I-byte Instruksi relatif muncul sebagai JMP dan CALLS, dan berisi baik dipslace- ment 8-bit dan 16-bit. Semua perakit menentukan seberapa jauh instruksi JMP diperlukan untuk berjalan kemudian secara otomatis memilih displacement yang tepat. Jika jaraknya terlalu besar, banyak perakit menggunakan JMP langsung. Displacement &-bit memungkinkan maju dan mundur yang mengacu dengan nilai displacement dari -128 hingga + 127, dan displacement 16-bit memungkin- kan nilai-nilai displacement + 32 K Addressing Tidak Langsung 8086/8088 memungkinkan beberapa bentuk program addressing tidak langsung untuk instruksi JMP dan CALL. Tabel 2-9 menggambarkan beberapa instruksi jump tidak langsung program yang bisa diterima, yang bisa menggunakan semua register 16-bit (AX,BX,CX,DX,SP,BP,SI atau DI), semua register relatif (BX), (BP), (SI), atau (DI) dan semua register relatif dengan suatu displacement. Gambar 2-17 menunjukkan suatu tabel jump yang disimpan dimulai pada TABEL address memori. Tabel ini ditunjukkan dengan program pendek yang digambarkan pada Contoh 2-6. Dalam contoh ini, register BX dimasukkan TABLE DW LOCO] Addresses of four DW LOCI | uifterent programs DW LOC? | «Each address 1s a 2-byte DW Lcd ieee) GAMBAR 2-17 Tabel jump yang digunakan untuk memungkinkan program untuk memilih address jump yang berbeda untuk nilai-nilai yang berbeda dalam register BX. Mode Addressing 57 — Assembly Language Operation MP AX Jump to the intrasegment memory location addressed by AX JMP CX Jump to the intrasegment memory location addressed by CX JMP NEAR PTR [8X] Jump to the intrasegment memory location stored at the loca- tion addressed by BX in the data segment UMP NEAR PTR (Ol] Jump to the intrasegment memory location stored at the loca- tion addressed by DI in the data segment JMP TABLETBX} Jump to the intrasegment memory location stored at the loca- tion addressed by 8X plus the displacement TABLE in the data segment ee Ee ‘TABEL 2-9 Contoh addressing tidak langsung program dengan 4 sehingga, jika dikombinasikan dalam instruksi JMP TABLE(BX) de- ngan TABLE, address jump yang efektif adalah isi dari entry kedua dalam tabel —LOc2, EE 2-9 ADDRESSING MEMORI STACK Stack adalah suatu bagian yang penting dari sistem memori dalam semua mikro- prosesor. Dia memegang data secara temporer dan menyimpan address return dari subrutin, Memori stack adalah memori LIFO (last-in, fisrt-out = masuk terakhir, keluar pertama) dalam mikroprosesor 8086/8088. Data ditempatkan pada stack dengan instruksi PUSH; atau instruksi CALL, dalam kasus address return subru- tin, Data dihilangkan dari stack melalui instruksi POP, atau instruksi RET dalam. kasus address return subrutin. yusing indirect addressing for a jump w00 BB 0004 MOV BX,4 yaddress LOC2 03 FF A7 0000 R JMP TABLE{BX] jump to LOC2 CONTOH 2-6 58 Pengantar Mikroprosesor Memory Ree Reenter aay — ax PUSH Bx —sP beiore Bx 1234 1234 e ae Le — sp after x oe —— ° 7 mmr Memory BX pop_CX PsP ater x 1234 1234H = 3 [+P before Dx & ° Ll ead LN by GAMBAR 2-18 _Instruksi PUSH dan POP. (2) PUSH BX menempatkan isi register BX ke dalam stack yang ditangani oleh SP + SS x 10H. (b) POP CX menghilangkan data dari stack pada lokasi yang ditangani oleh SP + SS x 10H dan menempatkan data ke dalam register CX. Stack 8086/8088 Memori stack dalam 8086/8088 dipertahankan oleh dua register: stack pointer (SP) dan stack segment register (SS). Bila suatu kata data dipaksakan masuk ke stack (lihat Gambar 2-18 (a), 8 bit high-order ditempatkan dalam lokasi yang ditangani oleh SP - 1, dan 8 bit low-order ditempatkan pada lokasi yang ditangani oleh SP - 2. SP kemudian didekrementasi oleh dua sehingga kata data berikutnya disimpan dalam lokasi memori yang tersedia berikutnya, Register SP selalu menunjuk pada Mode Addressing 59 daerah memori yang terletak di dalam segmen stack. SP selalu ditambahkan pada SS x 10H untuk membentuk address memori stack. Bila data dimunculkan dari stack (lihat Gambar 2-18(b), 8 bit low-order dihilangkan dari lokasi yang ditangani oleh SP dan 8 bit high-order dihilangkan dari lokasi yang ditangani oleh SP + 1. SP kemudian diinkrementasi oleh 2. Tabel 2-10 mencatat beberapa instruksi PUSH dan POP yang terdapat dalam set in- struksi 8086/8088. Perhatikan bahwa PUSH dan POP selalu menyimpan atau menarik kata data — bukan bytes i EEE 2-10 RINGKASAN 1 Mode data-addressing mencakup register, immediate, direct, register indi- rect, base-plus-indeks, relatif register, dan relatif-plus-indeks. |. Mode memori-addressing program mencakup: langsung, relatif, dan tidak langsung. . Tabel 2-11 mencatat semua mode data-addressing yang terdapat di dalam mikroprosesor 8086/8088. . Instruksi MOV mengkopi isi dari sumber itu ke tujuannya, dan sumber itu tidak berubah Addressing register menguraikan semua register 8-bit (AH, AL, BH, BL, CH, CL, DH atau DL), atau semua register 16-bit (AX, BX, CX, DX, SP, BP, —— Assembly Language Operation POPF Pop flag word from stack PUSHF Push flag word onto stack PUSH AX Push AX onto stack POP BX Pop data from stack into BX PUSH DS Push DS onto stack POP cS legal instruction PUSH [8X1 Push word stored at location addressed by BX onto stack ——————— TABEL 2-10 Contoh instruksi PUSH dan POP 60 Pengantar Mikroprosesor —_—_—_ Instruction Address Generation MOV AL,BL Register addressing MOV AL,LIST (OS x 10H) + LIST MOV AL,12 Immediate data of 12 decimal MOV AL [BP] (SS x 10H) + BP MOV AL,[BX] (OS x 10H) + BX MOV AL {O1] (OS x 10H) + DF MOV ASI] (0S x 10H) + SI MOV ALIBP + 3} (SS x 10H) + BP +3 MOV ALIBX - 10] {OS x 10H) + BX - 10 MOV AL{DI + 10H] {OS x 10H) + DI + 100H MOV AL,[SI + 300H] (OS x 10H) + SI + 300H MOV AL,LIST[BP] (SS x 10H) + BP + LIST MOV AL,LIST[BX] (0S x 10H) + BX + LIST MOV AL,LISTION (OS x 10H) + DI + LIST MOV AL,LISTIS!] (OS x 10H) + SI + LIST MOV AL,LISTIBP + 2] (8S x 10H) + BP + LIST +2 MOV AL,LISTIBX + 20H] (OS x 10H) + BX + LIST + 20H MOV AL,LISTIDI - 6] (OS x 10H) + DI + LIST -~ 6 MOV AL,LISTIS! + 1] (0S x 10H) + SI + LIST +1 MOV AL|BP + D1) (SS x 10H) + BP + DI MOV AL{BP + SI] (SS x 10H) + BP + SI MOV AL,[BX + Dif (OS x 10H) + BX + DI MOV AL,[BX + SIj (OS x 10H) + BX + SI MOV ALP + DI + 2] (SS x 10H) + BP + DI +2 MOV ALIBP + SI - 2} (SS x 10H) + BP + SI- 2 MOV AL[BX + DI + 10} (OS x 10H) + BX + DI + 10 MOV AL,[BX + SI + 200} (OS x 10H) + BX + SI + 200H MOV AL,LISTIBP + OI] (SS x 10H) + BP + DI + LIST MOV AL.LISTIBP + SI] (SS x 10H) + BP + SI + LIST MOV AL,LISTIBX + DI] (OS x 10H) + BX + DI + LIST MOV AL,LISTIBX + Si} (OS x 10H) + BX + SI + LIST MOV AL,LISTIBP + DI + 2) (8S x 10H) + BP + DI + LIST +2 MOV AL,LISTIBP + Si - 3] (SS x 10H) + BP + SI + LIST - 3 MOV AL,LISTIBX + DI + 100H] (DS x 10H) + BX + DI + LIST + 100H MOV AL,LISTIBX + SI + 2AFH] (OS x 10H) + BX + SI + LIST + 2AFH ee TABEL 2-11 Mode addressing 8086/8088 Mode Addressing 61 6. SI, atau DI). Selain register yang disebutkan di atas, beberapa instruksi tertentu juga memungkinkan register segmen (CS, DS, SS atau ES) untuk ditangani, ‘Addressing immediate menuntut agar 8 atau 16 bit data secara langsung mengikuti opcode di dalam memori. Tipe addressing ini biasanya digunakan untuk memanipulasi data yang konstan. |. Addressing data langsung digunakan oleh dua instruksi MOV khusus untuk menerjemahkan kode 8085 ke dalam kode 8086/8088. Bentuk yang dimodi- fikasi yang disebut addressing displacement juga secara langsung menangani data di dalam memori dan digunakan oleh sebagian besar instruksi di dalam set instruksi. . Addressing tidak langsung register memungkinkan data ditangani pada lo- kasi memori yang ditunjukkan baik oleh register indeks maupun register base. Tipe addressing ini sangat berguna untuk mengakses daftar data, . Addressing base-plus-indeks sering digunakan untuk menangani data dalam suatu array. Address memori dibentuk dengan menambahkan register base, register indkes, dan register segmen dikali 10H. ‘Addressing relatif register menggunakan baik register base maupun register indeks ditambah displacement untuk mengakses data memori. Tipe penanganan seperti ini juga meminjamkan dirinya untuk menangani data di dalam array. _ Addressing relatif-plus-indeks base digunakan untuk menangani data di da- lam array dua dimensi. Address ini dibentuk dengan menambahkan register base, register indeks, displacement, dan register segmen dikali 10H. Mode memori-addressing program langsung terdapat pada mikroprosesor 8086/8088: mode langsung, relatif dan tidak langsung. Addressing memori program langsung dimungkinkan hanya dengan instruksi JMP dan CALL. Dalam addressing memori program langsung, address offset dan segmen dari instruksi selanjutnya yang akan dilakukan disimpan setelah opcode. _ Addressing memori program relatif memungkinkan instruksi JMP atau CALL untuk mencabang ke depan atau ke belakang dalam segmen kode yang ada hingga lebih dari + 32K. _ Addressing memori program tidak langsung memungkinkan instruksi JMP dan CALL untuk menangani bagian program atau subrutin lainnya secara tidak langsung melalui suatu register atau lokasi memori . Instruksi PUSH dan POP selalu mentransfer kata data antara operand dan stack. 62 Pengantar Mikroprosesor 2-11. PERTANYAAN DAN SOAL NAWRYN 13. 14. . Apa yang diperoleh oleh instruksi MOV berikut ini? a. MOV AX.BX b. MOV BX.AX c. MOV BL,CH d. MOV CS,AX . Sebutkan register 8-bit yang bisa diuraikan dalam instruksi. . Sebutkan register 16-bit yang bisa diuraikan dalam instruksi. Sebutkan register 16-bit yang ditangani hanya oleh sejumlah kecil instruksi. . Apa yang tidak beres dengan instruksi MOV BL.CX? . Apa yang tidak beres dengan instruksi MOV CS.SS? . Buatlah sebuah instruksi yang akan menempatkan 12 H ke dalam register BL. . Simbol khusus apa yang kadang-kadang ditemukan dalam addressing data langsung? Instruksi 8086/8088 apa yang digunakan untuk menggantikan instruksi LDA 8085? . Apa itu displacement? Bagaimana dia menentukan address memori dalam instruksi MOV (2000H) AX? . Apa yang ditunjukkan oleh simbol []? . Misalkan DS = 0200H. BX = 0200h, dan DI = 0300H. Tentukan address memori data yang diakses oleh setiap instruksi berikut. a. MOV AL, [2000H] b. MOV AL, [BX] ¢. MOV [DI],AL Apa yang tidak beres dengan instruksi MOV [BX], [DI]? Jelaskan perbedaan antara MOV BX, instruksi DATA dan instruksi MOV BX,OFFSET DATA. . Misalkan bahwa DS = 1000H. SS = 2000H, BP = 1000H, dan DI = 0100H, tentukan address data memori untuk tiap instruksi berikut ini. a. MOV AL, [BP+DI] b. MOV CX,[DI] c. MOV DX, [BP] Mode Addressing 63 18. Sebutkan ketiga mode memori-addressing program. 20. 21. 22. 23. 24, 25. . Misalkan bahwa DS = 1200H, BX = 0100H, dan SI = 0250H, tentukan address memori data untuk tiap instruksi berikut ini: a. MOV [100H},DL b. MOV [SI + 100H],AL c. MOV BL,[BX + 100H] |. Misalkan bahwa DS = 1100H, BX = 0200H, LIST = 0250H, dan SI = 0500H, tentukan address memori data untuk tiap instruksi berikut ini. a, MOV LIST[SI].DX b. MOV BL,LIST[BX + SI] c. MOV BH,[BX + SI] Data address register base 8086/8088 apa yang ada di dalam segmen stack? Berapa banyak byte memori untuk menyimpan suatu instruksi JMP interseg- men langsung? Apa yang disimpan di dalam setiap bytes? ‘Tunjukkan instruksi JMP yang mana (langsung, displacement panjang, atau displacement pendek) yang merakit jika instruksi JMP THERE disimpan di dalam address memori 10000H dan label THERE ditempatkan pada address memori berikut ini. a, 10020H - b. 11000H c. OFFFEH d. 20000H Buatlah sebuah instruksi JMP yang akan melompat ke address yang ditunjuk- kan oleh register BX. Pilihlah sebuah instruksi JMP yang akan melompat ke lokasi yang tersimpan di dalam address memori TABLE. Berapa banyak bytes data ditempatkan pada stack oleh instruksi PUSH? Jelaskan bagaimana fungsi instruksi PUSH[DI].

Das könnte Ihnen auch gefallen