Blog Nur Akhwan

Pemrograman Bahasa Rakitan | Mode Pengalamatan (Addressing Mode) Listing Program



Dalam Bahasa Assembly ada yang dinamakan Mode Pengalamatan atau bahasa Inggrisnya adalah Addressing Mode, yaitu Mode pengalamatan berbagai didefinisikan dalam sebuah arsitektur set instruksi yang diberikan menentukan bagaimana instruksi bahasa mesin dalam arsitektur yang mengidentifikasi operan (operand atau) dari setiap instruksi. Sebuah mode pengalamatan menentukan bagaimana menghitung alamat memori efektif operand dengan menggunakan informasi yang dimiliki dalam register dan / atau konstanta yang terkandung dalam instruksi mesin atau tempat lain. Addressing mode ini terdapat 7 macam, sebagai berikut ini, yaitu :



1. IMMEDIATE ADRESSING => pengcopyan variabel angka secara langsung
2. REGISTER ADDRESSING => pencopyan variabel antar register yang berukuran sama, contoh : AL dan BH, CX dan AX, contoh penggunaan keduanya :
.model small
.code
org 100h
imme:
mov al, 65 ; disini contoh penggunaan Immediate Addressing  mencopy nilai 65 ke register AL mov ah, 02h
mov dl, al ; disini contoh penggunaan Register Addressing  mencopy nilai AL (65) ke register DL int 21h ; nilai 65 Hexa dicetak ke ASCII = huruf "A"
int 20h
end imme
3. DIRRECT ADRESSING => pengcopyan variabel dari suatu register atau simbol, contohnya  :

.model small
.code
org 100h
mulai: jmp dir
A db 45h ; kode ASCII huruf E
dir: mov ah, 02h
mov dl, A ; disini contoh penggunaan Dirrect Addressing  mencopy nilai A (45h) ke register AL int 21h ; nilai A = 45h Hexa dicetak ke ASCII = huruf "A"
int 20h
end mulai
4. REGISTER INDIRRECT ADRESSING => mengakses suatu variabel yang banyak dengan mengambil alamat efektifnya, contohnya :

.model small
.code
org 100h
mulai: jmp regin
A db 'INDONESIA'
regin:
lea bx, A ; pengambilan variabel A ("selamat sore") dengan register indirect addressing
                        ; register BX menunjukan alamat efektif dari "Kal"
mov cx, 3 ; counter untuk Looping
ulang:
mov dl, [bx] ; mengambil nilai yang ditunjukkan register BX
mov ah, 02h
int 21h
add bx, 2 ; menambahkan nilai BX=+2, sehingga BX akan menujukkan ke 2 alamat selanjutnya
loop ulang
int 20h
end mulai
5. BASE RELATIVE ADRESSING => mengakses suatu tabel dengan mengambil alamat efektifnya.

.model small
.code
org 100h
mulai: jmp barel
A db 'SELAMAT' ; kode ASCII huruf E

barel:
xor bx, bx ; BX = 0, sebagai patokan penunjuk karakter pertama yg dicetak
mov cx, 7 ; jumlah perulangan
ulang:
mov dl, A[bx] ;ambil tabel A yang ke BX (untuk pertama kali BX = 0)
mov ah, 02h int 21h
inc bx ; inc bx sama dengan bx+1
loop ulang
int 20h
end mulai
6. Direct Indexed Addressing ==> mirip  dengan  base  addressing,  perbedaannya  hanya  penggunaan  register  yang dipakai untuk perhitungan alamat  efektif. Pada indexed addressing dipakai register-register index  yaitu SI dan DI.

Contoh-nya lagi  [UNDER CONTRUCTION]

7. Base Indexed Addressing ==> merupakan  gabungan  antara  base  addressing  dan  indexed  addressing.  Mode  pengalamatan  ini sering digunakan untuk menangani array dua dimensi.  Contoh :
;MAKRO cetak angka
cetak_angka macro angka
local proses, ulang, cetak
proses:
 mov ax,angka
 mov bx,10
 xor cx,cx
ulang:
 xor dx,dx
 div bx
 push dx
 inc cx
 cmp ax,0
 jne ulang
cetak:
 pop dx
 add dl,'0'
 mov ah,02h
 int 21h
 loop cetak
endm

.MODEL SMALL
.CODE
ORG 100h
Data :   JMP Proses
Mahasiswa STRUC
Nim Dw 0 ; 2 byte
Usia Dw 0 ; 1 byte
Nilai Dw 0,0,0 ; 3 byte
Mahasiswa ENDS
Kelas Mahasiswa 10 DUP (<>)
Proses:
LEA BX,kelas ; BX Menunjuk Offset Kelas
ADD BX,18 ; BX Menunjuk pada record ke 4
XOR SI,SI ; SI=0

MOV [BX][SI].Usia,19 ; Usia, record ke 4
cetak_angka [BX][SI].Usia
MOV [BX][SI].Nilai,76 ; Nilai pertama, record ke 4
cetak_angka [BX][SI].Nilai
MOV [BX][SI+1].Nilai,81 ; Nilai kedua, record ke 4
cetak_angka [BX][SI+1].Nilai
MOV [BX][SI+2].Nilai,95 ; Nilai ketiga, record ke 4
cetak_angka [BX][SI+2].Nilai
INT 20h ; Selesai, kembali ke DOS
END Data 

7 komentar:

  1. iyo, lek,...
    asline, rep tak gawe :

    Usia = 19
    Nilai 1 = 76
    Nilai 2 = 81
    Nilai 3 = 95

    ning ra nyandak, uteke...
    hahaha

    BalasHapus
  2. mohonpenjelasan istilah ~array, ~byte, ~bit dalam bahasa assembly,contoh:
    ~array 32 bufferdisplay bufferhidden
    ~byte colomX cycleCounter
    ~bit oneCycle

    trim's sblmnya..

    BalasHapus
  3. NGOMONG OPO PIYE??????????
    ONO OPO?
    KWOKOKWOKWKOWKOWOKW

    BalasHapus