Top Banner

of 52

Bab 3

Oct 30, 2015

Download

Documents

Ayu Astria
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript

3-1 MODE PENGALAMATAN-DATA

BAB 3Mode PengelamatanPENDAHULUANPengembangan perangkat lunak yang efisien untuk mikroprosesor memerlukan penguasaan yang baik mengenai mode pengalamatan yang terdapat pada setiap instruksi. Dalam bab ini, kita akan menggunakan instruksi MOV (move data) untuk menjelaskan mode pengalamatan-data. MOV memindahkan byte atau word data di antara register atau antara register dan memori dalam 8086 sampai 80286, dan byte, word, atau doubleword dalam 80386 dan versi rnikroprosesor di atasnya. Dalam menjelaskan mode pengalamatan memori program, kita akan menggunakan instruksi CALL dan JUMP yang menunjukkan bagaimana mengubah aliran program. Mode pengalamatan-data yang akan kita bahas di sini mencakup; register, segera, langsung, register tidak langsung, base-plus-index, register relatif, dan base relatif-plus index dalam mikroprosesor 8086 sampai 80286. 80386 dan versi mikroprosesor di atasnya juga mencakup mode indeks berskala dan pengalamatan data memori. Mode pengalamatan-memori program mencakup: program relatif, langsung, dan tidak langsung. Pengoperasian stack memory dijelaskan sedemikian rupa sehingga instruksi PUSH dan POP dapat dipahami. TUJUAN BAB Setelah menyelesaikan bab mi, Anda diharapkan mampu:1. Menjelaskan operasi dan tiap mode pengalamatan-data. 2. Menggunakan mode pengalamatan-data untuk membentuk pernyataan bahasa rakitan. 3. Menjelaskan operasi dan tiap mode pengalamatan-memoni program. 4. Menggunakan mode pengalamatan-mernorj program untuk membentuk pemyataan bahasa rakitan (assembly) dan mesin.5. Memilih mode pengalamatan yang tepat untuk mencapai tugas yang ditentukan. 6. Memperinci perbedaan antara pengalamatan data memori dengan menggunakan operasi mode real dan mode terlindung (protected mode). 7. Menggambarkan urutan kejadian yang menempatkan data ke dalam stack atau menghapus data dan stack. 8. Menerangkan bagaimana sebuah struktur data ditempatkan dalam memori dan digunakan dengan perangkat lunak. 3-1 MODE PENGALAMATAN-DATAKarena instruksi MOV merupakan instruksi yang umum dan fleksibel, memori tersebut memberikan dasar untuk menerangkan mode pengalamatan-data. Gambar 3-1 menggambarkan instruksi MOV dan menentukan arah dan aliran data. Perhatikan bahwa sumber terletak di sebelah kanan dan tujuannya di kiri, di samping opcode MOV dengan sumber dan tujuannya terpisah oleh koma. (Sebuah opcode, atau kode operasi, menyatakan kepada mikroprosesor tentang operasi yang harus dilaksanakannya). Arah aliran ini, yang digunakan oleh semua instruksi, pada mulanya tidak lazim. Kita secara alamiah mengasumsikan bahwa benda-benda bergerak dan kin ke kanan, sedangkan di sini berpindah dan kanan ke kin. Perhatikan bahwa sebuah koma selalu memisahkan tujuan dan sumber dalam sebuah instruksi. Juga, perhatikan bahwa pemindahan dari memori-ke-memori tidak diijinkan oleh instruksi apapun kecuali instruksi MOVS.Dalam Gambar 3-1, instruksi MOV AX, BX memindahkan isi dan register sumber (BX) ke dalam register tujuan (AX). Dengan kata lain, instruksi ini menyalin isi dari register BX ke dalam register AX. Penting untuk dicatat bahwa sumber tidak pernah berubah tetapi tujuan hampir selalu berubah. MOV tidak pernah benar-benar mengambil data dan memindahkannya. Juga, perhatikan bahwa register flag tidak dipengaruhi oleh sebagian besar instruksi pemindahan data. Sumber dan tujuan sering disebut sebagai operand.Gambar 3-2 menggambarkan semua variasi yang mungkin dan mode pengalamatan data dengan menggunakan instruksi MOV. Ilustrasi ini membantu kita melihat bagaimana setiap mode pengalamatan-data dirumuskan dengan instruksi MOV dan juga berperan sebagai sebuah referensi. Perhatikan bahwa ada mode pengalamatan-data yang sama yang ditemukan dengan semua variasi mikroprosesor Intel, kecuali mode pengalamatani indeks-berskala, yang hanya ditemukan dalam mikroprosesor 80386 sampai Pentium II. Mode pengalamatan-data yang digunakan dengan instruksi mi mencakup: P

Pengalamatan RegisterDigunakan untuk memindahkan salman dan byte atau word register dan register atau lokasi memori sumber ke dalam register atau lokasi memon tujuan. (Contoh: instruksi MOV CX,DX ak menyalin isi dan register DX ke dalam register CX). Dalam rnikroprosesor 80386 dan versi di atasnya, data doubleword dapat dipindahkan dan register sumber atau lokasi memori ke register tujuan atau lokasi memori. (Contoh: instruksi MOV ECX,EDX akan menyalin isi register EDX ke dalarn register ECX.)

Pengalamatan SegeraPengalamatan Digunakan untuk memindahkan data yang berukuran byte segera atau word langsung ke dalam register tujuan. (Contoh: instruksi MOV AL,22H menyalin bilangan 22H ke dalam register AL.). Dalam 80386 dan versi di atasnya, data doubleword dapat langsung dipindahkan ke dalam sebuah register atau lokasi memori. (Contoh: instruksi MOV EBX,12345678H menyalin bilangan 12345678H langsung ke dalam register 32-bit EBX.)

TujuanSumberMOV AX, BXGAMBAR 3-1 Instruksi MOV yang menggambarkan sumber, tujuan, dan aliran data.

Pengecualian yaitu instruksi CMP dan TEST, yang tak pemah mengubah tujuan. Instruksi ini dijelaskan di bab-bab selanjutnya.

Pengalamatan LangsungMemindahkan byte atau word antara lokasi memori dan register. Kumpulan instruksi tidak menyediakan pemindahan data antara memori-ke-memori, kecuali pada instruksi MOVS. (Contoh: instruksi MOV CX, LIST menyalin isi dan lokasi memori LIST ke dalam register CX.) Pada mikroprosesor 80386 dan versi di atasnya, lokasi memori berukuran-doubleword dapat juga dilakukan pengalamatan. (Contoh: instruksi MOV ESI,LIST menyalin sebuah bilangan 32-bit, disimpan dalam 4 byte memori secara berurutan, dan lokasi LIST ke dalam register ESI.)

