Anda di halaman 1dari 26

Arsitektur mikroprosesor Intel x86 dan konsep Interupsi

Mode Pengalamatan (Addressing Mode) Dan Interupsi


1

Mode Pengalamatan Pada 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

Lokasi Pemindahan Data


Lokasi register Lokasi memori Lokasi I/O

MP

ROM

RAM

I/O Interface

BUS ALAMAT BUS DATA BUS KONTROL


3

I. Mode Pengalamatan Segera (Immediate Addressing)


Immediate addressing merupakan mode pengalamatan yang digunakan untuk mengisi suatu register dengan data.

Bentuk:

MOV
TUJUAN: REGISTER/ AKUMULATOR

AL,5
SUMBER:

DATA

Arti: isilah atau copy 5 heksadesimal ke register AL


4

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)


Register addressing adalah mode pengalamatan yang digunakan untuk mentransfer data (byte/word) dari register sumber ke register tujuan.

Bentuk:

MOV
TUJUAN: REGISTER

AL,BL
SUMBER: REGISTER

Arti: copy isi register BL ke register AL


6

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

III. Mode Pengalamatan Langsung (Direct Addressing)


Direct addressing merupakan mode pengalamatan untuk mentransfer data antar memori dan register

Bentuk 1:

MOV
TUJUAN: REGISTER

AL,[0120]
SUMBER: ALAMAT RELATIF MEMORI

Arti: copy data pada alamat relatif memori 0120 ke register AL


9

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 addressing MOV DS,AX register addressing MOV AL,[0120] direct addressing MOV BL,[0150] direct addressing MOV CL,[0160] direct addressing Coba kerjakan contoh di atas menggunakan program DEBUG!
10

Bentuk 2: MOV

[0120],AL

TUJUAN: ALAMAT RELATIF MEMORI

SUMBER: REGISTER

Contoh: susun instruksi untuk mengisi alamat 10120 dengan data 5 heksadesimal! Anggap segment base yang digunakan adalah 1000 tersimpan dalam DS!
11

Jawab: MOV MOV MOV MOV

AX,1000 DS,AX AL,5 [0120],AL

IMMEDIATE ADDRESSING REGISTER ADDRESSING IMMEDIATE ADDRESSING 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 BX Jawab: DS : IP = 20300 alamat fisik DS = 20000 alamat awal DS IP = 0300 DIRECT: Intruksi yang digunakan MOV AX, 2000 MOV AX, 2000 MOV DS, AX MOV DS, AX MOV AX, A1B2 MOV BX, 0300 MOV [0300], AX MOV AX, A1B2 MOV [BX], AX
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,2000 Mov DS, AX Mov BX,0300 Mov AX,A1B2 Mov [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

INTERUPT

; 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# ORG 100h ; membuat berkas COM

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 MOV CX, 1 ; mulai dari posisi 0,0 (DH dan DL) ; 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 COM ORG 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 operasi END

; 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

Tema TB