Arsitektur mikroprosesor Intel x86 dan konsep Interupsi
Mode Pengalamatan(Addressing Mode)
Dan Interupsi
1
Mode PengalamatanPada Mikroprosesor Keluarga 8086
• Merupakan cara memberikan perintah transfer/pemindahan data dari lokasi satu ke lokasi lainnya.
• Lokasi pemindahan data dapat meliputi: register, alamat memori, maupun piranti I/O
• Pemrogram (manusia) menulis instruksi dalam format assembly, selanjutnya oleh compiler (program) diubah menjadi format heksadesimal dan disimpan dalam memori.
2
3
Lokasi Pemindahan Data
MP ROM RAM
BUS ALAMAT
BUS DATA
BUS KONTROL
I/O Interface
Lokasi register
Lokasi memori Lokasi I/O
I. Mode Pengalamatan Segera(Immediate Addressing)
Bentuk:
MOV AL,5
SUMBER:
DATA
TUJUAN: REGISTER/ AKUMULATOR
Immediate addressing merupakan mode pengalamatan yang digunakan untuk mengisi suatu register dengan data.
4
Arti: isilah atau copy 5 heksadesimal ke register AL
Contoh Mode Pengalamatan Segera:
• MOV AX,A1B2 apa artinya?• MOV BL,03 apa artinya?• MOV BP,1234 apa artinya?• Register yang dapat diisi data dengan mode
pengalamatan segera: AX,BX,CX,DX,AL,AH,BL,BH,CL,CH,DL,DH, BP,SP,SI,DI
• Register segmen tidak dapat diisi dengan mode pengalamatan segera
• Alamat memori juga tidak dapat diisi secara immediate
5
II. Mode Pengalamatan Register(Register Addressing)
Bentuk:
MOV AL,BL
SUMBER: REGISTER
TUJUAN: REGISTER
Register addressing adalah mode pengalamatan yang digunakan untuk mentransfer data (byte/word) dari register sumber ke register tujuan.
6
Arti: copy isi register BL ke register AL
Contoh Mode Pengalamatan Register:
• MOV AL, BL apa artinya?• MOV AX, CX apa artinya?• MOV CS, AX apa artinya?• MOV CS, DS tidak diijinkan karena
segment to segment• MOV BL, BX Tidak dijinkan karena
berbeda ukuran (mixed size)
7
Contoh Mode Pengalamatan Register:
• Susun perintah untuk mengisi register segmen DS dengan data 1234 heksadesimal!
• Jawab:
MOV AX,1234 immediate addressing
MOV DS,AX register addressing
8
III. Mode Pengalamatan Langsung(Direct Addressing)
Bentuk 1:
MOV AL,[0120]
SUMBER: ALAMAT RELATIF MEMORI
Direct addressing merupakan mode pengalamatan untuk mentransfer data antar memori dan register
9
Arti: copy data pada alamat relatif memori 0120 ke register AL
TUJUAN: REGISTER
Contoh Bentuk 1:
Susun instruksi assembly untuk memindahkan/copy isi alamat 10120 heksadesimal ke register AL, isi alamat 10150 heksadesimal ke register BL, dan isi alamat 10160 heksadesimal ke register CL! Anggap segment base 1000 tersimpan pada register DS!Jawab:
MOV AX,1000 immediate addressingMOV DS,AX register addressingMOV AL,[0120] direct addressing
MOV BL,[0150] direct addressingMOV CL,[0160] direct addressing
Coba kerjakan contoh di atas menggunakan program DEBUG!
10
Bentuk 2:
MOV [0120],AL
SUMBER: REGISTER
TUJUAN: ALAMAT RELATIF MEMORI
Contoh: susun instruksi untuk mengisi alamat 10120 dengan data 5 heksadesimal! Anggap segment base yang digunakan adalah 1000 tersimpan dalam DS!
11
Jawab: MOV AX,1000 IMMEDIATE ADDRESSINGMOV DS,AX REGISTER ADDRESSINGMOV AL,5 IMMEDIATE ADDRESSINGMOV [0120],AL DIRECT ADDRESSING
Tugas1: Susun instruksi untuk mengisi alamat 20150 heksadesimal dengan data 5, dan alamat 20160 heksadesimal dengan data 2. Isi kedua alamat tersebut dijumlahkan dan hasilnay disimpan di alamat 20170 heksadesimal. Anggap segment base yang digunakan adalah 2000 tersimpan dengan DS! Gunakan program DEBUG untuk menguji program anda, tunjukkan dengan peta memori dan register bahwa program telah berjalan dengan baik.
12
IV. Mode Pengalamatan Tak Langsung(Indirect Addressing)
Merupakan mode pengalamatan untuk mentransfer DATA/byte/word antar register dan lokasi yang alamatnya ditunjukkan oleh isi suatu register.
Contoh MOV [BX], AX Pindahkan isi register AX ke
dalam alamat memori yang ditunjukkan oleh isi register BX
13
Contoh permasalahan Susunlah intruksi ke dalam bahasa assembly untuk memindahkan data A1B2 yang ada di register AX ke alamat fisik memori 20300 heksadesimal menggunakan mode pengalamatan register indirect, anggap segment yang digunakan adalah DS = 2000 dan alamat relatif yang menunjukkan alamat memory disimpan di register BXJawab:DS : IP = 20300 alamat fisik DS = 20000 alamat awal DS IP = 0300Intruksi yang digunakan
MOV AX, 2000MOV DS, AXMOV BX, 0300MOV AX, A1B2MOV [BX], AX
MOV AX, 2000MOV DS, AXMOV AX, A1B2MOV [0300], AX
DIRECT:
14
V. Base Plus Index Addressing Yaitu mode pengalamatan yang digunakan untuk mentransfer byte/word antar register dan memori yang alamatnya ditunjukkan oleh jumlah register base dan index.Bentuk1: MOV [BX + SI], AX
Bentuk2: MOV AX,[BX+SI]
Tugas2:Susun intruksi dalam bahasa assembly untuk memindahkan isi akumulator AX yakni A1B2 ke alamat memori 10500 heksadesimal dengan menggunakan mode pengalamatan base plus index, anggap segmen yang digunakan DS = 1000 dan register indeks yang digunakan SI = 300
15
V. Register Relative Addressing Yaitu mode pengalamatan untuk tranfer byte/word antar register dan memori yang alamatnya ditunjukkan oleh isi suatu register dan jaraknya (displacement)Contoh
MOV [BX + 4], AX
16
Contoh permasalahan Susun intruksi dalam bahasa assembly untuk memindahkan data A1B2 dari akumulator AX ke alamat memori 20304 H dengan menggunakan register relative addressing , anggap segmen yang digunakan DS : 2000 dan dan displacement 4
DS : IP = 20304 DS = 20000 IP = 0304
Intruksi yang digunakan Mov AX,2000Mov DS, AXMov BX,0300Mov AX,A1B2Mov [Bx + 4], AX
17
VI. Base Relative Plus Index Addressing
Merupakan mode pengalamtan yang digunakan untuk mentransfer byte/word antar register dan memori yang alamatnya ditunjukkan oleh suatu register base dan register index ditambah displacement nya Contoh :
MOV AX, [BX + DI + 4]
18
; nama program : int01.asm
; ALTERNATIF ....
; contoh program mencetak string dengan
; INT 21h fungsi 9
#MAKE_COM# ; membuat berkas COM
ORG 100h
JMP START
; Data:
msg DB 'Belajar Assembler',13,10
DB 'Sangat menyenangkan',13,10
DB 'Menggunakan Emulator 8086!','$‘
; simpan alamat label msg ke register DX:
START:
LEA DX, msg
; Cetak string-nya:
MOV AH, 9
INT 21h
RET ; kembali ke sistem operasi
END
; nama program : int04.asm MODIFIKASI … contoh program mencetak string dengan
; yang mengandung'$' disertai BELL
#MAKE_COM# ; membuat berkas COM
ORG 100h
JMP START
; Data:
msg DB 'ASSEMBLER',0
; simpan alamat label msg ke register DX:
START:
MOV AH, 2 ; fungsi mencetak karakter'
MOV BX, 0 ; tanda indeks data
ulang:
MOV DL, msg[BX] ; baca karakter simpan di DL
CMP DL, 0 ; apakah kode ASCII 0?
JZ selesai ; YA, selesai!
INT 21h ; TIDAK, cetak karakter!
CALL bunyi_bel ; panggil prosedur bunyi_bel
INC BX ; naikkan indeksnya
JMP ulang ; ulangi lagi
selesai:
RET ; kembali ke sistem operasi
bunyi_bel PROC
MOV DL, 7
MOV AH, 2
INT 21h
RET
bunyi_bel ENDP
END
; nama program : int06.asm membuat garis diagonal dengan karakter 'smiley face'
; mulai posisi kiri atas layar hingga batas bawah layar
#MAKE_COM# ; membuat berkas COM
ORG 100h
START:
MOV AH, 0 ; siapkan layar hitam/putih 80x25
MOV AL, 2 ; karakter 'smiley face' + mode layar
INT 10h ; set layar (sekaligus bersihkan layar)
MOV DX, 0 ; mulai dari posisi 0,0 (DH dan DL)
MOV CX, 1 ; 1 karakter tercetak
set_kursor:
MOV AH, 2
INT 10h ; set posisi kursor
MOV AH, 10
INT 10h ; cetak karakter
INC DH ; geser kanan
INC DL ; turunkan
CMP DH, 25 ; apakah sudah di batas bawah layar?
JNE set_kursor ; BELUM, ulangi lagi
RET ; YA, selesai
END
; nama program : int07.asm membuat garis diagonal dengan karakter 'smiley face'
; mulai posisi kanan atas layar hingga batas bawah layar
#MAKE_COM# ; membuat berkas COM
ORG 100h
START:
MOV AH, 0 ; siapkan layar hitam/putih 80x25
MOV AL, 2 ; karakter 'smiley face' + mode layar
INT 10h ; set layar (sekaligus bersihkan layar)
MOV DX, 79 ; mulai dari posisi 0,79 (DH dan DL)
MOV CX, 1 ; 1 karakter tercetak
set_kursor:
MOV AH, 2
INT 10h ; set posisi kursor
MOV AH, 10
INT 10h ; cetak karakter
INC DH ; turunkan
DEC DL ; geser kiri
CMP DH, 25 ; apakah sudah di batas bawah layar?
JNE set_kursor ; BELUM, ulangi lagi
RET ; YA, selesai
END
; nama program : int02.asm; contoh program mencetak string dengan; yang mengandung'$'
#MAKE_COM# ; membuat berkas COMORG 100h JMP START; Data:msg DB 'Belajar $Assembler','$' ; simpan alamat label msg ke register DX:START: LEA DX, msg ; Cetak string-nya: MOV AH, 9 INT 21h RET ; kembali ke sistem operasiEND
; nama program : int03.asm
; MODIFIKASI ...
; contoh program mencetak string dengan
; yang mengandung'$'
#MAKE_COM# ; membuat berkas COM
ORG 100h
JMP START
; Data:
msg DB 'Belajar $Assembler',0
; simpan alamat label msg ke register DX:
START:
MOV AH, 2 ; fungsi mencetak karakter'
MOV BX, 0 ; tanda indeks data
ulang:
MOV DL, msg[BX] ; baca karakter simpan di DL
CMP DL, 0 ; apakah kode ASCII 0?
JZ selesai ; YA, selesai!
INT 21h ; TIDAK, cetak karakter!
INC BX ; naikkan indeksnya
JMP ulang ; ulangi lagi
selesai:
RET ; kembali ke sistem operasi
END
Top Related