Bahasa Assembler :
Akses Memory
|
Untuk mengakses memori, kita bisa menggunakan 4 register: BX, SI, DI, BP.
Kombinasi register ini di dalam lambang [ ], kita dapat mendapatkan lokasi memori
berbeda. Kombinasi ini didukung (mode alamat):
[BX + SI] [BX + DI] [BP + SI] [BP + DI]
|
[SI] [DI] d16 (hanya variable offset) [BX]
|
[BX + SI] + d8 [BX + DI] + d8 [BP + SI] + d8 [BP + DI]
+ d8
|
[SI] + d8 [DI] + d8 [BP] + d8 [BX] + d8
|
[BX + SI] + d16 [BX + DI] + d16 [BP + SI] + d16 [BP +
DI] + d16
|
[SI] + d16 [DI] + d16 [BP] + d16 [BX] +
d16
| d8 - menunjuk pada 8 bit
yang dipindah.
d16 - menunjuk pada 16 bit yang dipindah.
Perpindahan bisa merupakan suatu offset atau nilai variabel, atau bahkan kedua-duanya.
Itu semua tergantung compiler untuk mengkalkulasi nilai tunggal.
Perpindahan dapat terjadi di dalam atau di luar lambang [ ], compiler menghasilkan
kode mesin yang sama untuk kedua kemungkinan.
Perpindahan adalah Signed nilai, maka kedua-duanya dapat positif
atau negatif.
Pada umumnya compiler berhati-hati sekitar perbedaan antara D8 dan D16,
dan menghasilkan kode mesin yang diperlukan.
Contoh, mari kita berasumsi bahwa Ds= 100, Bx= 30,
Si= 70. Yang mengikuti mode alamat: [Bx+ SI]+ 25
adalah yang dihitung oleh prosessor pada alamat phisik ini :
100* 16+ 30+ 70+ 25= 1725.
Biasanya
DS segmen register digunakan untuk semua mode kecuali yang mempunyai
BP register, untuk ini < B>SS segmen register digunakan.
Ada satu cara mudah untuk mengingat semua kombinasi dengan
penggunaan tabel ini:
kamu dapat membentuk semua kombinasi dengan pengambilan hanya satu item dari
masing-masing kolom atau melompati kolom dengan tidak mengambil apapun dari itu.
Seperti anda lihat Bx dan Bp tidak pernah berkaitan. Si dan
Di juga tidak. Ini adalah contoh mode alamat yang benar: [Bx+5].
Nilai didalam segment register (C, D, S, E) disebut "Segment",
dan nilai didalam register umum (BX, SI, DI, BP) disebut "Offset".
Ketika DS berisi nilai 1234H dan SI berisi nilai 7890H itu dapat
juga direkam seperti 1234:7890. Alamat phisik akan menjadi 1234h* 10h+ 7890h=
19BD0h.
Dalam menerjemahkan tipe data,awalan ini harus digunakan:
BYTE PTR
- untuk byte. WORD PTR - untuk word (dua bytes).
Contoh:
BYTE PTR [ BX]; byte akses.
atau
WORD PTR [ BX]; word access.
Emu8086 mendukung awalan pendek:
b. - untuk BYTE PTR w. - untuk WORD PTR
kadang-kadang compiler dapat
mengkalkulasi jenis data secara otomatis.
|