Pengalamatan Base-Plus-IndeksPengalamatan Tidak LangsungRegister Memindahkan byte atau word antara register dan lokasi memori yang alamatnya ditunjuk oleh suatu register indeks atau register basis. Register indeks dan basis adalah BP, X, DI, dan SI. (Contoh: instruksi MOV AX,[BX] menyalin data 16- bit dan alamat offset segmen data yang alamatnya ditunjuk oleh register BX ke dalam register AX.) Pada 80386 dan versi di atasnya, data yang berukuran byte, word, doubleword dipindahkan antara register dan lokasi memori yang alamatnya ada dalam setiap register: EAX, EBX, ECX, EDX, EBP, EDI, atau ESI. (Contoh: instruksi MOV AL,[ECX} mengisi register AL dengan data yang berasal dari alamat offset segmen yang alamatnya ada di register ECX). Memindahkan data yang berukuran byte atau word antara register dan lokasi memori yang ditunjuk oleh register basis (BP atau BX) ditambah dengan isi register indeks (DI atau SI). (Contoh: instruksi MOV [BX+DIj,CL menyalin isi register CL yang berukuran byte ke dalam lokasi memoni segmen data yang ditunjuk oleh BX ditambah DI.) Pada 80386 dan versi di atasnya, setiap register EAX, EBX, ECX, EDX, BP, EDI. atau ESI dapat dikombinasikan untuk memperoleh alamat memori. (Contoh: instruksi MOV EAX+EBX1, CL menyalin isi register CL yang berukuran byte ke dalam lokasi memori segmen data yang ditunjuk oleh EAX ditarnbah EBX).

Pengalamatan Register relatifMemindahkan data yang berukuran byte atau word antara register dan lokasi memori yang ditunjuk oleh suatu register indeks atau basis ditambah displacement. (Contoh: MOV AX,[BX+4j atau MOV AX, ARRAY [BX]. Instruksi pertama mengisi AX dengan data yang alamat segmen datanya dibentuk oleh BX ditambah 4. Instruksi kedua mengisi AX dengan data yang lokasi memori segmen datanya dalam ARRAY ditambah isi register BX.) Pada 80386 dan versi di atasnya menggunakan setiap register untuk mengalamatkan memori. (Contoh: MOV AX,[ECX+4j atau MOV AX, ARRAY[EBX). Instruksi pertama mengisi AX dengan data yang alamat segmen datanya dibentuk oleh ECX ditambah 4. Instruksi kedua mengisi AX dengan data yang lokasi memori segmen datanya merupakan isi AR AY ditambah isi EBX.).

Pengalamatan Relatif-Plus-IndeksMemindahkan data yang berukuran byte atau word antara register dan lokasi memori yang ditunjuk oleh suatu register basis dan register indeks ditambah displacement. (Contoh: MOV AX, ARRAY[BX+DI] atau MOV AX,[BX+DI+4j. Contoh-contoh ini mengisi register AX dengan data yang pada lokasi memori segmen data. Instruksi pertama menggunakan sebuah alamat yang dibentuk oleh penambahan ARRAY, BX, dan DI dan yang kedua dengan penambahan BX, DI, dan 4.) Pada 80386 dan versi di atasnya, MOV EAX, ARRAY [EBX+ECX] mengisi register EAX dengan data yang ada pada lokasi memori segmen data yang dialcses dengan suatu alamat. Alamat tersebut dibentuk dengan penjumlahan ARRAY, EBX, dan ECX.

Pengalamatan Indeks-bersekalaPengalamatan ini hanya ada pada mikroprosesor 80386 sampai Pentium Pro. Register kedua dan pasangan register dimodif ikasi dengan faktor skala 2X, 4X, atau 8X untuk memperoleh alamat memori operand. (Contoh: instruksi MOV EDX,{EAX+4*EBX] mengisi register EDX dengan data yang ada pada lokasi memori segmen data yang alamatnya ditunjuk oleh EAX ditambah 4 dikali EBX.) Penskalaan mengijinkan akses data array memori yang berukuran word (2X), doubleword(4X), atau quadword (8X). Perhatikan bahwa faktor skala 1X juga ada, tetapi dinyatakan secara normal dan tidak muncul dalam instruksi. MOV AL,[EBX+ECX] merupakan sebuah contoh penskalaan dengan faktor satu. Sebagai alternatif, instruksi tersebut dapat ditulis kembali seperti MOV AL,[EBX+1*ECX]. Contoh lainnya adalah instruksi MOV AL,[2*EBX] yang hanya menggunakan register skala satu untuk mengalamati memori. PENGALAMATAN REGISTER Pengalamatan register merupakan bentuk pengalamatan data yang paling dikenal dan, begitu nama-nama register dipelajari, maka akan lebih mudah untuk memakainya. Untuk itu ada register 8-bit berikut: AH, AL, BH, BL, CH, CL, DH, dan DL. Dan sekarang ada register 16-bit berikut: AX, BX, CX, DX, SP, BP, SI, dan DI. Pada mikroprosesor 80386 dan versi di atasnya, terdapat register 32-bit yaitu, EAX, EBX, ECX, EDX, ESP, EBP, EDI, dan ESI. Dengan pengalamatan register, banyak instruksi MOV, dan instruksi PUSH dan POP, juga rnenggunakan register segmen 16-bit (CS, ES, DS, SS, FS, dan GS.) Penting sekali bahwa register yang digunakan memiliki ukuran yang seragam. Jangan pernah campurkan jenis register 8- dan 16-bit, register 8-bit dengan register 32- bit, atau register 16-bit dengan register 32-bit karena hal ini tidak diijinkan oleh mikroprosesor dan hasilnya akan mengeluarkan pesan kesalahan pada saat dilakukan perakitan. Hal ini juga berlaku pada instruksi MOV AX,AL atau MOV EAX,AL. Tentu saja, instruksi MOV AX,AL atau MOV EAX, AL tidak diijinkan karena register-register ini merupakan register yang berukuran berbeda. Perhatikan bahwa beberapa instruksi, salah satunya SHL DX,CL merupakan pengecualian dan aturan ini, seperti ditunjukkan dalam bab-bab selanjutnya. Hal yang juga perlu diperhatikan adalah bahwa tidak ada instruksi MOV yang mempengaruhi bit flag.Tabel 3-1 mengilustrasikan sebagian dan banyak versi yang berbeda dan instruksi pemindahan register. Hampir tidak mungkin untuk memperlihatkan semuanya karena ada banyak sekali kombinasi yang tersedia. Sebagian contoh, subset 8-bit dan instruksi MOV saja mempunyai 64 variasi yang berbeda. Hanya tipe instruksi MOV pada register segmen ke register segmen saja yang tidak diijinkan. Perhatikan bahwa register segmen kode secara normal tidak diubah oleh instruksi MOV karena alamat instruksi berikutnya ditemukan dalam IP/EIP dan CS. Jika hanya CS yang diubah, maka alamat instruksi berikutnya tidak dapat diramalkan. Oleh karena itu, pengubahan register CS dengan instruksi MOV tidak diijinkan.

Tabel 3-1 Contoh-contoh instruksi register teralamatiOperasiUkuranBahasa AssemblyMOV AL,BL MOV CH,CL MOV AX,CX MOV SP,BP MOV DS,AX MOV SI,Dl MOV BXES

Menyalin isi register BL ke register AL ke CH Menyalin isi register register CX ke AX Menyalin isi register register SP Menyalin isi register register AX ke DS Menyalin isi register register ke SI Menyalin isi register register ke BX Menyalin isi register EBX ke ECX Menyalin isi register register 8-bit 8-bit 16-bit 16-bit 16-bit 16-bit 16-bit

ke ESP Menyalin isi register register Tidak diijinkan (segmen-ke-segmen) Tidak diijinkan (ukuran tidak Tidak diijinkan (register segmen oleh merupakan register tujuan)32-bit 32-bit MOV ECX,EBX MOV ESP,EDX MOV ES,DS MOV BL,DX MOV CS,AX

Array RegisterTabel 3-3 pengaruh dari menjalankan instruksi MOV BX, CX tepat pada saat sebelum register BX berubah. OPerhatikan bahwa hanya 16-bit paling kanan dari register EBX yang berubah

2 2 3 47 6A F

1 1 A C1 23 4

EAX

EBX

1 2 3 4ECX

Gambar 3-3 mengilustrasikan fungsi instruksi MOV BX,CX. Perhatian bahwa isi register sumbernya tidak berubah, tetapi isi register tujuannya berubah. Di sini 1234H disalin dan register CX ke dalam register BX. Instruksi ini akan menghapus isi register yang lama (76AFH) dan register BX, tetapi isi CX tidak diubah. Isi dan register tujuan atau lokasi memori tujuan berubah untuk semua instruksi kecuali instruksi CMP dan TEST. Perhatikan bahwa instruksi MOV BX,CX tidak mempengaruhi 16 bit paling kiri dan register EBX.Contoh 3-1 memperlihatkan urutan instruksi rakitan yang menyalin data berbedab eda antara register 8-, 16-, dan 32-bit. Seperti yang telah disebutkan, gerakan pemindahan data dan satu register ke register lainnya hanya mengubah register tujuan, tidak pernah mengubah register sumber. Instruksi terakhir dalam contoh ini (MOV CS,AX) dikompilasi tanpa kesalahan, tetapi menyebabkan masalah jika dieksekusi. Jika hanya isi CS yang berubah tanpa mengubah IP, langkah berikutnya dalam program tidak diketahui dan oleh karena itu menyebabkan program menjadi salah. CONTOH 3-1

AX, BXCL,DH CL,CH EAX,EBX EHX,EAX ECX,EAX EDX,EAX AX,CS DS,AX CS, AXMOVMOV MOV MOV MOV MOV MOV MOV MOVMOV ; salin isi dari BX ke dalam AX; salin isi dari DH ke dalam CL ; salin isi dari CH ke dalam CL ; salin EBX ke dalam EAX ; salin EAX ke EBX, ECX, dan EDX ; salin CS ke dalam DS ; merakit, tapi akan menimbulkan masalahC3 CE CD 8B 8B 8B8B C8 D8 C88B BA BA 66 66 66 66 8C 8E8E 0000 00020004 00060009000C 000F 0012 00140016C3 08 C8 00

PENGALAMATAN SEGERAMode pengalamatan-data lainnya adalah pengalamatan segera. Istilah segera menyatakan bahwa data segera mengikuti kode operasi heksadesimal dalam memori. Juga perhatikan bahwa data segera merupakan data konstan, sedangkan data yang dipindahkan dan register adalah data berubah. Pengalamatan segera bekerja berdasarkan data yang berukuran byte atau word. Dalam mikroprosesor 80386 sampai Pentium II, pengalamatan langsung juga bekerja pada data doubleword. Instruksi segera MOV memindahkm salinan data segera ke dalam sebuah register atau sebuah lokasi memori. gambar 3-4 menggambarkan instruksi operasi MOV EAX,13456H. Instruksi ini menyalin 13456H dan instruksi, yang ditempatkan dalam memori secara segera mengikuti kode operasi heksadesimal, ke dalam register EAX. Seperti dengan instruksi MOV yang diilustrasikan dalam Gambar 3-3, data sumber menimpa data tujuan. Dalam bahasa rakitan simbolis, data segera didahului oleh simbol # pada beberapa assembler (perakit).2 MOV AX, #3456H merupakan sebuah contoh. Sebagian besar assembler tidak menggunakan simbol #, tetapi mewakili data segera seperti dalam instruksi MOV AX,3456H. Dalam teks ini tidak menggunakan simbol # untuk menunjukkan data segera. Sebagian besar assembler yang ada seperti Intel ASM, Microsoft MASM, dan Borland TASM, tidak menggunakan simbol # untuk data segera, tetapi assembler yang lebih lama yang digunakan dengan sistem pengembangan logika Hewlett-Packard menggunakan simbol #, sama seperti yang lainnya. Assembler simbolis memperlihatkan data segera dalam banyak cara. Huruf H ditambahkan kepada data heksadesimal. Jika data heksadesimal mulai dengan suatu huruf, assembler memerlukan data yang dimulai dengan 0. Sebagai contoh, untuk merepresentasikan heksadesimal F2, OF2H digunakan dalam bahasa rakitan. Dalam beberapa assembler (diasumsikan bukan dalam MASM3, TASM4, atau teks ini), data heksadesimal direpresentasikan dengan h. seperti dalam MOV AX,#h 1234. Data desimal direp resentasikan tanpa kode khusus atau modifikasi. (Sebuah contoh adalah desimal 100 dalam instruksi MOV AL, 100.) Karakter atau kode-ASCII dapat digambarkan dalam bentuk segera jika data ASCII ditutup dalam tanda . (Sebuah contoh adalah instruksi MOV BH,A, yang rnemindahkan kode ASCII huruf A (41H) ke dalam register BH.) Ingatlah untuk selalu menggunakan tanda apostrof () untuk data ASCII dan bukan tanda quotation tunggal (S). Data biner direpresentasikati jika bilangan hiner diikuti dengan huruf B, atau, dalam banyak assembler, huruf Y. Tabel 3-2 mernperlihatkan berbagai variasi yang berbeda dan instruksi MOV yang memakai data segera.

Array registerProgramContoh 3-2 mernperlihatkan berbagai instruksi segera dalam suatu program pendek yang rnenempatkan 0000H ke dalarn register 16-bit AX, BX, dan CX. Kemudjan diikuti dengan instruksi yang menggunakan pengalamatan register untuk menyalin isi AX ke dalam register SI, DI, dan BP. ini adalah program lengkap yang menggunakan model pemrograman untuk perakitan dan eksekusi. Pernyataan .MODEL TINY mengarahkan assembler untuk merakit program ke dalam segmen kode tunggal. Pernyataan atau

3 3 3 36 29 1

MOV EAX,13456HGAMBAR 3-4 Operasi Program instruksi MOV EAX,3456H. Instruksi ml menyalin data segera (13456H) ke dalam EAX.

EAXEAX

13456H.

TABEL 3-2 Contoh-contoh pengalamatan segera yang nenggunakan instruksi MOV Bahasa AssemblerMOV BL,44 MOVAX,44H MOV SI,0 MOV CH,100 MOV AL,A MOV AX,AB MOV CL,11001110B MOV EBX,12340000H MOV ESI,12 MOV EAX,100Y Ukuran8-bit 16-bit 16-bit 8-bit 8-bit 16-bit 8-bit 32-bit 32-bit 32-bit OperasiMenyalin 44 desimal (2CH) ke dalam BL Menyalin 0044H ke dalam AX Menyalin 0000H ke dalam SI Menyalin 100 desimal (64H) ke dalam CH Menyalin ASCII A ke dalam ALMenyalin ASCII BA* ke dalam AX Menyalin 11001110 biner ke dalam CL Menyalin 12340000H ke dalam EBX Menyalin 12 desimal ke dalam ESI Menyalin 100 biner ke dalam EAX 2Hal ini benar untuk assembler Hewlett-Packard dalam beberapa sistem pengembangan 3ASM (Macro Assembler) adalah merek dagang dan Microsoft Corporation. 4TASM (Turbo Assembler) adalah merek dagang dan Borland Corporation

Catatan: ini bukan kesalahan. Karakter ASCII disimpan sebagai BA, sehingga perlu dilatih ketelitian saat memakai pasangan karakter ASCII ukuran-word. direktif .CODE menunjukkan awal segmen kode; pernyataan .STARTUP menunjukkan awal instruksi dalam program; dan pernyataan .EXIT menyebabkan keluar menuju DOS. Pernyataan END menunjukkan akhir dan file program. Program ini dikompilasi dengan MASM dan dieksekusi dengan CodeView(CV)5 untuk memperlihatkan eksekusinya. Perhatikan bahwa sebagian besar versi TASM yang ada juga akan menerima kode MASM. Untuk menyimpan program ke dalam sistem digunakan salah satunya program EDIT DOS atau Programmers Work-Be,thh (PWB)6. Perhatikan bahwa sebuah program TINY selalu terkompilasi menjadi program perintah (.COM).

.MODEL TINY.CODE.STARTUPMOVMOV MOV MOV MOV MOV. EXITEND ; pilih mode segment tunggal; tandai awal segment code;tandai awal program ;tempatkan 0000H ke dalarn AX ;tempatkan 0000H ke dalarn BX ;tempatkan 0000H ke dalam CX ;salin AX ke dalam SI ;salin AX ke dalam DI ;salin AX ke dalam BP ; keluar dari DOS; akhir file0000 01000103 01060109010B 010D CONTOH 3-2

000000000000F0F8E8B8 BBB98B8B8B

Setiap pernyataan dalam suatu program terdiri dan empat bagian atau field, seperti diilustrasikan dalam Contoh 3-3. Field paling kiri disebut label dan digunakan untuk menyimpan suatu nama simbol pada lokasi memori yang merepresentasikannya. Semua label dimulai dengan sebuah hunuf atau salah satu dan karakter khusus berikut ini: @, $, _, atau ?. Sebuah label panjangnya antara 1 sampai 35 karakter. Label muncul dalam program untuk mengidentifikasi nama dan lokasi memori untuk menyimpan data dan untuk tujuan-tujuan lainnya yang diterangkan pada saat lebel tersebut muncul. Field berikutnya disebut field opcode (kode openasi); dirancang untuk menyimpan instruksi, atau opcode. Bagian MOV dan instruksi pemindahan data merupakan sebuah contoh dan sebuah opcode. Di sebelah kanan field opcode adalah field operand yang berisi informasi yang digunakan oleh opcode. Sebagai contoh, instruksi MOV AL, BL mempunyai opcode MOV dan Operand AL dan BL. Perhatikan bahwa beberapa instruksi berisi antara nol dan tiga operand. Field terakhir, field keterangan, berisi sebuah komentar tentang sebuah instruksi atau sekumpulan instruksi. Sebuah komentar selalu dimulai dengan tanda semicolon atau titik koma (;).

5CodeView adalah merek dagang terdaftar dan Microsoft Corporation 6Programmers Workbench adalah merek dagang terdaftar dan Microsoft Corporation. CONTOH 3-3 LABELOPCODEOPERANDKOMENThR DATA1 DB 23H ;defiisikan DATA1 sebagai byte 23H DATA2 DW 1000H ;defiisikan DATA2s ebagai word100011 START: MOV AL,BL ;salin BL ke dalam AL MOVBH,AL ;salin AL ke dalajn BR MOVCX,200 ;salin 200 desimal ke dalain CX Saat program dirakit dan file list (1ST) diperlihatkan, maka akan muncul program yang ada dalam Contoh 3-2. Bilangan heksadesimal pada sebelah kin merupakan alamat offset dan instruksi atau data. Bilangan mi dibangkitkan oleh assembler. Bilangan atau bilangan-bilangan di sebelah kanan alamat offset merupakan instruksi-instruksi atau data dalam kode mesin yang juga dibangkitkan oleh assembler. Sebagai contoh, jika instruksi MOV AX,0 muncul dalam sebuah file dan dikompilasi, maka akan muncul dalam lokasi memori offset 0100 dalam Contoh 3-2. Bentuk bahasa mesin heksad esimalnya adalah B8 0000. B8 merupakan kode operasi dalam bahasa mesin dan 0000 merupakan data 16-bit dengan nilai nol. Pada saat program ditulis, hanya MOV AX,0 yang diketik ke dalam (teks) editor; assembler membangkitkan kode mesin dan alamata lamat, dan menyimpan program dalam sebuah file yang diakhiri dengan ekstensi .LST. Perhatikan bahwa semua program dipenlihatkan dalam teks mi dalam bentuk seperti yang dibangkitkan oleh assembler. PENGALAMATAN DATA LANGSUNG Sebagian besar instruksi dapat menggunakan mode pengalamatan-data langsung. Pada kenyataannya, pengalamatan langsung dipakai untuk sebagian besar instruksi dalam program biasa. Ada dua bentuk dasar pengalamatan data langsung: (1) pengalamatan langsung. yang menggunakan instruksi MOV antara lokasi memoni dan AL. AX atau EAX; dan (2) pengalamatan displacement, yang digunakan pada hampir semua instruksi dalam kumpulan instruksi. Dalam salah satu kasus, alamat dibentuk dengan penambahan displacement dan alamat segmen data default atau alamat segmen alternatif. Pen galamatan Langsung. Pengalamatan 1agsung dengan instruksi MOV memindahkan data antara lokasi memorii, yang ditempatkan dalam segmen data, dan register AL (8-bit), AX (16-bit), atau EAX (32-bit). Instruksi MOV yang menggunakan tipe pengalamatan mi biasanya merupakan instruksi yang mempunyai panjang 3 byte. (Pada 80386 dan versi di atasnya, awalan ukuran register muncul sebelum instruksi. yang menyebabkan panjang instruksi tersebut melebihi 3 byte.) Instruksi MOV AL,DATA, seperti yang ditunjukan pada sebagian besar assembler mengisi AL dengan data yang disimpan dalam lokasi memoni DATA (1234H Lokasi memori DATA merupakan sebuah simbol dan lokasi memoni, sedangkan 1234H menup akan lokasi heksadesimal yang sebenarnya. Pada beberapa assembler. instruksi ini direpresentasikan seperti instruksi MOVAL,[l234H]7. [1234H1 merupakan lokasi memori absolut yang tidak diijinkan oleb semua program assembler. Perhatikan bahwa instruksi mi perlu dibentuk seperti MOV AL,DS:[1234H] pada beberapa assembler, untuk memperl ihatkan bahwa alamatnya ada dalam segmen data. Gambar 3-5 menunjukkan bagaimana instruksi mi memindahkan salman isi yang berukuran byte dan lokasi memori 11234H

11235H11234H11233H11232HMemori

EAXEBXECX

AH8 A8AHAL8AH

Ke dalam register AL. Alamat efektif dibentuk dengan penambahan 1234H (alamat offset) dan 1000H (alamat segmen data dari 1000H) dalam suatu sistem operasi pada mode real.Tabel 3-3 mencatat tiga instruksi pengalamatan langsung. Instruksi-instruksi ini sering muncul dalam program, sehingga intel memutuskan untuk membuatnya menjadi instruksi khusus dengan panjang 3-byte untuk mengurangi panjang program. Semua instruksi lainnya yang memindahkan data dari lokasi memori ke register, disebut instruksi pengalamatan-displacement. Instruksi ini memerlukan memori yang panjangnya empat byte atau lebih untuk penyimpanan dalam sebuah program. Pengalamatan Displacement. Pengalamatan Displacement hampir mirip dengan pengalamatan langsung kecuali bahwa instruksi itu mempunyai lebar 4 byte bukan 3 byte. Pada 80386 sampai Pentium II, instruksi ini lebarnya menjadi sampai 7 byte jika menggunakan register 32-byte dan displacement 32-byte. Type pengalamatan data langsung ini juga lebih fleksibel karena sebagian besar instruksi bisa menggukannya.

Tabel 3-3 instruksi-instruksi pengalamatan langsung yang menggunakan EAX, AX, dan AL. Bahasa RakitanUkuranOperasiMOV AL,NUMBER8-bitMenyalin isi byte lokasi memori segmendata NUMBER ke dalam ALMOV AX,COW16-bitMenyalin isi word dari lokasi memorisegmen data COW ke dalam AXMOV EAX,WATER*32-bitMenyalin isi doubleword dari lokasisegmen memori WATER ke dalam EAXMOV NEWS,AL8-bitMenyalin AL ke dalam lokasi memorisegmen data NEWSMOV THERE,AX16-bitMenyalin AX ke dalam lokasi memorisegmen data THEREMOV HOME,EAX*32-bitMenyalin EAX ke dalam lokasi memorisegmen data HOMEMOV ES:[2000 H],AL8-bitMenyalin AL ke dalam lokasi memorisegmen data tambahan 2000H*Catatan: Mikroprosesor 80386-Pentium II terkadang memakai lebih dari tiga byte memori untuk pemindahan 32-bit antara EAX dan memori.

BAB 3 MODE PENGALAMATAN

Jika operasi instruksi MOV CL,DS:[1234H] dibandingkan dengan instruksi MOV AL,DS:[1234H] dari gambar 3-5, keduanya pada dasarnya melakukan operasi yang sama kecuali register tujuannya (CL versus AL). Perbedaannya lainnya hanya menjadi jelas setelah dilakukan kompilasi pada kedua versi instruksi ini. Instruksi MOV AL,DS:[1234H] adalah instruksi yang panjangnya 3 byte, dan instruksi MOV CL,DS:[1234H] adalah instruksi yang panjangnya 4 byte, seperti yang ditunjukan pada contoh 3-4. Contoh ini memperlihatkan bagaimana assembler mengubah dua instruksi ini kedalam bahasa mesin heksadesimal. Anda harus memasukan register segmen DS: dalam contoh ini, sebelum bagian instruksi (offset). Anda boleh menggunakan register segmen manapun, tetapi dalam sebagian besar kasus, data disimpan dalam segmen data, sehingga contoh ini menggunakan DS:[1234H].

7Format ini dapat dipakai dengan MASM, tetapi sering muncul bila program diketik atau didaftar dengan DEBUG, alat debugging yang tersedia dalam DOS.

CONTOH 3-40000A01234RMOV AL,DS: [1234H]00038A0E1234RMOV CL,DS: [1234H]

Tabel 3-4 menunjukkan beberapa untuk instruksi MOV yang menggunakan bentuk displacement pada pengalamatn data langsung. Tidak semua bentuk didaftar karena ada banyak instruksi MOV dari tipe ini. Register segmen dapat disimpan atau diisi dari memori.Contoh 3-5 memperlihatkan suatu program pendek yang menggunakan model yang mengalamatkan informasi dalam segmen data. Perhatikan bahwa segmen data mulai dengan pernyataan .DATA untuk memberitahukan kepada assembler dimana segmen data dimulai. Ukuran model diatur dari TINY, seperti ditunjukkan dalam contoh 3-3, sampai SMALL sehingga segmen data dapat dimasukkan. Model SMALL memungkinkan satu segmen data dan satu segmen kode. Model SMALL sering digunakan pada saat data memori diperlukan pada sebuah program. Program model SMALL mengkompilasi program eksekusi (.EXE). Perhatikan bagaimana contoh ini

CONTOH 3-4 ontoh-contoh pengalamtan langsung dengan menggunakan displacement,

Bahasa rakitanUkuranOperasi

MOV CH,DOG8-bitMenyalin isi byte lokasi memori segmen data DOG ke dalam CHMOV CH,[1000H]*8-bitMenyalin isi byte alamat offset segmen data 1000H ke dalam CHMOV ES,DATA616-bitMenyalin isi word lokasi memori segmen DATA6 ke dalam ESMOV DATA7,BP16-bitMenyalin BP kedalam lokasi memori segmen data DATA7MOV NUMBER,SP16-bitMenyalin SP ke dalam lokasi memori segmen data NUMBERMOV DATA1,EAX32-bitMenyalin EAX ke dalam lokasi memori segmen data DATA1MOV EDI,SUM132-bitMenyalin isi doubleword lokasi memori segmen data SUM1 ke dalam EDI

*Catatan: Bentuk pengalamatan ini jarang dipakai oleh kebanyakan assembler karena alamat offset numerik yang sebenarnya jarang diakses.

3-1 MODE PENGALAMATAN-DATA

mengalokasikan lokasi memori dalam segmen data dengan menggunakan direktif DB dan DW. Disini pernyataan .STARTUP tidak hanya menunjukkan awal kode, tetapi juga mengisi register segmen data dengan alamat segmen dari segmen data. Jika program ini dikompilasi dan dieksekusi dengan CodeView, instruksi dapat diamati pada saat instruksi tersebut mengeksekusi dan mengubah register dan lokasi memori.

CONTOH 3-5.MODEL SMALL;pilih model SMALL0000.DATA;tandai awal dari segmen DATA

0000 10 DATA1 DB 10H ;tempatkan 1OH dalam DATA10001 00 DATA2 DB0 ;tempatkan 0 dalam DATA20002 0000 DATA3 DW 0 ;tempatkan 0 dalam DATA30004 AAAA DATA4 DW 0AAAAH;tempatkan AAAAH dalam DATA40000 .CODE;tandai awal dan segmen CODESTARTUP ;tandai awal dan program0017 A0 0000 R MOV AL,DATA1 ;salin NATAl ke ALOO1A 8A 26 0001 R MOV AH,DATA2 ;salin DATA2 ke AHOO1E A30002 R MOV DATA3,AX ;simpan AX di DATA30021 8B 1E 0004 R MOV BX,DATA4 ;muati BX dengan DATA4.EXIT;keluar ke DOSEND ;akhir file

Pengalamatan Register Tidak LangsungPengalamatan register tidak langsung-memungkinkan data dialamatkan pada lokasi memori melalui alamat offset yang ditunjukkan oleh setiap register berikut ini: BP, BX, DI, dan SI. Sebagai contoh, jika register BX berisi 1000H dan instruksi MOV AX, [BX] dilakukan, isi dan segmen data yang berukuran word pada alamat offset I000H disalin ke dalam register AX. Jika mikroprosesor dioperasikan dalarn mode dan DS = 0100H, instruksi mi mengalamatkan data word yang disimpan pada lokasi memori 2000H dan 2001H, dan memindahkannya ke dalam register AX (dilihat Gambar 3-6). Perhatikan bahwa isi dan 2000H dipindahkan ke dalam AL dan isi 2001H dipindahkan ke dalam AH. Simbol [] menjelaskan pengalamatan tidak langsung dalam hahasa rakitan. Selain menggunakan register BP, BX, DI, dan SI ke memori alamat secara tidak langsung. rnikroprosesor 80386 dan versi di atasnya mengijinkan pengalamatan register tidak langsung dengan setiap register 32-bit kecuali ESP. Beberapa instruksi khusus yang menggunakan pengalamatan tidak langsung tampak pada Tabel 3-5.Segmen data digunakan secara default dengan pengalamatan register tidak langsung atau mode pengalamatan lainnya yang menggunakan BX. Dl, atau SI, untuk mengalamatkan memori. Jika register UP mengalamatkan memori, maka segmen stack digunakan. Kondisi ini dipertimbangkan default pada empat register indeks dan basis. Pada 80386 dan versi di atasnya, EUP mengalamatkan memori dalam segmen stack (default); EAX, EBX, ECX, EDX, EDT. dan ESI mengalamatkan memori dalam segmen data (default). Bila rnenggunakan register 32-bit untuk mengalamatkan memori dalam mode real, maka isi register 32-bit tidak pernah melebihi 0000FFFFH. Dalam mode terlindung, setiap nilai dapat digunakan dalam register 32-bit yang digunakan untuk mengalamatkan memori secara tidak langsung, sepanjang tidak rnengakses suatu lokasi di luar segmen, seperti yang ditentukan dalam byte hak akses. Sebagai contoh instruksi 80386/80486/Pentium II adalah MOV EAX,[EBX]. Instruksi ini mengisi EAX dengan bilangan yang berukuran doubleword yang disimpan pada alamat offset segmen data yang ditunjuk oleh EBX.

BAR 3 MODE PENGALAMATAN

EAXEBXECX

AHAL8AH

0 1 0 0

*Setelah DS ditambah dengan 0.

GAMBAR 36 Operasi instruksi MOV AX,[BX] pada saat BX = 1000H dan DS = 0100H. Perhatikan bahwa instruksi ini ditunjukkan setelah isi memori dipindahkan ke register AX.

TABEL 35 Contoh pengalamatan register tidak langsung.

Bahasa RakitanUkuranOperasi

MOVCX,[RX]16-bitMenyalin isi word lokasi memori segrnen data yang dialamatkan oleh HX ke dalarn CXMOV[BP],DL*8-bitMenyalin DL ke lokasi memori segrnen stack yang dialamatkan oleh BPMOV[DI],BH8-bitMenyalin BH ke lokasi memori segmen data yang dialamatkan oleh DIMOV[DI],[BX]Perpindahan dari memori ke rnemori tak diijinkan kecuali dengan instruksi stringMOVAL,[EDX]8-bitMenyalin isi byte lokasi memori segmen data yang dialamatkan oleh EDX ke dalam ALMOVECX,[EBX]32-bitMenyalin isi doubleword lokasi rnemori segmen data yang dialamatkan oleh EBX ke dalam ECX

*Catatan: Data yang dialamatkan oleh BP atau EBP secara default berlokasi di segmen stack, sedangkan pengalamatan tak-langsung yang lain secara default memakai segmen data.

Dalam beberapa kasus, pengalamatan tidak kngsung memerlukan ukuran data khusus yang ditetapkan dengan clirektif assembler khusus BYTE PTR, WORD PTR, atau DWORD PTR. Direktif ini menunjukkan ukuran data memori yang dialamatkan oleh penunjuk memori (PTR). Sebagai contoh, instruksi MOV AL;[DI]secara jelas merupakan instruksi pemindahan yang berukuran byte, tetapi instruksi MOV [DI],10H merupakan instruksi yang tidak jelas. Apakah instruksi MOV [DI], 10H mengalamatkan lokasi memori yang berukuran byte, word, atau doubleword? Assembler tidak menentukan ukuran 10H.instruksi MOV BYTE PTR [DI], 10H secara jelas merancang lokasi yang dialamatkan oleh DI sebagai lokasi memori yang berukuran byte. Begitu juga, MOV DWORD PTR [ DI], I0H secara jelas mengidentifikasi lokasi memori yang berukuran doubleword. Direktif BYTE PTR, WORD PTR, dan DWORD PTR digunakan hanya dengan instruksi yang mengalamatkan lokasi memori melalui sebuah register penunjuk atau register indeks dengan data langsung, dan untuk beberapa instruksi Iainnya digambarkan dalam bab-bab berikutnya.

3-1 MODE PENGALAMATAN-DATAPengalamatan tidak langsung sering digunakan untuk menunjukan data tabular dalam sistem memori. Misalnya, Anda harus menciptakan suatu tabel informasi yang akan menampung 50 sampel yang diambil dari lokasi memori 0000;046C. Lokasi 0000:046C berisi sebuah penghitung yang dikontrol oleh clock real-time dari komputer pribadi. Gambar 3-7 menggambarkan tabel dan juga register BX yang digunakan untuk menangani setiap lokasi dalam tabel secara berurutan. Untuk mencapai hal ini, Anda perlu memasukkan lokasi awal tabel ke dalam register BX dengan instruksi langsung MOV. Setelah inisialisasi alamat awal tabel, Anda kemudian menggunakan pengalamatan register tidak langsung untuk menyimpan 50 sampel secara berurutan.Urutan yang ditunjukkan dalam Contoh 3-6 mengisi register BX dengan alamat awal dan tabel dan menginisialisasi perhitungan yang ditempatkan dalam register CX, sampai 50. Direktif OFFSET memerintahkan kepada assembler untuk mengisi BX dengan alamat offset dan lokasi memori TABEL, bukan isi TABEL. Sebagai contoh, instruksi MOV BX,DATAS menyalin isi lokasi memori DATAS ke dalam BX, sedangkan instruksi MOV BX,OFFSET DATAS menyalin alamat offset dari DATAS ke dalam BX. Pala saat direktif OFFSET digunakan dengan instruksi MOV, maka assembler menghitung alamat offset dan kemudian menggunakan instruksi langsung MOV untuk mengisi alamat ke dalam register 16-bit yang ditentukan.

C0NTOH 36.NODEL SMALL;pilih model SMALL0000.DATA;awal dan segmen DATA00000032[DATAS DW 50 DUP (?);setup array berisi 50 byte0000]0000 .CODE ;awal dan segmen CODE.STARTUP ;awal dari program0017 B8 0000 MOVAX,0001A8E C0 MOV ES,AX ;alamati segmen 0000 dengan ES001CBB 0000 R MOV BX,OFFSET DATAS ;alamati DATAS array001FB9 0032 MOV CX,50 ;muati penghitung dengan 500022AGAIN:002226:A1 046C MOV AX,ES:[046CH] ;dapatkan nilai clock002689 07 MOV [BX],AX ;simpan nilai clock dalam DATAS002843 INC BX ;tambahi BX ke elemen berikutnya0029E2 F7 LOOP AGAIN ;ulangi 50 kali.EXIT;keluar ke DOSEND;akhir file

GAMBAR 37 Sebuaharray (TABEL) berisi 50 byte yang dialamatkan secaratidak Iangsung melalui register BX.

Sekali penghitung dan penunjuk dinisialisasi, loop pengulangan hingga CX = 0 dieksekusi. Di sini data dibaca dari lokasi memori segmen ekstra 46CH dengan instruksi MOV AX,ES:[046CH] dan disimpan dalam memori yang dialamatkan secara tidak langsung oleh alamat offset yang ditempattan dalam register BX. Berikutnya. BX ditambahkan dengan satu untuk lokasi tabel berikutnya, dan akhirnya instruksi LOOP berulang sampai 50 kali. insturksi LOOP niengurangi dengan satu penghitung (CX); jika CX tidak nol, maka LOOP menyebabkan loncat ke lokasi memori AGAIN Jika CX menjadi nol, tidak terjadi loncat dan urutan instruksi ini berakhir. Contoh ini menyalin sebagian besar 50 nilai dari clock ke dalam array memori DATAS. Program ini sering menunjukkan data yang sama dalam setiap lokasi karena isi dock hanya diubah 18,2 kali per detik, Untuk menganalisa program dan eksekusinya, gunakan program CodeView. Untuk meuggunakan CodeView, ketik CV PILE.EXE atau rnengaksesnya sebagai DEBUG dan program Programmers Work Bench pada menu RUN. Perhatikan bahwa Code View berfungsi hanya dengan file .EXE atau .COM. Beberapa switch CodeView merupakan /50 untuk peraga 50-bails dan /S untuk menggunakan peraga video resolusi tinggi dalam suatu aplikasi. Untuk mencari kesalahan dan memperbaiki file TEST.COM dengan 50 bails, ketiklah CV /50 TEST.COM pada prompt DOS.

Pengalamatari Basis-Plus-Indeks

Pengalamatan basis-plus-indeks mirip dengan pengalamatan tidak langsung karena secara tidak langsung menangani data memori, Dalam mikroprosesor 8086 sampai 80286, tipe pengalamatan inii menggunakan satu register basis (BP atau BX), dan register indeks (Dl atau SI) untuk secara tidak langsung mengalamatkan memori. Register basis sering menampung alamat awal dari suatu array memori, sedangkan register indeks menampung posisi relatif dari elemen dalam array. Ingat bahwa kapanpun DX mengalamatkan data memori, kedua register segmen stack dan BP ini memhangkitkan alamat efektifDalam 80386 dan versi di atasnya, tipe pengalamatan ini mengijinkan kombinasi setiap dua register 32-bit kecuali ESP. Sebagai contoh, instruksi MOV DL,[EAX+EBX] menggunakan EAX (sebagai basis) dirambah EBX (sebagai indeks). Jika register EBP digunakan, maka data ditempatkan dalam segmen stack bukan dalam segmen data.Penempatan Data dengan Pengalamatan Basis-plus-indeks. Gambar 3-8 menggambarkan bagaimana data dialamatkan untuk instruksi MOV DX,[BX+DI] pada saat mikroprosesor beroperasi dalam mode real. Dalam contoh ini, BX = 1000H DI = 0010H, dan DS = 0100H. yang menterjemahkan ke alamat memori 02010H. Instruksi ini memindahkan salinan data yang berukuran word dan lokasi 02010H ke dalam register DX. Tabel 3-6 mencatat beberapa instruksi yang digunakan untuk pengalarnatan basis-plus-indeks. Perhatikan bahwa assembler Intel mensyaratkan mode pengalamatan tersebut muncul sebagai [DXI[DI] bukan [BX+DI], Instruksi MOV DX,[BX+DI] adalah MOV DX,[BX][DI] untuk sebuah program yang ditulis pada assembler ASM Intel. Teks ini menggunakan bentuk yang pertama dalam semua contoh program, tetapi bentuk kedua dapat digunakan dalam banyak assembler, termasuk MASM dari Microsoft. lnstruksi-instruksi seperti MOV DI.[BX+DI] dapat dikompilasi, tetapi tidak dapat dieksekusi secara benar.

Penempatan Data Array Menggunakan Pengalamatan Basis-plus-indeks.Penggunaan utama dari mode pengalamatan basis-plus-indeks adalah untuk mengalamatkan elemen di dalam suatu array memori. Anggaplah bahwa elemen dalam array, yang terdapat di dalam segmen data pada lokasi memori ARRAY, harus diakses. Untuk menyelesaikan hal ini, isi register BX (basis) dengan alamat awal array, dan register DI (indeks) dengan bilangan elemen yang akan diakses. Gambar 3-9 memperlihatkan penggunaan BX dan DI untuk mengakses sebuah elemen dalam array data.

GAMBAR 38 Suatu contoh yang menunjukan bagaimana mode pengalamatan basis-plus-indeks berfungsi untuk instruksi MOV DX, [BX+DI]. Perhatikan bahwa alamat memori 02010H diakses karena DS = 0100H,BX = 100H, dan DI 0010H.

TABEL 36 Contoh pengalamatan basis-plus-indeks.

Bahasa Rakitan Ukuran OperasiMOV CX,[BX+DI]16-bit Menyalin isi word lokasi memori segmen data yang dialamatkan oleh BX ditambah DI ke dalam CXMOV CH,[BP+SI] 8-bitMenyalin isi byte dari lokasi memori segmen stack yang dialamatkan oleh BP ditambah SI ke dalam CHMOV [BX+SI],SP16-bit Menyalin SP ke lokasi segmen data yang dialamatkan oleh BX ditambah SI MOV [BP+DI],AH 8-bitMenyalin AH ke dalam lokasi memori segmen stack yang dialamatkan oleh BP ditambah DIMOV CL,[EDX+EDI]8-bitMenyalin isi byte dari lokasi memori segmen stack yang dialamatkan oleh EDX ditambah EDI ke dalam CLMOV [EAX+EBX],ECX32-bit Menyalin ECX ke dalam lokasi memori segmen data yang dialamatkan oleh EAX ditambah EBX

Sebuah program pendek, yang dicatat dalam Contoh 3-7, memindahkan array elemen 10H ke dalam array elemen 20H. Perhatikan bahwa bilangan elemen array, yang diisi ke dalam register DI, mengalamatkan elemen array. Juga perhatikan bagaimana isi ARRAY diinisialisasi sehingga elemen 10H berisi 29H.

GAMBAR 39 Sebuah contoh mode pengalamatan basis-plus-indeks. Di sini suatu elemen (DI) dari ARRAY (BX) dialamatkan.

CONTOH 37.MODEL SMALL0000. DATA;pilih model SMALL ;awal dari segmen DATA0000 0010[ARRAY DB 16 DUP (?);setup ARRAY00]

0010 29DB 29H;data sampel di elemen 10H0011 001E[DB 30 DUP (?)00]0000.CODE;awal dan segmen CODE.STARTUP;awal dan program0017BB 0000 RMOV BX,OFFSET ARRAY;alamati ARRAY001ABF 0010MOV DI,10H;alamati elemen 10H001D8A 01MOV AL, [BX+DI] ;dapatkan elemen 10H001F BF 0020 MOV DI, 20H;alamati elemen 20H002288 01MOV[BX+DI],AL;simpan di elemen 20H

.EXIT;keluar ke DOSEND;akhir file

Pengalamatan Register RelatifPengalamatan register relatif mirip dengan pengalamatan basis-plus-indeks dan pengalamatan displacement. Dalam pengalamatan register relatif, data dalam segmen memori dialamatkan dengan menambahkan displacement pada isi register basis atau register indeks (BP, BX, DI atau SI). Gambar 3-10 menggambarkan operasi instruksi MOV AX,[BX+1000H]. Dalam contoh ini, BX = 0l00H dan DS = 0200H, sehingga alamat

GAMBAR 310 Operasiinstruksi MOV AX,(BX +1000H), pada saat BX =0100H dan DS = 0200H.

yang dihasilkan adalah jumlah DS x 10H, BX, dan displacement 1000H atau total 03100H. Ingat bahwa BX, DI, atau SI mengalamatkan segmen data dan BP mengalamatkan segmen stack. Dalam 80386 dan versi di atasnya, displacement dapat berupa bilangan 32-bit dan register bisa register 32-bit yang manapun kecuali register ESP. Ingat bahwa ukuran panjang segmen mode real adalah 64K byte. Tabel 3-7 mencatat beberapa instruksi yang menggunakan pengalamatan register relatif.Displacement dapat berupa bilangan yang ditambah dengan isi register dalam [ ], seperti dalam instruksi MOV AL,[DI+2], atau dapat berupa displacement dikurangi dari isi register, seperti dalam instruksi MOV AL,[SI1]. Displacement juga dapat berupa alamat offset yang ada dalam [], seperti dalam MOV AL,[DI]. Kedua bentuk dari displacement juga dapat muncul secara simultan, seperti dalam instruksi MOV AL,DATA[DI+3]. Dalam semua kasus, kedua bentuk dari displacement ditambahkan dengan isi register basis atau isi register basis dan isi register indeks dalam [ ]. Dalam inikroprosesor 8086-80286, nilai displacement dibatasi sampai bilangan bertanda 16-bit dengan daerah nilai antara +32.767 (7FFFH) dan 32.768 (8000H); Dalam 80386 dan versi di atasnya, displacement 32-bit diijinkan dengan nilai antara +2.147.483.647 (7FFFFFFFH) dan 2.147.483.647 (80000000H).

TABEL 3-7 Contoh-contoh pengalamatan register relatif.

Bahasa RakitanUkuranOperasiMOV AX,[DI+100H]16-bitMenyalin isi word lokasi memori segmen data yang dialamatkan oleh DI ditambah 100H ke dalam AXMOV ARRAY[SI],BL8-bitMenyalin BL ke dalam lokasi memori segmen data yang dialamati oleh ARRAY ditambah SIMOV LIST[SI+2],CL8-bitMenyalin CL ke dalam Iokasi memori segmen data yang dialamati oleh jumlah dan LIST, SI, dan 2MOV DI,SET_IT[BX]16-bitMenyalin isi word lokasi memori segmen data yang dialamati oleh jumlah dan SET_IT dan BX ke dalam DIMOV DI,[EAX+10H]16-bitMenyalin isi word lokasi memori segmen data yang dialamati oleh jumlah dari EAX dan 10H ke dalam DIMOV ARRAY[EBX],EAX32-bitMemindahkan EAX ke dalam lokasi memori segmen data yang dialamati oleh jumlah dari ARRAY dan EBX

GAMBAR 3-11 Pengalamatan register relatif digunakan untuk mengalamatkan elemen ARRAY. Displacement mengalamatkan awal dari ARRAY, dan DI mengakses elemen.

Pengalamatan Data Array dengan Register Relatif. Data array dimungkinkan dengan pengalamatan register relatif, salah satunya seperti apa yang dilakukan oleh pengalamatan basis-plus-indeks. Dalam Gambar 3-1l, pengalamatan register relatif diilustrasikan dengan contoh yang sama dengan seperti pada pengalamatan basis-plus-indeks. Ini menunjukkan bagaimana displacement ARRAY ditambahkan pada register indeks DI untuk menghasilkan suatu referensi pada suatu elemen array.Contoh 3-8 menunjukkan bagaimana mode pengalamatan yang baru ini bisa memindahkan isi dari elemen array I0H ke dalam elemen array 20H. Perhatikan kemiripan antara contoh ini dan Contoh 3-7. Perbedaan utama adalah bahwa, dalam Contoh 3-8, register BX tidak digunakan untuk mengalamatkan area memori ARRAY; sebagai gantinya, ARRAY digunakan seperti sebuah displacement untuk menyelesaikan tugas yang sama.

CONTOH 3B.MODEL SMALL;pi1ih model SMALL 0000. DATA;awal dari segmen DATA0000 0010[ARRAY DB 16 DUP (?) ;setup ARRAY00]0010 29DB 29H;data sampel di elemen 10H0011 001E[DB 30 DUP (?)00]0000. CODE;awal dari segmen CODE .STARTUP;awal dari program0017 BF 0010MOV DI,10H;alamati elemen 10H001A 8A 85 0000 RMOV AL,ARRAY[DI];dapatkan elemen l0H001E BF 0020MOV DI,20H;alamati elemen 20H0021 88 85 0000 RMOV ARRAY[DI],AL;simpan di elemen 20H.EXIT ;keluar ke DOSEND;akhir file

Mode pengalamatan basis relatif-plus-indekMode pengalamatan basis relatif-plus-indek mirip dengan pengalamatan basik-plus indeks, namun selain menamhahkan isi suatu register base dan register indeks, juga rnenambahkan suatu displacement untuk menghasilkan alamat memori. Tipe mode pengalamatan ini sering digunakan untuk menangani array dua dimensi dan data memori. Pengalamatan Date dengan Basis Relatif-PIus-lndeks. Pengalamatan basis relative plus-indeks adalah mode pengalarnatan yang paling jarang digunakan. Gambar 3-12 menunjukkan bagaimana data ditunjukkan jika instruksi yang dieksekusi oleh mikroprosesor adalah MOV AX,LBX+S1+IOOH]. Displacement 100H ditamhah dan SI untuk membentuk alamal offset dalam segmen data. Register BX = 0020H. SI = 0010H. dan DS = l000H, sehingga alamat efektif untuk instruksi ini adalah 10130H-hasil penjumlahan register-register ini ditambah displacement 100H. Mode pengalamatan ini sangal kompleks untuk digunakan dalam suatu program, beberapa instruksi khusus dengan menggunakan pengalamatan basis relatif-plus-indeks tampak dalam Tabel 3-8. Perhatikan bahwa dengan 80386 dan versi di atasnya, alamat efektif dibangkitkan oleh penjumlahan dua regiser 32-bit ditambah displacement 32-bit.

OperasiMenyalin isi byte lokasi memori segmen data yang dialamatkan oleh jumlah BX, Dl, dan 20H ke dalam DHMenyalin isi word lokasi memori segmen data yang dialamatkan oleh jumlah FILE, BX, dan Dl ke dalam AXMenyalin CL ke dalam lokasi memori segmen data berukuran stack yang dialamatkan oleh jumlah LIST, BP, dan Dl.Menyalin DH ke dalam lokasi memori segmen data berukuran stack yang dialamatkan oleb jumlah LIST, BP, SI, dan 4Menyalin isi doubleword lokasi memori segmer data yang dialamatkan oleh jumlah FILE. EBX. ECX, dan 2 ke dalam AXUkuran8-bit16-bit8-bit8-bit32-bitBahasa RakitanMOV DH,[BX+DL+20H]MOV AX.FILE(BX+DI]MOV LIST[BP+DI],CLMOV LIST[BP+S1+4],DHMOV EAX,F1LE[EBX+ECX+2]TABEL 38 Contoh instruksi relatif-plus-indeks.

10131H10130H0020HArray registerESPEBPESIEAXEBXECXEDXA3161 6A 32 01 60 0A 3GAMBAR 3-12 Contoh penga -lamatan basis relatif-plus-indeks menggunakaninstruksi MOV AX,[BX+Sl+100H]Gatatan: DS 1000H.

10130H0130H0030H+++0 0 1 0

0010H

0100HDS x 10H10000H

pengalamatan Array dengan Basis Relatif-plus indeks, Misalkan bahwa suatu file dan banyak record ada dalam memori dan tiap record itu berisi banyak elemen. Displacement ini mcngalarnatkan file itu, register basis mengalamatkan suatu elemen record. Gambar 3-13 mengilustrasikan bentuk pengalamatan yang sangat kompleks inlContoh 3-9 merupakan suatu program yang akan menyalin elemen 0 dan record A ke dalam elemen 2 dari record C, dengan rnenggunakan mode pengalamatan basis relatif-plus-indeks. Contoh FILE ini mengandung empat record dan setiap record terdiri dan 10 elemen. Perhatikan bagaimana pernyataan THIS BYTE digunakan untuk mendefinisikan label FILE dan RECA sebagai lokasi memoni yang sama.

CONTOH 39 MODEL SMALL;model SMALL0000 DATA ;awal dari segmen DATA 0000 = 0000 FILE EQU THIS BYTE ;tetapkan FILE pada byte ini0000 000A [ RECA DB 10 DUP (?);cadangkan 10 byte untuk RECA 00]000A 000A [ RECB DB 10 DUP (?) ;cadangkan 10 byte untuk RECB00 ]0014 000A [ RECC DB 10 DUP (?) ;cadangkan 10 byte untuk RECC00 ]001E 000A [ RECD DB 10 DUP (?) ;cadangkan 10 byte untuk RECD00 ]0000.CODE ;awal dari Segmen CODE .STARTUP ;awal dan program0017 BB 0000 R MOV BX,OFFSET RECA ;alamati RECA 00IA BF0000 MOV DI,O ;alamati elemen 0 001D 8A 81 0000 R MOV AL,FILE[BX+DI] ;ambil data 0021 BB 0014 R MOV BX,OFFS RECC ;alamati RECC 0024 BF 0002 MOV DI,2 ;alamati elemen 2 0027 88 81 0000 R MOV FILE(BX.DI),AL ;simpan data EXIT ;keluar ke DOS END;akhir file

Pengalamatan Indeks-Berskala Pengalamatan indeks-berskala merupakan tipe mode pengalamatan data yang terakhir dibicarakan. Mode pengalamatan data inii adalah khusus untuk mikroprosesor 80386 sampai Pentiurn II. Pengalamatan indeks-berskala menggunakan dua register 32-bit (register basis dan register indeks) untuk mengakses memori. Register kedua (indeks) dikalikan dengan faktor skala. Faktor skalanva adalah 1X. 2X. 4X. atau 8X. Faktor skala 1X dinyatakan dan tidak perlu dimasukkan dalam instruksi bahasa rakitan (MOV AL,[EBX+ECX]). Faktor skala 2X digunakan untuk mengalamatkan array memori yang berukuran word, fakor skala 4X digunakan untuk mengalamatkan array memori yang berukuran doubleword, dan faktor skala 8X digunakan untuk mcngalamatkan array memori yang berukuran quadwordSebuah contoh instruksi adalah MOV AX,[EDI+2*ECX], Instruksi mi menggunakan faktor skala 2X, yang mengalikan isi ECX dengan 2 sebelum pcnambahan dengan isi register EDI untuk membentuk alamat memori. Jika ECX berisi 00000000H, elemen memori 0 yang berukuran word akan ditunjukkan: jika ECX berisi 00000001H, elemen memori 1 yang berukuran word akan diakses, dan seterusnya. ini mengimbangi indeks

ElemenREC CEDIEBXMemoriREC CREC BREC AFILEDisplacement

GAMBAR 3-13 PengelamatanBasis relatif-plus-indeks yangdigunakan untuk mengakses FILEyang berisi banyak record (REC).

(ECX) dengan faktor 2 pada array memori yang berukuran word. Lihat Tabel 3-9beberapa contoh pengalamatan indek-berskala. Seperti yang dapat Anda bayangkan sejumlah besar kombinasi register yang dialamatkan dengan indeks Penskalaan juga dipakai untuk instruksi-instruksi yang menggunakan satu register untuk memori alamat secara tidak 1angung. Contoh 3-10 memperlihatkan suatu urutan instruksi yang menggunakan pengekamatan indeks-berskala untuk rnengakses array data berukuran word yang disebut LIST. Perhatikan bahwa alamat offset LIST diisi ke dalam register EBX dengan MOV EBX,OFFSET LIST. Begitu EBX mengalamatkan array LIST. ditambahkan (ditempatkan dalarn ECX) dan array 2, 4, dan 7 selebar word, menggunakan faktor skala 2 untuk mengakses elemen. Program ini menyimpan 2 pada elemen 2 ke dalam element 4 dan 7. Juga perhatikan direktif .386 untuk merniiih mikroprosesor 80386. Direktif ini harus mengikuti pernyataan .MODEL pada assembler untuk memproses instruksi-instruksi 80386 pada DOS. Jika 80486 digunakan, maka direktif .486 muncul setelah pernyataan .MODEL; jika Pentiurn. Pentium Pro, atau Pentium II digunakan. maka direktif .586 akan muncul setelah MODEL. Jika direktif pemilihan mikroprosesor tampak sebelum peryataan MODEL. maka mikroprosesor mengeksekusi instruksi-instruksi dalam mode 32-bit, yang tidak kompatibel dengan DOS.

TABEL 39 Contoh-contoh pengalamatan indeks-berskalaBahasa Rakitan Ukuran Operasi MOV EAX,(EBX+4ECX]32-bit Menyalin isi doubleword lokasi memori segmen data yang dialamati oleh jumlah dan 4 kaIl ECX ditambah EBX ke dalam EAX MOV [EAX+2*EDI+100H),CX 16-bit Menyahn CX ke datam lokasi rnemori segmen dialamati oleh jumlah dari EAX, 100H dan 2 kali EDI .MOV AL,[EBP+2*ED-2] 8-bit Menyalin isi byte lokasi segmen stack yang dialamati dari jumlah EBR, -2, dan 2 kali EDI, ke dalam AL.MOV EAX,ARRAY[4*ECX] 32-bit Menyalin isi doubleword lokasi memori segrnen dialamati oleh jumlah dari ARRAY ditambah 4 kali ECX ke dalam EAX

CONTOH 3-10 .MODEL SMALL;pilih model SMALL .386 ;gunakan 803860000 .DATA ;awal dan segmen DATA0000 0000 0001 0002 LISPDW 0,1,2,3,4;tentukan array list 00030004 000A 0005 0006 0007DW 5,6,7,8,900080009 0000.CODE ;awal dan segmen CODE .STARTUP ;awal dari program 0010 66| BB 00000000 R MOV EBX,OFFSET L1ST;alamati array LIST0016 66| B9 00000002MOV ECX,2:ambil elemen 2001C 67& 8B 04 4B MOV AX, [EBX+2*ECX]0020 66| B9 00000004MOV ECX,4 ;simpan di elemen 40026 67& 89 04 4BMOV (EBX+2*ECX],AX002A 66| 89 00000007MOV ECX,7;simpan di elemen 7 0030 67& 89 04 4BMOV [EBX2*ECX],AX.EXIT;keluar ke DOS END ;akhir file

Struktur Data Struktur data digunakan untuk rnenetapkan bagaimana informasi disimpan dalarn array mernori dan akan sangat berguna untuk apliksi yang menggunakan array. Sangat baik untuk rnenganggap struktur data sebagai sebuah pola data. Awal dan strukrur diidentikasikan dengan direktif bahasa rakitan STRUC dan diakhiri dengan pernyataan ENDS. Suatu struktur data khusus didefinisikan dan digunakan tiga kali dalam. Contolh 3-11. Perhatikan bahwa nama dan struktur muncul dengan peryataan STRUC dan ENDS.

CONTOH 3-11:Definisikan struktur data INFO0057 INFO STRUC0000 0020 [ NAMES DB 32 DUP (?) ;32 byte untuk name 00 ]0020 0020 [ STREET DB 32 DUP (?) ;32 byte untuk street 00] 0040 0010 [ CITY DB 16 DUP (?) :16 byte untuk city 00] 0050 0002 [ STATE DB 2 DUP (7) :2 byte unruk state 00] 0052 0005 [ZIP DB 5 DUP (N ;5 byte untuk zip-code .00] INFOENDS 0000 42 6F 62 20 53 6DNAME1INFO 69 74 68 0017[ 00] 31 32 33 20 4D 61 69 6E 20 53 74 72 65 65 740011[00]57 61 6E 64 61000B[00]4F 48 34 34 340057 53 74 65 76 65 20 NAME2 INFO 44 6F 65 0017[00]32 32 32 20 4D6F 75 73 65 20 4C61 6E 65 0012[00]4D 69 6C 6C 6572000A[00] 50 41 31 38 31 30 3000AE 42 65 6E 20 44 6F NAME3 INFO 76 65 72 0017 [00 ]

33 30 33 20 4D 61 69 6E 20 53 74 72 65 65 740011[00] 4F 72 65 6E 64 65 72 0009[00]43 41 39 30 30 30 30

Struktur data dalam Contoh 3-11 mcndcfinisikan lima field informasi. Yang pertama panjangnya 32-byte dan menyimpan sebuah nama; yang kedua panjangnya 32 byte dan penyimpan alamat jalan: yang ketiga panjangnya 16 byte untuk kota: yang keempat panjangnya 2 byte untuk negara: yang kelima panjangnya 5 byte untuk kode Pos.sekali struktur didefinisikan (INFO). dapat diisi, seperti diilustrasikan, dengan nama dan alamat. Tiga conton dari penggunaan INFO telah diilustrasikan. Perhatikan bahwa kata demi kata dikelilingi dengan apostrophe dan seluruh field dikelilingi dengan simbo < > pada saat struktur data digunakan untuk ,mendefinisikan data.Pada saat data dialamatkan dalam struktur, gunakan nama struktur dan nama field untuk memilih field yang ada dalam struktur. Sebagai contoh, untuk mengalamatkan JALAN dalam NAMA2. gunakan operand NAMA2.JALAN, di mana nama struktur diikuti pertama kali oleh titik dan kemudian dengan nama field. Demikian juga, gunakan NAMA3.KOTA untuk merujuk ke kota dalam struktur NAMA3.

CONTOH 3-12;Hapus name di array NAME10000B9 0020MOV CX,320003 BO 00MOV AL,00005 BE 0000RMOV SI,OFFSET NAME1.NAME 0008 F3/AA REP STOSB:Hapus street di array NAMES2000AB9 0020MOV CX,32000DBO 00MOV AL,00010BE 0077RMOV SI,OFFSET NAME2.STREET 0013 F3/AA REP STOSB:Hapus Zip-code di array NAMES20015B9 0050MOV CX,50018BO 00MOV AL,0001ABE 0100RMOV SI,OFFSET NAME3.ZIP 0013 F3/AA REP STOSB

Urutan instruksi yang pendek tampak dalam Contoh 3-12 yang memperjelas field nama dalam struktur NAME1, field alamal dalarn struktur NAME2, dan field kode POS dalam sruktur NAME3. Fungsi dan operasi instruksi dalam program ini didefinisikan dalam bab berikutnya dalam teks. Anda dapat merujuk contoh ini pada saat instruksi instruksi ini dipelajari. 3-2.MODE PENGALAMATAN MEMORI PROGRAM.Mode pengalamatan memori program, yang digunakan dengan lnstriksi JMP dan CALL. terdiri, dari tiga bentuk yang berbeda: Langsung, relative, dan tidak langsung. Bagian ini menyajikan ketiga bentuk pengalamatan tersebut, dengan meoggunakan instruksi JMP untuk mengilustrasikan operasi ini.Pengalamatan Memori Program Langsung pengalamatan memori program langsung adalah apa yang digunakan oleh mikroprosesor untuk semua loncatan dan panggilannya. Pengalamatan memori program juga digunakan dalam bahasa tingkat tinggi, satunya seperti bahasa BASIC yaitu instruksi GOTO dan GOSUB. Mikroprosesor menggunakan bentuk pcngalamatan ini, tetapi tidak sesering menggunakan pengalamatan memori program relatif dan tidak langsung.Instruksi-instruksi untuk pengalamatan memogi program Iangsung menyimpan alamat dengan opcode. Misalnya, jika sebuah program akan meloncat (jump) ke lokasi memori 10000H untuk instruksi berikutnya, alamat (10000H) disimpan mengikuti opcode dalarn momori. Gambar 3-14 menunjukan instruksi JMP antar segmen secara langsung dan empat byte yang dibutuhkan untuk menyimpan alamat 10000H. Instruksi JMP ini mengisi CS dengan 1000H dan IP dengan 0000H untuk meloncat ke lokasi memori 10000H untuk instriksi berikutnya. (loncat antar segmen merupakan loncat ke lokasi memori.

1 0Segmen (Tinggi) Offset (Tinggi) 0 00 0Offset (Rendah) E AOpcode Segmen (Rendah) GAMBAR 3-14 Versi bahasa mesin 5-byte 0 0untuk instruksi JMP [10000H]

manapun dalam seluruh sistem memori). Loncat Iangsung sering disebut loacatan jauh karena dapat meloncat ke setiap lokasi mernori untuk instruksi berikutnya. Dalam mode real, loncat jauh mengakses setiap lokasi dalam memori 1M byte yang pertama dengan mengubah CS dan IP. Dalam operasi mode terlindung, loncat jauh mengakses deskripcor segmen kode yang baru dan Label deskniptor. mengijinkannya untuk loncatan ke setiap lokasi memori dalam seluruh memori 4G-byte pada rnikroprosesor 80386 sampai Pentium II.Satu-satunya instruksi lainnya yang menggunakan pengalamatan program langsung adalah instruksi CALL antar segmen atau jauh. Biasanya, nama alamat rnemori disebul label, mengacu pada suatu lokasi yang dipanggil atau diloncati ke bukan suatu alarnal numerik yang sebenarnya. Pada saat menggunakan label dengan instruksi CALL atau JMP, maka sebagian besar assembler memilih bentuk pengalarnatan program yang paling baik. Pengalamatan Memori Program RelatifPengalamatan memori program relatif tidak terdapat di dalam mikroproseso versi lama, namun tersedia pada kerabat mikroprosesor ini. Istilah relatif sebenamya berati relatif terhadap pointer instruksi (IP). Misalnya, jika suatu instruksi JMP akan melompati dua byte berikutnya, maka alarnat dalam hubungannya dengan penunjuk instruksi adalah yang ditambahkan ke penunjuk instruksi. flat ini mengembangkan alarnat instruksi program berikutnya. Contoh instruksi IMP relatif digambarkan pada Gambar 3-15. Perhatikan bahwa instruksi JMP adalah instruksi 1-byte, dengan displacement satu-byte atau dua-byte yang ditambahkan ke penunjuk instruksi. Displacement satu-byle digunakan dalam loncat pendek, dan displacement 2-byte digunakan dengan loncat dekat dan panggil. Kedua tipe tersebut dipentimbangkan menjadi loncat intra segmen. (loncatan intra segmen merupakan loncat ke mana saja dalam segmen kode saat ini.). Dalam 80386 dai versi di atasnya. displacement dapat juga bernilai 32-bit, dengan mengijinkan mereka untuk mcnggunakan pengalamatan retatif ke setiap lokasi dalam segmen kode 4G byte. Instruksi JMP dan CALL relatif berisi baik displacement 8-bit dan 16-bit. (Pada 80380 dan versi di atasnya mempunyai displacement 8-bit atau 32-bit.) Semua assembler Scara otomatis menghitumg jarak pada displacement dan rnemilih bentuk satu dua-,atau empat-byte yang tepat. Jika jaraknya terlalu besar untuk displacement dua byte dalam mikroprosesor 8086 sampai 80286, banyak assembler menggunakan JMP langsung. Displacement 8-bit (pendek) mcmpunyai jangkauan loncatan antara +127 da 128 byte dan instruksi berikutnya, sedangkan displacement 16-bit (dekat) rnempunyai jangkauan 32K byte. Dalam 80386 dan versi di atasnya. displacement 32-bit memungkinkan jangkauan 2G byte. Displacement 32-bit hanya dapat digunakan dalam mode tertindung. Pengalamatan Memori Program Tidak langsung Mikroproscsor mcmungkinkan beberapa bentuk pengalamatan memori program tidak langsung untuk instruksi JMP dan CALL. Tabel 3-10 mencatat beberapa instruksi jump tidak langsung dalam program yang bisa diterima yang menggunakan semua register 16-bit (AX. BX, CX, DX, SR, BP, Dl atau SI). Semua register relatif ([BP]. [BX], [DI],

JMP [2]1000 BEB100010210002-10003-10004GAMBAR 3-15 Instruksi JMP [2] melompati dua byte memori berikutnya yang mengikuti instruksi JMP.

JMP AXJMP CXJMP NEAR PTR [BX]JMP TAVBLE [BX]JMP ECXJMP ECXLompat ke lokasi segmen kode sekarang yang dialamati oleh isi dari AXLompat ke lokasi segmen kode sekarang yang dialamati oleh isi dari CXLompat ke lokasi segmen kode sekarang yang dialamati oleh isi dari lokasi memori segmen data yang dialamati oleh BXLompat ke lokasi segmen kode sekarang yang dialamati oleh isi dari lokasi memori segmen data yang dialamati oleh DI ditambah 2Lompat ke lokasi segmen kode sekarang yang dialamati oleh isi dari lokasi memori segmen data yang dialamati oleh TABLE ditambah BXLompat ke lokasi segmen kode sekarang yang dialamati oleh isi oleh ECXBahasa RakitanOperasi

GAMBAR 3-16 Tabel loncat yang TABLEDW LOC0menyimpan alamat dan beraneka DW LOC1ragam program. Alamat sebenamya DW LOC2dipdih dan TABLE yang ditentukan DW LOC3o4eh indeks yang disiinpan dengan instruksl loncat.

atau [SI]; dan sernua register relatif dengan displacement. Dalarn 80386 dan versi diatasnya, register 32-bit dapat juga digunakan untuk menyimpan alamat atau alamat tidak langsung dan JMP atau CALL relatif. Sebagai contoh, JMP EAX meloncat ke alamat lokasi yang ada dalam regiter EAX.Jika register 16-bit menyimpan alarnat instruksi JMP, maka loncatnya dekat. Sebagai contoh, jika register BX berisi 1000H dan instnsksi JMP BX dieksekui, maka rnikroprosesor meloncat ke alamat offset J000H dalarn scgmen kode saat ini. Jika register relatif menyimpan alamat,Ioncatnya juga dapat dipertimbangkan sebagai loncat tidak langsung. Sebagai contoh, JMP [BX] mengacu pada lokasi memori dalam segrnen data pada alamat offset yang diisi dalam BX . Pada alamat offset mi adalah bilangan 16-bit yang digunakan sebagai alamat offset dalam loncat antara segmen. Tipe loncat ini kadang-kadang disebut loncat tidak, langsug-tidak langsung atau loncat tidak Ian gung-ganda.

Gambar 3-16 menunjukkan suatu tabel Ioncat yang disimpan, rnulai pada lokasi memori TABEL. Tabel ini diacukan oleh program pendek yang digambarkan pada Contoh 3-13. Dalam contoh ini, register BX disi dengan 4, sehingga pada saat menggabungkannya dalam instrusi JMP TABLE [BX] dengan TABEL, alamat efektif adalah isi dan alamat kedua dalam tabel loncat. CONTOH 3-13;memakai pengalamatan taklangsung untuk suatu;loncatan;0000 BB 004MOV BX,4;alamat LOC20003 FF A7 23A1 RJMP TABLE [BX];lompat ke LOC 1

MODE PENGALAMATAN MEMORI STACK Stack memegang peranan yang penting dalarn sernua rnikroprosesor. menampung data sementara dan menyimpan alamat untuk kembali ke prosedur. Memori stack adalah memori LIFO (last-in. first-out = masuk terakhir. keluar pertama) yang menggambarkan cara data disimpan dan dihapus dan stack. Data ditempatkan pada stack dengan intruksi PUSH dan dihapus dengan Instruksi POP, Instruksi CALL juga menggunakan stack untuk menyirnpan alamat kernbali prosedur dan instruksi RET (kembali) untuk menghapus alamat kembali dari stack.Memori stack dipelihara oleh dua register. stack pointer (SP atau ESP) dan stack segment register (SS). Bila suatu data word dipaksakan masuk ke stack [lihat Gambar 3-17(a)], 8-bit orde-tinggi ditempatkan dalam lokasi yang dialamatkan oleh SP-1. 8-bit orde rendah ditempatkan pada lokasi yang dialamatkan oleh SP-2. SP kemudian dikurangi oleh dua sehingga data word berikutnya disimpan dalam lokasi memori stack yang tersedia berikutnya. Register SP/ESP selalu menunjuk pada daerah memori yang terletak di dalam segmen stack. Register SP/ESP selalu ditambahkan pada SS x 10H untuk membentuk alamat memori stack dalam mode real. Dalam operesi mode terlindung, register SS menyimpan selektor yang mengakses deskriptor untuk alamal basis dari segmen stack.Blila data dimunculkan dan stack (lihat Gambar 3-17(b), 8 bit orde-rendah dihilangkan dari lokasi yang ditunjuk oleh SR. 8 bit orde-tinggi dihilangkan dari lokasi yang ditunjuk oleh SP+1. Register SP kernudian ditambah dengan 2. Tabel 3-11 mencatat beberapa instruksi PUSH dan POP yang terdapat dalam mikroprosesor. Perhatikan bahwa PUSH dun POP sealu menyimpan atau mencari kembali data word-bukan byte-dalarn mikroprosesor 8086 sampai 80286. 80386 dan versi di atasnya mengijinkan word dan

+1 23 41 2 3 41 23 4EAXEBXECXEDXESPSS x 10H(a)Array registerMemori

+1 2 3 41 23 4EAXEBXECXEDXESPSS x 10H(b)Array register1 23 4Memori

GAMBAR 3-17 Instruksi PUSH dan POP. (a) PUSH BX menempatkan isi BX ke dalam stack, (b) POP CX menghapus data dari stack dan menempatkannya ke dalam CX. Kedua instruksi diperlihatkan setelah eksekusi.

Memindahkan word dari stack dan menempatkannya ke flag Memindahkan doubleword dan stack dan menempatkannya ke register EFLAG Menyalin flag ke stack Menyalin register EFLAG ke stack Menyalin AX ke stack Memindahkan word dan stack dan menempatkannya ke dalarn BX Menyalin DS ke stack Menyalin 1234H ke stack Instruksi ilegal Menyalin word dari lokasi memori segmen data yang dialamatkan oleh BX ke dalam stack Menyalin isi word dan AX, CX, DX.BX. SP, BP, DI. Ian SI ke stack Memindahkan data dan stack dan menempatkannya ke dalam SI, DI, BP, SP, BX, DX, CX, dan AX Menyalin isi doubleword dari EAX, ECX, EDX, EBX, ESP, EBP, EDI dan ESI ke stack Memindahkan data dari stack dan rnenempatkannya ke dalam ESI, EDI, EBP, ESP, EBX, EDX, ECX, dan EAX Memindahkan data dari stack dan rnenempatkannya ke dalam EAX Menyalin EDI Ice stack Bahasa RakitanOperasi POPF POPFD

PUSHF PUSHFD PUSH AX POP BX

PUSH DS PUSH 1234H POP CSPUSH WORD PTR[BX] PUSHA POPA

PUSHAD

POPAD

POP EAX PUSH EDI

doubleword dipindahkan ke dan dari stack. Data dapat dirnasukkan ke dalam stack dan setiap regicter 16-bit atau register segmen: dalam X0386 dan versi di atasnya. dan setiap register 32-bit, Data dapat dikeluarkan dan stack ke dalam setiap register 16-bit atau setiap register segmen kecuali CS. Alisan bahwa data tidak dapat dikeluarkan dan stack ke dalam Cs adalah bahwa hal ini hanya mengubah bagian alarnat dan instruksi berikutnya. lnstruksi PUSHA dan POPA merupakan instruksi masukan atau mengambil sernua isi register, kecuali register segmen dalam stack. lnstruksi ini tidak tersedia dalam mikroprosesor 8086/8088 larna. lnstruksi push segera juga baru ada di mikroprosesor 80286 sampal Pentium, Perhatikan contoh-contoh dalam Tabel 3-11 yang memperlihatkan urutan register yang dipindahkan dengan instruksi PUSHA dan POPA. 80386 dan versi di atasnya juga mengijinkan isi recister 32-bit dirnasukkan atau dikeluarkan dari stack. Contoh 3-14 mencatat suaru program pendek yang memasukkan isi AX. BX. dan CX ke dalam stack. POP yang pertama mencari kembali nilai yang dimasukkan ke dalarn stack dan CX dan rnenempatkannya ke dalam AX. POP yang kedua menempatkan nilai asli dari BX ke dalain CX. POP yang terathir menernpakan nilai asli dan AX ke dalarn RX, CONTOH 3-14 MODEL TINY:PILIH MODEL0000 CODE;awal segmen code STARTUP0100 B81000MOV AX,1000H;muati data uji

0103 BB 2000 MOV BX,2000H

0106 B9 3000 MOV CX,3000H010950PUSH AX;1000H ke stack010A53PUSH BX;2000H ke stack010B51PUSH CX;3000H ke stack010C58POP AX;3000H ke AX010D59POP CX;2000H ke CX010C5BPOP BX;1000H ke BX.EXIT;keluar ke DOS;akhir file

RINGKASAN

1. Mode pengalamatan data mencakup pengalamatan register, segera, langsung, register tidak langsung, basis-plus-indeks, registerrelatif dan basis relative-plus-indeks. Dalam mikroprosesor 80386 sampai Pentium II, mode pengalamatan tambahannya adalah pengalamatan indeks- berskala.2. Mode pengalamatan memori program mencakup pengalamatan langsung, relative dan tidak langsung.3. Table 3-12 mencatat semua mode pengalamatan data mode real yang terdapat di dalam mikroprosesor 8086 sampai 80286. Perhatikan bahwa 80386 dan versi di atasnya menggunakan mode ini, ditambah banyak lagi yang didefinisikan didalam bab ini. Dalam mode terlindung, fungsi register segmen adlah untuk pengalamatkan pendeskripsi yang beralamat basis dari segmen memori.4. Mikroprosesor 80386, 80486, Pentium, Pentium Pro dan Pentium II mempunyai mempunyai mode pengalamatan tambahan yang memungkinkan register 32-bit EAX, EBX, ECX, EDX, EBP, EDI, dan ESI untuk mengalamatkan memori. Meskipun mode pengalamatan ini sangat banyak untuk dapat dicatat dalam bentuk tabular, pada umumnya, setiap register ini berfungsi dengan cara yang sama dalam table 3-12. sebagai contoh, MOV AL, TABLE[EBX+2*ECX+10H] merupakan mode pengalamatan yang sah pada mikroprosesor 80386/ 80486/Pentium II.5. Instruksi MOV menyalin isi dari operand sumber ke operand tujuannya. Sumber tidak pernah berubah pada setiap instruksi.6. pengalamatn register menguraikan setiap register 8-bit (AH, AL, BH, BL, CH, CL, DH atau DL), atau setiap register 16-bit (AX, BX, CX, DX, SP, BP, SI, atau DI). Rwgister segmen (CS,DS,SS atau ES) juga dapat dialamatkan untuk memindahkan data antara register segmendan register/lokasi memori 16 bit atau untuk PUSH dan POP. Dalam mikroprosesor 80386 sampai Pentium II, register extended 32-bit juga digunakan untuk pengalamatan register; mereka terdiri dari EAX, EBX, ECX, EDX, EBP, EDI, dan ESI. Juga tersedia register segmen FS dan GS pada mikroprosesor 80386 dan versi di atasnya.7. Instruksi segera MOV memindahkan data yang berukuran byte atau word yang secara langsung mengikuti opcode ke dalam register atau lokasi memori. Pengalamatan segera memanipulasi data konstan dalam program. Dalam 80386 dan versi di atasnya, data segera yang berukuran doubleword dapat juga dimuat ke dalam register 32-byte atau lokasi memori.8. Pernyataan .MODEL digunakan dengan bahasa rakitan untuk mengidentifikasikan awal file dan tipe model memori yang digunakan dengan file. Jika ukurannya TINY,, program mempunyai satu segmen, yaitu segmen kode yang dikompilasi seperti program perintah (.COM). Jika model SMALL digunakan, maka program mengguanaka segmen kode dan data, dan mengkomplikasi sebagai program ekskusi (.EXE). ukuran model dan atributnya yang laian ada di dalam lampiran A.

TABEL 3-12 contoh mode pengalamatan data mode real.Bahasa RakitanOperasi

MOV AL,BLMOV AX,BXMOV EAX,ECXMOV DS,CXMOV AL,LISTMOV CH,DATA1MOV ES,DATA2MOV AL,12MOV AL,[BP]MOV AL,[BX]MOV AL,[DI]MOV AL,[SI]MOV AL,[BP+2]MOV AL,[BX-4]MOV AL,[DI+1000H]MOV AL,[SI+300]MOV AL,LIST[BP]MOV AL,LIST[BX]MOV AL,LIST[DI]MOV AL,LIST[SI]MOV AL,LIST[BP+2]MOV AL,LIST[BX-6]MOV AL,LIST[DI+100H]MOV AL,LIST[SI+200H]MOV AL,[BP+DI]MOV AL,[BP+SI]MOV AL,[BX+DI]MOV AL,[BX+SI]MOV AL,[BP+DI+4]MOV AL,[BP+SI-8]MOV AL,[BX+DI+10H]MOV AL,[BX+SI-10H]MOV AL,LIST[BP+DI]MOV AL,LIST[BP+SI]MOV AL,LIST[BX+DI]MOV AL,LIST[BX+SI]MOV AL,LIST[BP+DI+2]MOV AL,LIST[BP+SI-7]MOV AL,LIST[BX+DI+3]MOV AL,LIST[BX+SI-2]Pengalamatan register 8-bitPengalamatan register 16-bitPengalamatan register 32-bitPengalamatan register segmen(DSx10H)+LIST(DSx10H)+DATA1(DSx10H)+DATA2Data segera 12H(SSx10H)+BP(DSx10H)+BX(DSx10H)+DI(DSx10H)+SI(SSx10H)+BP+2(DSx10H)+BX-4(DSx10H)+DI+1000H(DSx10H)+SI+300H(SSx10H)+LIST+BP(DSx10H)+LIST+BX(DSx10H)+LIST+DI(DSx10H)+LIST+SI(SSx10H)+LIST+BP+2(DSx10H)+LIST+BX-6(DSx10H)+LIST+DI+100H(DSx10H)+LIST+SI+200H(SSx10H)+BP+DI(DSx10H)+BP+SI(DSx10H)+BX+DI(DSx10H)+BX+SI(SSx10H)+BP+DI+4(DSx10H)+BP+SI-8(DSx10H)+BX+DI+10H(DSx10H)+BX+DI-10H(SSx10H)+LIST+BP+DI(SSx10H)+LIST+BP+SI(DSx10H)+LIST+BX+DI(DSx10H)+LIST+BX+SI(SSx10H)+LIST+BP+DI+2(SSx10H)+LIST+BP+SI-7(DSx10H)+LIST+BX+DI+3(DSx10H)+LIST+BX+SI-2

9. Pengalamatan data langsung terjadi dalam dua bentuk pada mikroprosesor. (1) pengalamatan langsung dan (2) pengalamatan displacement. Kedua bentuk pengalamatan identik kecuali bahwa pengalamatan langsung digunakan untuk memindahkan data antara EAX, AX, atau AL dan memori; pengalamatan displacement digunakan pada setiap pemindahan register-memori.memerlukan tiga byte memori, sedangkan pengalamatan displacement memerlukan empat byte. Perhatikan beberapa instruksi ini pada 80386 dan versi diatasnya memerlukan byte tambahan dalam bentuk awalan (prefiks) untuk ukuran register dan operand.10. Pengalamatan register tidak langsung memungkinkan data dialamatkan pada lokasi memori yang ditunjukkan baik oleh register basis (BP dan BX) maupun register indeks (DI dan SI). Dalam 80386 dan versi diatasnya, register 32-bit EAX, EBX, ECX, EDX, EBP, EDI, dan ESI digunakan untuk mengalamatkan data memori.11. Pengalamatan basis-plus-indeks sering digunakan untuk mengalamatkan data dalam suatu array.Alamat memori untuk mode ini dibentuk dengan menambahkan register basis, register indeks, dan isi register segmen dikali 10H.Dalam 80386 dan versi diatasnya, register basis dan register indeks bisa berupa setiap register 32-bit kecuali EIP dan ESP.12. Pengalamatan register relative menggunakan baik register basis maupun register indeks ditambah displacement untuk mengakses data memori.13. Pengalamatan basis relative-plus-indeks digunakan untuk mengalamatkan data didalam array dua dimensi. Alamat ini dibentuk dengan menambahkan register basis, register indeks, displacement, dan isi register segmen dikali 10H.14. Pengalamatan indeks-berskala adalah keunikan mikroposesor 80386 sampai Pentium II. Register kedua dari dua register (indeks) disklakan dengan faktor 2X, 4X, atau 8X untuk mengakses data word, doubleword, atau quadword dalam array memori. MOV AX, [EBX+2*ECX] dan MOV [4*ECX], EDX merupakan contoh-contoh dari instruksi indeks-berskala.15. Struktur data merupakan pola untuk penyimpanan array data dan dialamatkan oleh nama array dan field. Sebagai contoh, array NUMBER dan field TEN dari array NUMBER dialamatkan sebagai NUMBER.TEN. 16. Pengalamatan memori program langsung dimungkinkan dengan instruksi JMP dan CALL ke setiap lokasi dalam sistem memori. Dengan mode pengalamatan ini, alamat offset dan alamat segmen disimpan dengan instruksi.17. Pengalamatan program relatif memungkinkan instruksi JMP atau CALL untuk mencabang ke depan atau ke belakang dalam segmen kode saat ini hingga lebih dari 32 K byte. Dalam 80386 dan versi diatasnya, displacement 32-bit memungkinkan percabangan ke setiap lokasi dalam segmen kode saat ini dengan menggunakan nilai displacement 2 G byte. Displacement 32-bit hanya dapat digunakan dalam mode terlindung.18. pengalamatan program tidak langsung memungkinkan instruksi JMP dan CALL untuk mengalamatkan bagian program atau subrutin lainnya secara tidak langsung melalui suatu register atau lokasi memori.19. Instruksi PUSH dan POP memindahkan data word antara stack dan register atau lokasi memori. Instruksi PUSH segera tersedia untuk menempatkan data segera ke dalam stack. Instruksi PUSHA dan POPA memindahkan AX, CX, DX, BX, BP, SP, SI, dan DI antara stack dan register ini. Dalam mikroposesor 80386 dan diatasnya, register extended 32-bit dan flag extended dpat juga dipindahkan antara register dan stack. PUSHFD menyimpan EFLAGS, sedangkan PUSHF menyimpan FLAGS.20. Contoh 3-15 memperlihatkan banyak mode pengalamatanyang dijelaskan dalam bab ini. Contoh program dibawah mengisi ARRAY1 dari lokasi 0000:00000000:0009. Program ini kemudian mengisi ARRAY2-0 sampai 9. Akhirnya, program itu mengubah isi ARRAY1 elemen 2 dengan ARRAY2 elemen 3.

CONTOH 3-15

0000MODEL SMALL; pilih model SMALLDATA; awal segmen DATA

0000 000A [ ARRAY1 DB 10 DUP (?); cadangan untuk ARRAY100 ]0000 000A [ ARRAY2 DB 10 DUP (?); cadangan untuk ARRAY2 00 ]0000 CODE; awal segmen CODESTARTUP; awal program

0017B8 0000MOVAX, 0;segmen ES 0000H001A8E C0MOV ES, AX

001CBF0000MOVDI, 0; alamati elemen 0001FB9000AMOVCX, 10; penghitungan 100022LAB1:002226 : 8A 05MOVAL, ES: [DI]; salin data002588 85 0000 RMOVARRAY1[DI]; ke ARRAY1002947INCDI002AE2 F6LOOPLAB1

002CBF0000MOVDI, 0; alamati elemen 0002FB9000AMOVCX, 10; penghitungan 100032B000MOVAL, 0; nilai awal0034LAB2:

003488 85 000A RMOVARRAY2[DI], AL; isi ARRAY20038FE C0INCAL003A47INCDI003BE2 F7LOOPLAB2

003DBF 0003MOVDI, 3; pertukaran data array00408A 85 0000 RMOVAL, ARRAY1[DI]00448A A5 000B RMOVAH, ARRAY2[DI+1]004888 A5 0000 RMOVARRAY1 [DI], AH004C88 85 000B RMOVARRAY2 [DI+1], ALEXIT; keluar ke DOSEND; akhir file

PERTANYAAN DAN SOAL

1. Apa yang dilakukan oleh instruksi MOV berikut ini?(a) MOV AX, BX(b) MOV BX, AX(c) MOV ESP, EBP(d) MOV AX,CS2. Sebutkan register 8-bit yang digunakan untuk pengalamatan register.3. Sebutkan register 16-bit yang digunakan untuk pengalamatan register.4. Sebutkan register 32-bit yang digunakan untuk pengalamatan register pada mikroposesor 80386 sampai Pentium II.5. Sebutkan register segmen 16-bit yang digunakan dalam pengamatan register oleh MOV, PUSH, dan POP.6. Apa yang tidak beres dengan instruksi MOV BL, CX.7. Apa yang tidak beres dengan instruksi MOV DS, SS?8. Pilihlah sebuah instruksi untuk setiap tugas ini:a) Salin EBX ke dalam EDXb) Salin BL ke dalam CLc) Salin SI ke dalam BXd) Salin DS ke dalam AXe) Salin AL ke dalam AH9. Pilihlah sebuah instruksi untuk setiap tugas berikut ini :a) pindahkan 12 H ke balam ALb) pindahkan 123Ah kedalam Axc) pindahkan 0CDH kedalam Cld) pindahkan 1000H kedalam Sie) pindahkan 1200A2h kedalam EBX21. Symbol khusus apa yang kadang kadang menandai data segera?22. Apa kegunaan dari pernyataan .MODEL TINY?23. Direktif bahasa rakitan apa yang menunjukkan awal segmen CODE?24. Apa yang dimaksud dengan label?25. Intruksi MOV ditempatkan dalam field pernyataan apa?26. Label boleh diawali dengan model apa?27. Apa kegunaan dari direktif .EXIT?28. Apakah pernyataan dari .MODEL TINY menyebabkan suatu program untuk mengkompilasi suatu program eksekusi?29. Tugas apa yang dikerjakan direktif. STARTUP dalam model memori kecil?30. Apa itu displacement? Bagai mana displacemen menentukan alamat memori dalam intrupsi MOV[2000H], AL?31. Apa yang ditunjukkan oleh symbol [ ]?32. Misalkan DS=0200H. BX=0300H, dan DI=400H. tentukan memori yang diakses oleh setiap intrupsi berikut ini, dengan asumsi operasi mode real: a) MOV AL, [1234H]b) MOV EAX, [BX]c) MOV [DI], AL22. Apa yang tidak beres dengan instruksi MOV [BX], [DI]?23. Pilihlah suatu instruksi yang memerlukan BYTE PTR?24. Pilihlah suatu instruksi yang memerlukan WORD PTR?25. Pilihlah suatu instruksi yang memerlukan DWORD PTR?26. Jelaskan perbedaa antara instruksi MOV BX, DATA dan instruksi MOV BX, OFFSET DATA?27. Misalkan bahwa DS = 1000H, SS = 2000H, BP = 1000H, dan DI = 0100H. tentukan alamat memori yang diakses oleh setiap instruksi berikut ini, dengan asumsi operasi mode real:a) MOV AL, [BP+DI]b) MOV CX,[DI]c) MOV EDX,[BP]28. Apa yang tidak bers dengan instruksi MOV AL,[BX]SI]?29. Misalkan bahwa DS = 1200H, BX = 0100H dan SI = 0250H. tentukan alamat yang diakses oleh setiap instruksi berikut ini, dengan asumsi operasi mode real:a) MOV [100H],DLb) MOV [SI+100H],EAXc) MOV DL,[BX+100H]30. Misalkan bahwa DS = 1100H, BX = 0200H, LIST = 0250H dan SI = 0500H. tentukan alamat yang diakses oleh setiap instruksi berikut ini, dengan asumsi operasi mode real:a) MOV LIST[S],EDXb) MOV CL, LIST [BX+SI]c) MOV CH,[BX+SI]31. Misalkan bahwa DS = 1300H, SS = 1400H dan BP = 1500H, dan SI = 0100H. tentukan alamat yang diakses oleh setiap instruksi berikut ini, dengan asumsi operasi mode real:a) MOV EAX [BP+200H]b) MOV AL,[BP+SI-200H]c) MOV AL,[SI-0100H]32. Register basis mana yang mengalamat kan data dalam segmen stack?33. Misalkan bahwa EAX = 00001000H, EBX = 00002000H dan DS = 0010H. tentukan alamat yang diakses oleh setiap instruksi berikut ini, dengan asumsi operasi mode real:a) MOV EAX, [EAX+EBX]b) MOV [EAX+2*EBX],CLc) MOV DH,[EBX+4*EAX+1000H]34. Kembangkan struktur data yang mempunyai lima field dari satu word yang setiap fieldnya dinamakan FI, F2, F3, F4, dan F5 dengan nama struktur FIELDS.35. Perlihatkan bagaimana field F3 dari struktur data yang dibentuk dalam pertanyaan 4 dialamatkan dalam suatu program.36. Sebutkan 3 mode pengalamatan memori program.37. Berapa banyak byte memori untuk menyimpan suatu instuksi JMP jauh langsung? Apa yang disimpan didalam setiap byte?38. Apa perbedaan antara loncat (jump) antarsegmen dan intrasegmen?39. Jika loncat dekat (near jump) menggunakan displacement 16 bit bertanda, bagaimana dapat meloncat kesetiap lokasi memori dalam segment code saat ini?40. 80386 dan versi diatasnya menggunakan displacement -bit umtuk loncat kesetiap lokasi dalam segment code byte 4G. 41. Apa yang dimaksud dengan loncat jauh (far jump)?42. Jika instruksi JMP disimpan pada lokasi memori 100H dalam segment code saat ini, maka akan menjadi loncat jika loncat ke lokasi memori 200H dalam segmen code saat ini.43. Tunjukka interupsi JMP yang mana (pendek, deket atau jauh) yang terbentuk, jika interupsi JMP THERE disimpan didalam alamat memori 10000H dan alamat THERE adalah :a) 10020H.b) 11000Hc) 0FFFEHd) 30000H44. Buatlah sebuah instruksi JMP yang akan melompat ke alamat yang ditunjukkan oleh register BX.