Anda di halaman 1dari 4

MODE PENGALAMATAN

MODE PENGALAMATAN

1. Immediate Addressing (Pengalamatan Segera)


Suatu proses penyalinan data yang berukuran byte atau word langsung ke
dalam register tujuan. Data yang dimaksud di sini adalah suatu nilai atau bilangan
tertentu atau bisa juga berupa sebuah konstanta (didefinisikan dengan instruksi
EQU). Perlu dicatat bahwa data segera merupakan data konstan, sedangkan data
yang dipindahkan dari register adalah data berubah (variable).
Contoh :
MOV AL,11h menyalin bilangan 11h ke dalam register AL
MOV AX,1234h menyalin 1234h ke dalam register AX
A EQU 25h mendefinisikan konstanta A
MOV AX,A menyalin 25h ke dalam register AX
Huruf ‘h’ ditambahkan dibelakang bilangan untuk menunjukkan bahwa itu
adalah bilangan heksadesimal (bedakan dengan penulisan angka di debug). Ketika
bilangan heksadesimal dimulai dengan suatu huruf, assembler memerlukan data
yang dimulai dengan angka ‘0’, jika tidak (diberi angka ‘0’) maka assembler akan
menganggap bilangan tersebut sebagai variable, jadi kompiler akan mengeluarkan
pesan kesalahan.
Contoh :
MOV AX,FFh contoh yang salah
MOV AX,0FFh ini yang benar
Untuk karakter atau kode – kode ASCII dapat direpresentasikan dalam bentuk
immediate jika data ASCII ditutup dengan tanda apostrof (‘).
Contoh :
MOV AL,’A’ menyalin huruf ‘A’ (41h) ke dalam register AL
Yang terlarang dalam mode pengalamatan segera adalah memberikan nilai
untuk segmen register (SS, CS, DS, ES). Untuk memecahkan hal ini, kita bisa
menggunakan register general purpose (AX, BX, CX, DX) sebagai perantara.
Contoh :
MOV ES,0FFh salah, yang benar ada 2 langkah di bawah ini
MOV AX,0FFh disalin ke AX dulu
MOV ES,AX baru kemudian disalin ke ES

2. Direct Addressing (Pengalamatan Langsung)


Suatu proses penyalinan data pada register dan suatu alamat efektif
(Effective Address, Alamat ini disimpan pada byte berikut setelah opcode instruksi).
Contoh :
MOV AX,[100h] menyalin data pada alamat 100h ke AX
A DB 89h mendefinisikan variable A
.
.
MOV AL,A direct addressing
Sebenarnya huruf ‘A’ di atas lebih tepat disebut lokasi memori yang memiliki
offset A, yaitu 89h, pada segmen data (DS). Jadi ‘A’ di sini bisa dibilang sama
dengan sebuah nama variable pada bahasa pemrograman tingkat tinggi (C, C++,
Pascal, Basic, dsb), hanya untuk memudahkan dalam pemahaman. Penyalinan data
langsung antarmemori tidak diijinkan. Untuk memecahkan hal ini, kita bisa
menggunakan register general purpose sebagai perantara.
Contoh :
A DB 10h
B DB ? definisi variable B, nilai ditentukan / diisi kemudian
.
.
MOV B,A

salah, harusnya dengan perantara sebagai berikut ..


