Selasa, 21 Juni 2011

MODE PENGALAMATAN


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