MODE PENGALAMATAN
Kumpulan intruksi intel menyediakan cara yang bervariasi untuk menemukan lokasi memori. Cara cara ini disebut mode pengalamatan. Cara ini dapat memudahkan pemrosesan list dan untuk mengacu struktur data yang komplek. Juga, compile bahasa tingkat tinggi memerlukannya untuk membuat intruksi mesin yang lebih sedikit ketika set intruksi CPU menggunakan cara yang baik dalam pengacuan data.
Terdapat lima mode pengalamatan, ditunjukan dalam table mode pengalamatan dibawah. Dalam table, displacement berupa angka atau offset variable. Effective address operand mengacu pada offset (jarak) data dari awal segmen. BX dan BP adalah register basis, dan SI serta DI adalah register index. Setiap contoh berikut mengacu pada isi memori pada alamat efektif.
Mode | Contoh | Keterangan |
Direct | Op l bytelist [200] | Alamat efektif adalah displacement |
Register Indirect | [bx] [si] [di] | EA adalah isi basis atau index |
Based or Indexed | List [bx] [si+list] [bp+4] List [di] [bp-2] | EA adalah penjumlahan register basi atau index dengan displacement |
Base - indexed | [bx+si] [bx][di] [bp-di] | EA adalah penjumlahan register basis dan register index |
Base – indexed with displacement | [bx+si+2] List [bx+si] List [bx][si] | EA adalah penjumlahan register basis, register index dan displacement |
Table Mode Pengalamatan
Ø Operand register
Operand register mungkin berupa register 8 atau 16 bit. Secara umum,mode pengalaman register adalah paling efisien karena register adalah bagian dari CPU dan tidak memerlukan pengaksesan memori. Beberapa contoh menggunakan instruksi MOV sebagai berikut:
mov ax,bx
mov cl,al
mov si,ax
Ø Operand Immedite
Operand immediate adalah ekspresi konstan, seperti angka, karakter atau ekspresi aritermetik. Assembler harus menentukan nilai operand immediate pada waktu assembly. Nilainya disisipkan langsung kedalam intruksi mesin. Contoh operand immediate ditunjukan sebagai berikut. Contoh terakhir, (2+3)/5, adalah ekspresi yang dievaluasi pada saat assembly.
Contoh | Ukuran (bit) |
10 ‘A’ ‘AB’ 65535 (2+3)/5 | 8 8 16 16 8 |
Ø Operand Direct
Operand Direct mengacu pada isi memori offset variable. Assembler menjaga nilai offset setiap label, membuatnya memungkinkan untuk menghitung alamat efektif operand direct. Pada contoh, isi memori pada lokasi count dipindah ke AL:
Count db 20
…
…
Mov al, count ; AL= 20
Ø Operand Offset
Ketika diperlukan pemindahan offset label kedalam register atau variable, digunakan operator offset. Oleh karena assembler mengetahui offset setiap label sebagai program yang sedang di-assembly maka mudah untuk menggantikan nilai offset ke dalam intruksi. Misalkan, offset variable a word dalam contoh berikut adalah 0200h; intruksi MOV akan memindahkan 200h ke dalam BX langsung:
aWord dw 1234
…
Mov bx, offset a Word
Ø Operand tidak langsung
Jika offset variable yang ditempatkan dalam register atau variable, untuk variable yang mengandung element tunggal, dia akan mempunyai nilai yang kecil; tetapi untuk daftar item, pointer mungkin akan ditambah untuk menunjuk setiap elemen.
Ø Based dan Indexed Operand
Operand basis dan indekx pada dasrnya sama; register ditambahkan pada displacement untuk mendapatkan alamat efektif. Register yang dipakai harus SI, DI, BX dan BP. Displacement adalah angka atau label yang offsetnya diketahui pada waktu assembly. Notasi mungkin dalam bentuk yang sama:
Register ditambahkan ke offset:
Mov dx, array[bx]
Mov dx, [di+array]
Mov dx, [array+si]
Register ditambahkan konstan :
Mov ax, [bp+2]
Mov dl, [di-2]
Mov dx, 2[si]
Ø Base-indexed Operand
Alamat efektif operand dibangun oleh penggabungan register basis dengan register index. Misalkan BX=2002h dan SI=6. Intruksi berikut akan menghitung alamat efektif 208h:
Mov al, [bx+si]
Teknik ini sering berguna untuk array dua dimensi, dimana BX dapat menunjuk offset baris dan SI offset kolom. Contoh berikut, alamat efektif yang dibangun oleh [bx+si] adalah 0157:
CODE :
Array db 10, 20, 30, 40, 50
Db 60, 70, 80, 90, A0
Db B0, C0, D0, E0, F0
….
Mov bx, offset array ; menunjuk pada array (0150)
Add bx, 5 ; memilih baris kedua
Mov si, 2 ; memilih kolom ke tiga
Mov al, [bx+si] ;mengambil nilai pada alamat efektif 0157
Ilustrasi
0150
10 | 20 | 30 | 40 | 50 | 60 | 70 | 80 | 90 | … | … | … |
[BX] [SI]
Ø Base-indexed dengan displacement
Alamat efektif operand dibangun dengan menggabungkan register basis, register index dan displacement. Contohnya sebagai berikut:
Mov dx, array [bx] [si]
Mov ax, [bx+si+array]
Add dl, [bx+si+3}
Sub cx, array [bp+si]
Ø Penjumlahan serangkaian bilangan
Contoh program berikut menunjukan bagaimana bermacam macam mode pengalamatan bisa digunakan ketika mengakses elemen sebuah array. Array berada pada offset 150, dan hasil penjumlahan akan disimpan pada offset 153. Program berikut mungkin di assemble dan dijalankan dalam Debug.
A 150
Db 10, 20, 30, 0
…
A 100
Mov bx, 150
Mov si, 2
Mov al, [bx]
Add al, [bx+1]
Add al, [bx+si]
Mov [153], al
Int 20
t
.
.
D 150, 153
Tidak ada komentar:
Posting Komentar