MOV AX,A direct addressing
MOV B,AX register addressing
3. Register Direct Addressing
Suatu proses penyalinan data (bisa byte atau word) dari register ke register
atau ke suatu lokasi memori. Proses tersebut harus menggunakan dua buah
operand yang berukuran sama, misalnya AX dan BX, AL dan BH (tapi ada beberapa
instruksi tertentu yang dikecualikan, misalnya : SHL DX,CL
Contoh :
MOV AX,BX untuk operasi 16 bit data (word)
MOV AL,BL untuk operasi 8 bit data (byte)
Perlu diwaspadai bahwa ada beberapa penyalinan data yang terlarang pada
pengalamatan ini. Misalnya instruksi MOV pada register segmen ke register segmen
(SS, CS, DS, ES). Untuk memecahkan hal ini, kita bisa menggunakan register
general purpose (AX, BX, CX, DX) sebagai perantara.
Contoh :
MOV ES,DS
salah, yang benar ada 2 langkah di bawah ini :
MOV AX,DS disalin dulu ke AX
MOV ES,AX baru kemudian disalin ke ES
Selain dengan cara di atas, kita juga bisa menggunakan stack sebagai perantara.
Contoh :
PUSH DS PUSH (masukkan) nilai DS ke dalam stack
POP ES POP (keluarkan) nilai dari dalam stack ke ES
Perhatikan juga bahwa register segmen kode (CS) tidak mungkin diubah oleh
instruksi MOV, karena alamat instruksi berikutnya sudah ditentukan oleh IP dan CS
(ingat pasangan CS:IP). Jika hanya CS yang diubah, maka alamat instruksi
berikutnya tidak dapat diprediksi. Oleh karena itu, pengubahan register CS dengan
instruksi MOV tidak diijinkan. Register Addressing dapat juga hanya terdiri atas
sebuah register seperti pada perintah INC CX.

4. Register Indirect Addressing


Register indirect addressing ini hampir sama dengan direct addressing,
bedanya hanya alamat efektif dari operand tidak disimpan di byte berikut setelah
opcode instruksi, tetapi disimpan pada salah satu dari register indeks atau register
basis, yaitu BX,BP,SI atau DI. Register Indirect Addressing biasanya digunakan
untuk mengakses suatu data yang banyak (misalnya sebuah array atau string)
dengan mengambil alamat efektif dari data tersebut. Untuk mendapatkan alamat
efektif dari suatu data bisa digunakan perintah LEA (Load Effective Addres) dengan
syntax : LEA Register,Data
Untuk mengakses data yang ditunjukkan oleh Register, setelah
didapatkannya alamat efektif harus digunakan tanda kurung siku (‘[]‘). Jika pada
perintah pengaksesannya tidak disebutkan segmennya, maka yang digunakan
adalah segment default. Seperti bila digunakan register BX, DI, atau SI sebagai
penunjuk offset, maka segment DS yang digunakan. Sedangkan bila digunakan
register BP sebagai penunjuk offset, maka segment SS yang digunakan.
Contoh :
MOV AX,[BX]
menyalin isi dari lokasi memori yang offsetnya disimpan di dalam register BX (16 bit)
pada segmen data (DS) ke register AX. Misalnya BX = 1000h, ketika instruksi di atas
dilakukan, isi dari DS (yang berukuran word) pada alamat offset 1000h disalin ke
dalam register AX. Perhatikan bahwa isi dari 1000h disalin ke AL dan isi dari 1001h
disalin ke AH.
LEA SI,String muat offset String (String adalah variable yang berisi kumpulan
karakter / string) MOV AL,[SI] menyalin isi dari lokasi memori yang offsetnya
disimpan di dalam register SI (8 bit) pada segmen data (DS) ke register AL
Pada direct addressing di atas sudah dikatakan bahwa tidak diijinkan
menyalin data langsung antarmemori. Hal tersebut juga berlaku pada Register
indirect addressing.
Contoh :
MOV [DI],[BX]
salah, menyalin dari memori ke memori tidak diijinkan, kecuali dengan instruksi
string.
Pada beberapa kasus, pengalamatan tidak langsung memerlukan ukuran
data khusus yang ditetapkan dengan direktif assembler khusus BYTE PTR, WORD
PTR, atau DWORD PTR. Direktif ini menunjukkan ukuran data memori yang
dialamatkan oleh penunjuk memori (PTR).

Contoh:
MOV AL,[DI]
jelas merupakan instruksi penyalinan data berukuran byte (tandanya memakai
register AL sebagai tujuannya).
MOV [DI],10h
salah, karena instruksi ini tidak jelas, apakah mengalamatkan lokasi memori yang
berukuran byte, word, atau dword . Assembler tidak menentukan ukuran 10h
tersebut. Yang benar seperti contoh berikut.
MOV BYTE PTR [DI],10h
jelas menentukan lokasi yang dialamatkan oleh DI sebagai lokasi memori yang
berukuran byte.

5.Indirect Addressing
Merupakan mode pengalamatan tak langsung. Field alamat mengacu pada
alamat word di dalam memori, yang pada gilirannya akan berisi alamat operand
yang panjang atau untuk mentransfer DATA/byte/word antar register dan lokasi yang
alamatnya ditunjukkan oleh isi suatu register.
Contoh
BX], AX Þ Pindahkan isi register AX ke dalam alamat memori yang ditunjukkan oleh isi register
BX
Contoh
ADD (A) Þ tambahkan isi memori yang ditunjuk oleh isi alamat A ke
akumulator
Keuntungan yang diperoleh adalah ruang bagi alamat menjadi besar
sehingga semakin banyak alamat yang dapat referensi. Sedangkan kerugiannya
adalah diperlukan referensi memori ganda dalam satu fetch sehingga
memperlambat proses operasi.

6. Displacement Addressing
Merupakan mode pengalamatan yang menggabungkan kemampuan
pengalamatan langsung dan pengalamatan register tidak langsung (Register Indirect
Addressing). Metode ini mensyaratkan intruksi memiliki dua buah field alamat,
sedikitnya sebuah field yang eksplisit (field eksplisit bernilai A dan field implisit
mengarah pada register).
Operand berada pada alamat A ditambah isi register.
Tiga model displacement:
a. Relative Addressing
Register yang direferensi secara implisit adalah program counter (PC). Alamat efektif
didapatkan dari alamat instruksi saat itu ditambahkan ke field alamat. Memanfaatkan
konsep lokalitas memori untuk menyediakan operand-operand berikutnya.
b. Base Register Addressing
Register yang direferensikan berisi sebuah alamat memori, dan field alamat berisi
perpindahan dari alamat itu. Referensi register dapat eksplisit maupun implisit.
Memanfaatkan konsep lokalitas memori.
c. Indexing
Indexing adalah field alamat mereferensi alamat memori utama, dan register yang
direferensikan berisi pemindahan positif dari alamat tersebut. Merupakan kebalikan
dari model base register. Field alamat dianggap sebagai alamat memori dalam
indexing. Manfaat penting dari indexing adalah untuk eksekusi program-program
iteratif.

7. Stack Addressing
Stack adalah array lokasi yang linier, yang merupakan blok lokasi yang
terbalik (butir ditambahkan ke puncak stack sehingga setiap saat blok akan terisi
secara parsial)
Yang berkaitan dengan stack adalah pointer yang nilainya merupakan alamat
bagian paling atas stack. Dua elemen teratas stack dapat berada di dalam register
CPU, yang dalam hal ini stack pointer mereferensi ke elemen ketiga stack. Stack
pointer tetap berada di dalam register. Dengan demikian, referensi-referensi ke
lokasi stack di dalam memori pada dasarna merupakan pengalamatan register tidak
langsung.

Anda mungkin juga menyukai