Mode Pengalamatan Interupsi

26
Arsitektur mikroprosesor Intel x86 dan konsep Interupsi Mode Pengalamatan (Addressing Mode) Dan Interupsi 1

description

mikroprosesor

Transcript of Mode Pengalamatan Interupsi

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

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# ; 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

Tema TB