- Memahami dan mengerti penggunaan bahasa assembler dengan emu8086
- Dapat membuat sebuah program aplikasi menggunakan emu8086
- Dapat mencetak kalimat menggunakan fasilitas Int 21h dengan service 09h
- Software emu8086
Teori Bahasa Assembler
Dalam bahasa tingkat rendah tidak dibutuhkan struktur program karena semuanya diserahkan kepada pemakai.
REGISTER
Register adalah
sebagian kecil memori komputer
yang dipakai untuk tempat penampungan data. Sebagian besar register yang terdapat pada mikroprosesor
8088 adalah 16 bit.
Ada 5
kelompok Register, yaitu :
1.
General Purpose Register
General purpose register dapat dibagi menjadi register low dan high bits
yang masing-masing berkemampuan 8 bit.
Seperti register AX, register low-nya adalah
AL dan register high-nya
adalah AH.
Ada empat macam General
purpose register yaitu:
a.
Register AX (AH + AL) atau Accumulator Register adalah register aritmatik untuk dipakai dalam operasi pertambahan, pengurangan, perkalian
dan pembagian. Register AH dapat
juga digunakan untuk tempat nilai service number untuk beberapa
interrupt
tertentu.
b.
Register BX
(BH + BL) atau Base register adalah salah satu dari dua register base Addressing mode, yang
dapat mengambil atau menulis langsung dari/ke memory.
c.
Register CX (CH + CL) atau Counter Register adalah suatu
counter untuk meletakkan jumlah lompatan pada loop yang dilakukan.
d.
Register DX (DH + DL) atau Data Register mempunyai tiga tugas, yaitu:
1. Membantu AX
dalam
proses perkalian dan pembagian, terutama perkalian dan
pembagian 16 bit.
2. DX merupakan register offset dari DS
3. DX bertugas menunjukkan nomor port pada operasi port
2. Segment Register
a.
CS (Code Segment) Register adalah
berfungsi menunjukkan segment program
berada dengan pasangan register ini adalah register
IP.
b.
DS (Data Segment) Register adalah
berfungsi menunjukkan segment dari segment data. Pasangan dari DS adalah DX.
c. SS (Stack Segment) Register adalah berfungsi menunjukkan segment dari segment stack. Pasangan dari SS adalah SP
d. ES (Extra Segment) Register adalah berfungsi untuk pemograman pada saat melakukan operasi ke segment lain.
3. Pointer Register berfungsi menyimpan offset dari relative address.
a.
IP (Instruction Pointer) Register adalah
berfungsi untuk
menunjukkan baris perintah program. Pada saat
pertama program dijalankan register ini akan langsung menunjuk pada awal
program.
b.
SP (Stack Pointer) Register adalah merupakan pasangan SS
yang digunakan untuk operasi stack. Pada saat pertama program dijalankan register ini
akan menunjuk pada byte terakhir stack.
c.
BP (Base Pointer) Register adalah mempunyai fungsi sama dengan register BX, tetapi BX menulis dan membaca dengan segment DS (Data Segment) sedang BP menulis dan membaca dengan segment SS (Stack Segment).
4. Index Register yaitu SI (Source Index) dan DI (Destination Index) adalah
berfungsi melakukan
operasi STRING. Namun demikian, kedua register
ini sering
digunakan untuk menulis dan membaca ke atau dari memori seperti halnya BX dan BP.
5. Flag Register adalah berfungsi mengecek
apakah sesuatu berfungsi atau tidak.
Contohnya:
- Interrupt Flag mengecek apakah pada saat operasi
Interrupt sedang aktif atau tidak, bila tidak aktif, Interrupt tidak akan dijalankan.
- Carry Flag mengecek apakah pada
saat operasi terjadi kesalahan atau tidak,
- Sign Flag menunjukkan apakah suatu bilangan bertanda atau tidak dan sebagainya.
PERINTAH
DASAR ASSEMBLER
1. MOV
Perintah untuk
mengisi, memindahkan, memperbaharui isi
suatu register, variabel ataupun suatu
lokasi memori.
Tata penulisan: MOV [operand1],[operand2]
a.
Operand1 berupa register,
variabel, lokasi memory dan
b.
Operand2
berupa: register, variabel, lokasi
memory ataupun bilangan.
Contoh :
MOV AH,AL ; mengkopi isi register
AL ke register AH.
MOV AH, 02 ; mengisi
register AH dengan 02
2. Int (Interrupt)
Subrotine yang akan dipanggil sudah tersedia pada
memori komputer.
Ada dua jenis yaitu :
a. Bios Interrupt yaitu Int 0H hingga 1FH yang disediakan oleh BIOS (Basic Input Output System).
Contoh: Int 16H service 01H berfungsi untuk mencek
apakah ada tombol keyboard yang
ditekan.
b. DOS Interrupt yaitu Int 1FH
keatas yang disediakan oleh DOS (Disk Operating System).
Contoh: Int 20H berfungsi
menghentikan kerja suatu program.
3. Int 20h
dan Int 21h service 02h
a.
Int 20h
Bertugas memberhentikan proses komputer
terhadap suatu program COM. Bila pada setiap program COM yang dibuat
tidak terdapat Int 20h, maka akan terjadi hanging
pada komputer. Hal ini terjadi
karena komputer tidak menemukan perintah pemberhentian proses.
b. Int 21h Service 02
Seperti Int 20h, Int 21h
adalah salah satu Int yang termasuk
DOS Interrupt, karena Int 21h mempunyai banyak sekali tugas, maka tugasnya dibagi-bagi
menjadi beberapa bagian. Untuk memanggil bagian-bagian itu, perlu menyertakan nomor bagiannya yang disebut
juga dengan service number. Contoh Int 21h
yang bertugas mencetak sebuah huruf ke layar yaitu fungsi kedua dari Int 21h.
Untuk menjalankan fungsi Int 21h service 02 harus dipenuhi beberapa syarat yaitu :
a)
Register AH, harus
berisi service number dari Int
21h yang akan dijalankan (02h).
b)
Register DL,
harus berisi bilangan hexa dari karakter ASCII (American Standard
Code for Information Interchange) yang akan dicetak.
LOMPAT / JUMP
Pada jump dengan memakai register CX, dimana setiap kali lompat nilai CX
berkurang satu dan sampai CX = 0 maka tidak bisa melompat lagi.
Pada instruksi jump ini, lompatan hanya dapat dipakai satu kali saja.
Ada 2 macam lompatan, yaitu :
1. Lompatan Tak Bersyarat
Lompatan tak bersyarat dapat dikelompokkan menjadi dua macam, yaitu :
a. Near Jump: yang jauh lompatan tidak lebih
dari FF hexa
byte, ataupun 256 byte.
b. Far Jump: yang jauh
lompatan tidak lebih dari FFFF hexa byte, ataupun 1 segment.
Tata
penulisan: JMP [Lokasi Memory]
2. Lompatan Bersyarat
Ada
beberapa jenis lompatan yang
kegunaannya dapat disesuaikan dengan
keperluan yang dibutuhkan.
Tata penulisan: [Perintah jump] [Lokasi Memory]
Sebelum memakai lompatan bersyarat, terlebih dahulu dilakukan perintah perbandingan (Compare).
Hal ini dilakukan karena untuk beberapa jenis
lompatan harus menggunakannya sebelum melakukan lompatan.
Tata penulisan: CMP [Operand1],[Operand2]
Operand1: variabel
atau register dan
Operand2: variabel, isi
lokasi memory, lokasi memory, variabel ataupun register.
Contoh:
- CMP AX, 0120 ; Perintah ini digunakan untuk membandingkan AX dengan 0120
b. CMP BX,AX ; Perintah ini
digunakan untuk membandingkan BX dengan AX.
MENCETAK
SEBUAH KALIMAT
Menggunakan fasilitas
Int 21h
dengan service 09h.
Sebelumnya dipelajari dulu tentang variabel.
Ada
2
jenis
variabel, yaitu
:
a. Variabel yang Dapat Dimodifikasi Isinya
Variabel yang memakan tempat pada memory, yaitu;
a) DB
(Define Byte),
mendefinisikan variabel per byte.
b)
DW (Define Word), mendefinisikan variabel
per word (2 byte).
c)
DD (Define Double Word), mendefinisikan
variabel per 2 word.
Tata penulisan: Label (DB/DW/DD) [Isi Variabel]
Contoh:
Satu db ‘
satu variabel$'
Dua db 12ABh
Tiga db 75h
b. Variabel yang Tidak Dapat Dimodifikasi Isinya
Tidak memakan memori pada komputer, jenis variabel ini hanya dapat dipakai
dalam Assambler menggunakan Compiler dengan memakai equ.
Contoh:
Satu
equ 2470h
Dua equ 2442h
Syarat menggunakan Int 21 hexa service 09 hexa ini
adalah :
a) AH=09H
b) DS= segment variabel tempat menampung kata yang akan dicetak
c) DX= offset-nya dan
d) kata-kata yang dicetak tersebut harus diakhiri dengan tanda
Dollar '$'.
Contoh program menggunakan Int 21 hexa service
09 hexa ditunjukkan pada gambar
Gambar Program Aplikasi Int 21 hexa Service 09 hexa
Hal yang perlu diperhatikan dalam
membuat program seperti ini, adalah:
b. Pointer program (IP) diharap jangan melewati daerah data karena bila melewati data akan terjadi kesalahan proses yang dapat menyebabkan terjadinya hanging.
c. Untuk itu, arahkanlah kerja program menggunakan lompatan ke arah setelah data, dalam program label 'MULAI".
d. Angka 13,10 pada akhir setiap baris data merupakan instruksi untuk ganti baris meletakkan kursor ke sebelah kolom 0
dari layar sesuai dengan fungsi kode ASCII masing-masing.
;PROGRAM MENCETAK SEBUAH KALIMAT
JMP mulai //melakukan lompatan ke arah lokasi memory dengan label mulai.
;Disini data dimulai
KATA db 'kata yang dicetak',13,10 // terdapat variabel KATA yang digunakan untuk mencetak kata
db 'dengan Interrupt 21H service 09H',13,10 //mencetak kata dan angka 13,10 pada akhir baris data merupakan instruksi untuk ganti baris
db '$'
;Programnya
mulai:
MOV DX,OFFSET KATA //mengisi register DX dengan OFFSET DATA yaitu dengan variabel KATA
MOV AH,09H //mengisi AH dengan service
INT 21H //mencetak kata
MOV AH,4CH //mengisi AH dengan 4CH
Referensi :
- John Crisp, Introduction to Microprosessor and Microcontrollers, 2nd edition, Newnessm 2004.
- Darwison, 2007 “ Teori, Rancangan ,Simulasi Dan Aplikasi Mikroprosesor Dan Mikrokontroller” ISBN: 978-602-9487-09-1”, CV Ferila, Padang
Tidak ada komentar:
Posting Komentar