1. Tujuan [kembali]
- Menyelesaikan tugas yang diberikan oleh Bapak.
- Mampu memahami dan mensimulasikan program jump pada software emu8086.
- menyelesaikan tugas Mikroprosesor dan mikrokontroler yg diberi oleh Bapak Darwison
- Memahami teknik interface (perangkat lunak) menggunakan emu 8086
2. Komponen [kembali]
1. Mikroprosessor 8086
Mikroprosesor 8086 adalah mikroprosessor 16-bit dengan data bus 8-bit,
oleh sebab itu pajang data bus merupakan satu-satunya perbedaan utama
antara dua mikroprossesor tersebut. Namun demikian, ada perbedaan kecil
dalam salah satu dari sigmal kontrol, 8086 mempunyai pin M/IO dan 8088
mempunyai pin IO/M. Satu-satunya perbedaan hardware yang lain muncul
pada pin 34 dari kedua chi: pada 8088, yaitu pin SSO, sedangkan pada
8086 adalah pin BHE/S7.
3. Dasar Teori [kembali]
1. Program Lunak
Bahasa program yang dipakai pada interface, umumnya bisa semua bahasa
pemograman, seperti: bahasa Assembler, Basic/VB, Pascal/Delphi, C++/VC, dan
Matlab. Tetapi bahasa Assembler dipakai pada interface dan sistem minimum
serta mikrokontroller, karena dalam bentuk COM akan membuat program di
memory yang jauh lebih kecil dari bahasa program tingkat tinggi.
Contoh instruksi I/O (input-output) dengan menggunakan bahasa
pemrograman:
1.
Assembler
Output: mov dx,300h
Mov al,45h
Out dx,al
Input: mov dx,301h
In al,dx
2.
Pascal atau Delphi
Output: Port[$301]:=$50; {kirim data 50h ke port B}
Input:
3.
C++ atau VC
Output: outportb (0x0300,25);
Input: A:=inportb (0x0302);
4.
Basic atau VB
Output: out 0x0378,D
Input: B=inp (0x0379)
2. Bahasa Tingkat Rendah (Assembler)
Salah satu produk bahasa assembler adalah software buatan SpeedWare yang
dikenal dengan nama TASMB. Program ini telah memiliki editor sendiri
sehingga memudahkan dalam membuat program.
Berikut ini dijelaskan menu dari TASMB dan penggunaannya.
a. Menu Utama
1. A : Meng-assembly dari mnemonic ke bahasa mesin.
2. E : Masuk ke editor. Editor yang digunakan memiliki hampir semua fungsi
pembantu yang dimiliki wordstar/DOS.
3. G : Membaca file dari disket.
4. O : Mengatur option dari TASMB.
5. Q : Keluar dari TASMB ke DOS.
6. R : Menjalankan Program.
7. W : Menyimpan file ke disket.
b. Menu Option
Yang perlu diperhatikan dari menu ini adalah F5 dan F8, sedangkan yang
lainnya dapat dinonaktifkan atau diaktifkan sesuai dengan keperluan.
Tombol F5 merupakan tombol toggle dari pemakaian memory untuk kompilasi dan F8 merupakan penulisan hasil kompilasi ke disket.
3. Program Jump / Lompat
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] 28
Contoh : JMP 0105
Perintah ini adalah untuk melakukan lompatan ke arah lokasi memori
offset:0105 atau diganti dengan menulis label misal ulangi seperti contoh
sebelumnya.
Seperti pada gambar di atas label ulangi adalah menuju ke alamat
segment:offset instruksi MOV AH,02H yaitu 0700:0105.
1.
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:
a. CMP AX, 0120 ; Perintah ini digunakan untuk membandingkan AX dengan
0120
b. CMP BX,AX ; Perintah ini digunakan untuk membandingkan BX dengan AX.
Beberapa perintah lompatan bersyarat:
1.
JE (Jump if Equal): bila pada saat pembandingan kedua operand sama.
Contoh :
CMP AX,0120
JE ulangi
Jump ke label ulangi jika AX sama dengan 0120, namun bila ternyata AX tidak
sama dengan 0120, maka komputer akan meneruskan dengan perintah baris
berikutnya.
2.
JNE (Jump if Not Equal): berlaku apabila nilai AX tidak sama.
Contoh :
CMP AX,0120
JNE ulangi ; jump jika AX tidak sama dengan 0120
Perintah-perintah yang lain adalah:
a. JG (Jump if Greater than): jump jika lebih besar dari operand kedua.
b. JGE (Jump If Greater Or Equal): jump jika lebih besar atau sama dengan
operand kedua.
c. JNG (Jump If Not Greater than): jump jika tidak lebih besar dari operand
kedua.
d. JNGE (Jump If Not Greater Or Equal): jump jika lebih kecil dari operand
kedua. Sama dengan perintah JLE.
e. JL (Jump if Less): Perintah ini sama dengan perintah JB tetapi dalam bil
bertanda.
f. JLE (Jump If Less or Equal): jump jika lebih kecil atau sama dengan
operand kedua. Sama dengan perintah JNGE.
g. JNL (Jump If Not Less Or Equal): jump jika tidak lebih kecil dari
operand kedua. Perintah ini sama dengan JG.
h. JNLE (Jump If Not Less Or Equal): jump jika tidak lebih kecil atau sama
dengan operand kedua. Perintah ini sama dengan JG.
i.JS (Jump On Sign): jump jika Sign Flag yang terdapat Flag Register
berisikan angka 1.
j. JNS (Jump On Not Sign): jump jika Sign Flag yang terdapat pada Flag
Register berisikan angka 0.
k. JC (Jump On Carry): jump jika Carry Flag yang terdapat pada Flag
Register berisikan angka 1.
l. JNC (Jump On Not Carry): jump jika Carry Flag yang terdapat pada Flag
Register berisikan angka 0.
m. JCXZ (Jump If CX = 0) Perintah ini dilaksanakan bila isi register CX
sama dengan 0.
n. JZ (Jump on Zero): jump jika Zero Flag yang terdapat pada Flag Register
berisi angka 1. Jump ini mempunyai fungsi dan cara kerja yang sama dengan
JE.
o. JNZ (Jump on Not Zero): jump jika Zero Flag yang terdapat pada Flag
Register berisikan angka 0. Jump ini mempunyai fungsi dan cara kerja yang
sama dengan JNE sehingga dapat dipertukarkan pada saat pemakaian.
Adapun instruksi jump yang digunakan untuk bilangan tak bertanda
adalah:
a) JA (Jump If Above): jump jika lebih besar dari pada operand kedua
b) JAE (Jump If Above of Equal): jump jika lebih besar atau sama dengan
operand kedua
c) JNA (Jump If Not Above): jump jika tidak lebih besar dari operand
kedua.
d) JNAE (Jump If Not Above Or Equal): jump jika tidak lebih besar atau sama
dengan operand kedua.
e) JB (Jump If Below): jump jika lebih kecil dari operand kedua.
f) JBE (Jump If Below Or Equal): jump jika lebih kecil atau sama dengan
operand kedua. g) JNB (Jump If Not Below): jump jika tidak lebih kecil dari
operand kedua.
h) JNBE (Jump If Not Below Or Equal): jump jika tidak lebih kecil atau sama dengan operand kedua.