Anda di halaman 1dari 18

LAPORAN AKHIR

PRAKTIKUM MIKROPROSESOR

NAMA : A ABQORI NASRULLAH


NIM : 08021381722076
KELOMPOK : VI (EMPAT)
ASISTEN : KHAIRUL SALEH, S.Si., M.Si

LABORATORIUM ELEKTRONIKA DAN INSTRUMENTASI


JURUSAN FISIKA
FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM
UNIVERSITAS SRIWIJAYA
2019
LAPORAN PENDAHULUAN
PRAKTIKUM MIKROPROSESOR

NAMA : A ABQORI NASRULLAH


NIM : 08021381722076
KELOMPOK : VI (EMPAT)
ASISTEN : KHAIRUL SALEH, S.Si., M.Si

LABORATORIUM ELEKTRONIKA DAN INSTRUMENTASI


JURUSAN FISIKA
FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM
UNIVERSITAS SRIWIJAYA
2019
LAPORAN PENDAHULUAN
PRAKTIKUM MIKROPROSESOR

I. NOMOR PERCOBAAN : IV
II. NAMA PERCOBAAN : INSTRUKSI DAN KENDALI
III. TUJUAN PERCOBAAN :
1. Memahami instruksi percabangan
2. Memahami teknik merancang program percabangan
3. Mempraktekkan penggunaan status flag dalam mengambil keputusan
IV. TINJAUAN PUSTAKA
Instruksi kendali program adalah instruksi yang berfungsi untuk mengatur dan
mengarahkan alur program. Sebagai contoh, dapat kita bayangkan sebuah program
untuk mendeteksi apakah suatu bilangan bulat adalah bilangan bulat negative, nol atau
bulat positif. Suatu intruksi kendali biasanya mengatur suatu proses, apakah program
melakukan perbandingan dengan bilangan lain, atau dibelokkan ke suatu pemasukkan
data lainnya.
Pembelokkan atau pencabangan ini biasanya didahului dengan pengecekan
kondisi-kondisi tertentu, misalnya dengan perintah CMP atau TEST. Berikut ini akan
dijelaskan sekilas mengenai beberapa instruksi kendali yang sering dipergunakan
dalam program (real mode programming), yaitu : JMP (lompat), LOOP (kalang),
CALL (memanggil prosedur), RET (kembali ke program utama), dan INT (interupsi).
 LOMPATAN
Instruksi lompatan pada suatu program akan menyebabkan program tersebut
melompati bagian tertentu pada program dan mengeksekusi instruksi yang
dikehendaki. Ada 2 (dua) jenis instruksi lompat, yaitu lompat tak bersyarat
(unconditional jump) dan lompat bersyarat (conditional jump).
1. Lompatan Tak Bersyarat
Lompatan tak bersyarat adalah lompatan ke lokasi memori tertentu (yang
dikehendaki) tanpa ada pengecekan kondisi tertentu. Ada 3 jenis instruksi lompatan
tak bersyarat, yaitu :
a. Lompatan pendek (short jump), instruksi yang mengizinkan program
melakukan lompatan sejauh-jauhnya  127 byte (127 byte ke depan
atau 128 byte ke belakang). Instruksi lompat pendek ini terdiri dari 2
byte (1 byte opcode dan 1 byte operand.
JMP SHORT disp
b. Lompatan dekat (near jump), sama dengan lompatan pendek, hanya
jangkaunnya lebih panjang  32 Kbyte. Instruksi ini terdiri dari 3 byte,
1 byte opcode dan 2 byte operand untuk menunjukkan alamat lompatan.
JMP disp_low disp_high
c. Lompatan jauh (far jump), instruksi yang mengizinkan program
melakukan lompatan ke seluruh daerah memori. Instruksi lompatan ini
terdiri dari 5 byte, 1 byte opcode, 2 byte pertama operand untuk
menunjukkan alamat offset yang baru dan 2 byte terakhir untuk
menunjukkan alamat segmen yangbaru.
JMP FAR IP_low IP _high CS _low CS_high
2. Lompatan Bersyarat
Lompatan bersyarat dilakukan ke seluruh daerah memori dalam segmen
memori yang sama. Lompatan bersyarat biasanya didahului oleh instruksi pengujian
(CMP dan TEST). Lompatan bersyarat mengecek kondisi bit-bit flag register S (sign),
Z (zero), C (carry), P (parity), dan O (overflow). Bila kondisi yang dicek benar maka
lompatan bersyarat ke alamat yang dituju akan dilakukan, sedangkan bila kondisi yang
dicek salah maka yang dieksekusi adalah baris instruksi yang berikutnya. Berikut table
lompatan bersyarat beserta kondisi pengecekkannya.
Kondisi yang
Instruksi Keterangan
dicek
JA C = 0, Z=0 Lompat, bila operand1 > operand2 (bilangan tak
JAE C=0 bertanda)
JB C=1 Lompat, bila operand1  operand2 (bilangan tak
JBE C = 1, Z=1 bertanda)
JG Z = 0, S=0 Lompat, bila operand1 < operand2 (bilangan tak
JGE S=0 bertanda)
JL S  0 Lompat, bila operand1  operand2 (bilangan tak
JLE Z = 0, S  0 bertanda)
JC C=1 Lompat, bila operand1 > operand2 (bilangan
JNC C=0 bertanda)
JE / JZ Z=1 Lompat, bila operand1  operand2 (bilangan
JNE / JNZ Z = 0 bertanda)
JO O=1 Lompat, bila operand1 < operand2 (bilangan
JNO O=0 bertanda)
JS S=1 Lompat, bila operand1  operand2 (bilangan
JNS S=0 bertanda)
JP / JPE P=1 Lompat, bila ada bawaan
JNP / JPO P=0 Lompat, bila tidak ada bawaan
JCXZ CX = 0 Lompat, bila operand1 = operand2
JECXZ ECX = 0 Lompat, bila operand1  operand2
Lompat, bila terjadi overflow
Lompat, bila tak terjadi overflow
Lompat, bila negative
Lompat, bila positif
Lompat, bila berparitas genap
Lompat, bila berparitas ganjil
Lompat, bila CX = 0
Lompat, bila ECX = 0, khusus untuk 80386 / 80486
KALANG ( LOOP )
Operasi loop digunakan untuk mengulagi proses tertentu sebanyak cacah
tertentu. Jumlah cacah perulangan diletakkan di register counter (CX atau ECX).
Operasi LOOP akanmengurangi isi register counter dengn 1 (DEC), dan bila isi
register counter bernilai ‘0’ maka perulangan akan dihentikan.
CALL dan RET
Mirip dengan instruksi lompat, CALL akan mengarahkan program ke suatu
prosedur tertentu. Bedanya dengan instruksi jump, CALL menyimpan alamat instruksi
berikutnya ke dalam stack, dan alamat tersebut dikembalikan pada saat instruksi RET
(kembali ke program utama) dieksekusi, sehingga instruksi berikutnya (setelah
instruksi CALL) bisa dieksekusi. Ada 2 macam instruksi CALL, yaitu Near CALL dan
Far CALL.
INTERUPSI (INT)
Interupsi adalah permintaan khusus pada mikroprosessor untuk melakukan
sesuatu. Bila terjadi interupsi, mikroprosessor akan menghentikan dahulu apa yang
sedang dikerjakannya dan melayani permintaan khusus terebut.
Jenis Interupsi pada PC
No Fungsi No Fungsi
0 Divide error 18 ROM Basic
1 Single step(debug) 19 Reboot
2 NMI (non maskable Int) 1A Clock service
3 Breakpoint 1B Control-break handler
4 Arithmetic overflow 1C User timer service
5 Print screen 1D Video parameter
6 Illegal instruction error 1E Disk drive parameter
7 Coprosessor not present int 1F Graphics characters
8 Timer tick (hardware) 20 Terminate program
9 Keyboard (hardware) 21 Dos service
A Hardware interrupt 2 22 Program termination handler
B- Hardware interrupt 3-7 23 Control-C handler
F Video BIOS 24 Crirical error handler
10 Equipment environment 25 Read disk
11 Conventional memory size 26 Write disk
12 Direct disk service 27 Terminate and stay resident
13 Serial COM port service 28 Dos idle
14 Miscellaneous service 2F Multiplex handler
15 Keyboard service 70-77 Hardware interrupts 8-15
16 Parallel port LPT service
17
Ada interupsi yanghanya terdiri dari 1 fungsi layanan, misalnya INT 20 (untuk
menghentikan program), namun ada pula yang lebih, misalnya INT 21. INT yang
memiliki lebih dari satu fungsi layanan ini memiliki nomor layanan (service number).
Untuk memanggil nomor layanan tertentu, nomor layanan tersebut harus dimasukkan
dulu ke register AH sebelum INT yang bersangkutan dieksekusi (Saleh, 2019).
Instruksi JUMP
Dalam mikroprosesor instruksi-instruksi pencabangan menggunakan
instruksi JUMP. Instruksi JUMP membuat mikroprosesor menjadi perangkatyang
sangat ampuh. Instruksi JUMP dapat dikategorikan menjadi dua kategori yaitu :
a. JUMP bersyarat
Jump bersyarat adalah jenis instruksiJump yang bekerja melakukan
lompatanatau kontinyu/tidak melompat berdasarkansyarat yang diberikan.
Mnemonik untuklompatan bersyarat ada tiga yaitu :
1. JP cc : Lompatan absolut bersyaratadalah lompatan yang langsung
menunjuk alamat sasarandengan data alamat 16 bit.
2. JR cc : Lompatan Relatif bersyaratadalah lompatan yangpenunjukan
alamatnya bernilairelatif terhadap alamat posisisaat melompat.
3. DJNZ : Lompatan Relatif Khususterhadap register B adalahlompatan yang
penunjukanalamatnya bernilai relatifterhadap alamat posisi
saatmelompat.
b. JUMP tanpa syarat
Jump tanpa syarat adalah jenisinstruksi Jump yang bekerja
melakukanlompatan atau kontinyu tanpa adanya syaratyang diberikan.
Mnemonik untuk lompatantanpa syarat ada dua yaitu :
1. JP : Lompatan absolut tanpa syaratadalah lompatan yang langsungmenunjuk
alamat sasarandengan data alamat 16 bit.
2. JR : Lompatan Relatif tanpa syaratadalah lompatan yangpenunjukan
alamatnya bernilairelatif terhadap alamat posisisaat melompat (Sudira,
2016).
Interupsi dapat dipandang sebagai jumlah fungsi-fungsi yang membuat
program (tepatnya pemrograman) menjadi lebih mudah, misalnya untuk mencetak
atau menmpilkan suatu karakter bisa dilakukan dengan program khusus atau
menggunakan pemanggilan suatu intruksi da menyerahkan urusan tersebut pada fungsi
interupsi yang bersangkutan.
Selain fungsi untuk menampilkan suatu karakter kelayar, tentu saja ada fungsi-
fungsi interupsi lain yang berhubungan dengan operasi diskdrive serta perangkat keas
lainya. Interupsi dapat dipicu dengan perangkat keras yang berbeda-beda maupun dari
perangkat lunak. Interupsi yang dibangkitkan karena adanya permintaan layanan pada
perangkat keras disebut sebagai interupsi perangkat keras, sedangkan yang melalui
perangkat lunak disebut sebagai interupsi perangkat lunak. Interupsi dengan operan
nilai dapat berisi angka 0 hingga (atau ) hingga 0FFh), selanjutnya aakan digunakan
dengan menggunakan format heksadesimal. Dengan masing-masing interupsi tersebut
ada yang memiliki sub-fungsi, untuk menentukan sub fungsi ini bisasanya digunakan
register AH, yang harus diisi dengan nilai tertentu sebelum intruksi interusi yang
bersangkutan dijalankan, selain itu bisa juga digunakan register lain untuk meneruskan
parameter dan data ( Haryawan, 2007).
V. PROSEDUR PERCOBAAN
1. Turn NIDA trainer on
2. Buat kode mesin program berikut dan jalankan
Code Label Mnemonic Pseudocode
B8 80 00 MOV AX,0080
…………… MOV DS,AX
MOV SI,0030
MOV DI,0040
MOV BX,0050
MOV CL,07
XOR AX,AX
lompat MOV AH,[SI]
ADC AH[DI]
MOV [BX],AH
INC SI
INC DI
INC BX
DEC CL
JNZ lompat
INT 20

3. Sebelum program dijalankan, masukan dahulu data pada alamat 0030 dan 0040
dengan data sembarang. Kemudian program di jalankan – trace. Analisa
program.
4. Ubah program diatas untuk mengurangkan data pada alamat 0030H dengan
0040H dan hasil disimpan di alamat 0050H. Dan masukkan terlebih dahulu
data pada alamat 0030 dan 0040. Analisa program.
5. Reset Nida seri 500
6. Jalankan program berikut pada alamat memori 0100h :
Code Label Mnemonic Pseudocode
B8 80 00 MOV AX, 0080H
………… MOV DS, AX
… MOV SI, 0100H
MOV AX, 0000H
MOV CX, 0020H
lompat MOV [SI], AH
INC SI
DEC CX
JNZ lompat
INT 20
7. Program berikut merupakan program pengulangan yang didalamnya memiliki
pengulangan.
Code Label Mnemonic Pseudocode
B8 80 00 MOV AX, 0080H
……… MOV DS, AX
…… MOV SI, 01FFH
MOV AL,10
Lompat DEC AL
JZ, Akhir
MOV CX, 0010
Lompat 2 MOV [SI], AL
DEC SI
DEC CX
JNZ, lompat 2
JCXZ, lompat
Akhir INT 20
8. Reset Nida seri 500
VI. TUGAS PENDAHULUAN
1. Apa perbedaan lompat bersyarat dan lompatan tak bersyarat ?
2. Apa yang membedakan antara instruksi lompat dengan pengulangan ?
Jawab:
1. a. Lompatan tak bersyarat adalah lompatan ke lokasi memori tertentu (yang di
kehendaki) tanpa ada pengecekan kondisi tertentu. Ada 3 jenis instruksi lompatan
tak bersyarat, yaitu :
1. Lompatan pendek (short jump) adalah instruksi yang mengizinkan
program melakukan lompatan sejauh-jauhnya  127 byte (127 byte ke
depan atau 128 byte ke belakang). Instruksi lompat pendek ini terdiri
dari 2 byte (1 byte opcode dan 1 byte operand.
2. Lompatan dekat (near jump), sama dengan lompatan pendek, hanya
jangkaunnya lebih panjang  32 Kbyte. Instruksi ini terdiri dari 3 byte,
1 byte opcode dan 2 byte operand untuk menunjukkan alamat lompatan.
3. Lompatan jauh (far jump), instruksi yang mengizinkan program
melakukan lompatan ke seluruh daerah memori. Instruksi lompatan ini
terdiri dari 5 byte, 1 byte opcode, 2 byte pertama operand untuk
menunjukkan alamat offset yang baru dan 2 byte terakhir untuk
menunjukkan alamat segmen yangbaru.
b. Lompatan bersyarat adalah lompatan yang dilakukan ke seluruh daerah memori
dalam segmen memori yang sama. Instruksi lompatan bersyarat biasanya
dilakukan setelah eksekusi pembanding (CMP).
2. Instruksi lompatan pada suatu program akan menyebabkan program tersebut
melompati bagian tertentu pada program dan mengeksekusi instruksi yang
dikehendaki. Operasi loop (pengulangan) digunakan untuk mengulagi proses
tertentu sebanyak cacah tertentu yang telah ditentukan.
VII. Data Hasil Pengamatan
Program 1A

0030 11 22 33 44 55 66 77 88
0040 88 77 66 55 44 33 22 11
0050 99 99 99 99 99 99 99 99

Program 1B

0030 99 99 99 99 99 99 99 99
0040 88 77 66 55 44 33 22 11
0050 11 22 33 44 55 66 77 88

Program 2

Address SI AX DS CX
0100 0000 0080 0080 0000
0103 0000 0080 0080 0000
0105 0100 0080 0080 0000
0108 0100 0000 0080 0000
010B 0100 0000 0080 0020
010E 0100 0000 0080 0020
0110 0101 0000 0080 0020
0111 0101 0000 0080 001F
0112 0101 0000 0080 001F
0114 PROGRAM TERMINATED NORMALLY

Program 3

Address SI AX DS CX
0000 0000 0080 0080 0000
0003 00FF 0080 0080 0000
0005 00FF 0080 0080 0000
0008 00FF 000A 0080 0000
000A 00FF 0009 0080 0000
000C 00FF 0009 0080 0000
000E 00FF 0009 0080 000A
0011 00FF 0009 0080 000A
0013 00FE 0009 0080 000A
0014 00FE 0009 0080 0009
0015 00FE 0009 0080 0009
0017 00FD 0009 0080 0008
0019 PROGRAM TERMINATED NORMALLY
VIII. Analisa Percobaan
Dari data hasil pengamatan, terlihat bahwa instruksi bagian pertama yaitu instruksi
bagian A, program pertama melakukan proses penjumlahan pada alamat 0030
dan 0040. Penjumlahan ini menggunakan instruksi ADC sehingga penjumlahan ini
akan mendeteksi dan turut mengikutkan carry pada penjumlahannya. Isi (data)
pada alamat 0030 dan 0040 harus dimasukkan ke dalam memori SI dan DI
agar dapat diproses lebih lanjut. Hal ini mempermudah proses karena perlu diingat
bahwa data pada alamat 0030 dan 0040 berjumlah lebih dari satu. Hasil dari
penjumlahan disimpan pada register BX. proses penjumlahan dilakukan secara satu
persatu, hal ini dilihat dari adanya perintah JNZ hingga jumlah pada register CX
bernilai nol.
Register CX pada program kali ini merepresentasikan jumlahdata pada
alamat 0030 dan 0040 sebanyak 7 buah data masing-masing. Untuk program
mengurangkan memiliki karakteristik yang sama, perbedaannya hanya terdapat pada
instruksi SBB yang digunakan. Tujuan penggunaan SBB untuk mengurangkan
alamat 0030 dan 0040 dengan menyertakan borrow.Program kedua menunjukan
adanya perulangan. Perulangan ini terjadi sebanyak 20 kali, hal ini sesuai dengan isi
dari register CX. Saat perulangan terjadi maka register CX akan berkurang sebanyak
satu.
Hal ini terlihat adanya instruksi DEC CX yang tertulis dalam program. Proses
perulangan akan berhenti jika nilai register CX sama dengan nol. Data yang
akan diproses merupakan data dari register AX yang bernilai 0000 jika dijalankan
maka program akan menuliskan nilai 00 pada alamat 0100 hingga 20 alamat
sesudahnya. Pengisian data dilakukan secara bertahap naik sebanyak satu
alamat, hal ini ditunjukkan adanya instruksi INC SI dimana SI merupakan alamat
dimana isi register AX akan disalin dan dipindahkan.
Program ketiga memiliki perulangan di dalam perulangan. Perulangan
pertama terdapat pada label Lompat, dan yang kedua terdapat pada label Lompat
2. Dalam label Lompat program akan mengurangi isi register AL hingga nilai
register AL bernilai nol. Saat nilai register AL nol akan lompat kelabel akhir
yang akan mengakhiri program. Untuk label Lompat 2 ragister yang akan
dikurangi adalah register SI dan CX program akan terus mengulang label Lompat
2 selama nilai
perulangan tidak sama dengan nol. Selain itu, saat CX bernilai nol maka program
akan lompat ke label Lompat.
IX. Kesimpulan
1. Penambahan bilangan dapat terjadi apabila menambahkan instruksi ADC.
2. Untuk mengganti fungsi penambahan menjadi pengurangan dibutuhkan pergantian
pada instruksi ADC menjadi SBB.
3. Perulangan program kedua terjadi sebanyak 20 kali, hal ini sesuai dengan isi dari
register CX yaitu 20.
4. Pada program ketiga saat nilai register AL nol maka akan lompat ke label
akhir yang akan mengakhiri program.
DAFTAR PUSTAKA

Haryawan, A., 2007. Buku Pegangan KuliahBahasa Rakitan. Surakarta :


Universitas Pratama Mulia Surakarta.
Saleh, K., 2019. Modul Praktikum Mikroprosesor. Indralaya : Universitas
Sriwijaya.
Sudira, P., 2016. Diknik Elektronika. Yogyakarta : Universitas Negeri Yogyakarta.
8088 PROGRAMMING AND CODING SHEET

Title : Instruksi Kendali bag. 1 Date : 18 November 2019


Programmer : A Abqori Nasrullah

Machine Code Mnemonic


Address Label Comment
0 1 2 3 4 5 Opcode Operand
B8 80 00 MOV AX, 0080 Isi register AX dengan 0080
8E D8 MOV DS, AX Pindahkan isi register AX ke
register DS
BE 30 00 MOV SI, 0030 Isi register SI dengan 0030
BF 40 00 MOV DI, 0040 Isi register DI dengan 0040
BB 50 00 MOV BX, 0050 Isi register BX dengan 0050
B1 07 MOV CL, 07 Isi register CLdengan 07
33 C0 XOR AX,AX Lakukan instruksi
extraordinary or (XOR)
pada register AX dan
register AX
84 24 MOV AH, [SI] Pindahkan isi memori SI ke
register AH
12 25 LOMPAT ADC AH[DI] Jumlahkan dengan carry
register DI dan register AH
88 27 MOV [BX], AH Pindahkan register AH ke
isi memori BX
46 INC SI Inkremen register SI
47 INC DI Inkremen register DI
43 INC BX Inkremen register BX
FE C9 DEC CL Dekremen register CL
75 F3 JNZ LOMPAT Lompat ke label LOMPAT
jika hasil tidak nol
CD 20 INT 20 Eksekusi program
8088 PROGRAMMING AND CODING SHEET

Title : Instruksi Kendali bag.2 Date : 18 November 19


Programmer : A Abqori Nasrullah

Machine Code Mnemonic


Address Label Comment
0 1 2 3 4 5 Opcode Operand
B8 80 00 MOV AX, 0080H Isi register AX dengan 0080
8E D8 MOV DS, AX Pindahkan isi register AX ke
register DS
BE 00 01 MOV SI, 0100H Isi register SI dengan 0100
B8 00 00 MOV AX, 0000H Isi register AL dengan 0000
B9 20 00 MOV CX, 0020H Isi register CX dengan 0020
84 24 LOMPA MOV [SI], AH Isi lokasi memori SI
T dengan register AH
46 INC SI Inkremen register SI
49 DEC CX Dekremen register CX
75 FA JNZ LOMPAT Lompat ke label LOMPAT
jika hasil tidak nol
CD 20 INT 20 Eksekusi program
8088 PROGRAMMING AND CODING SHEET

Title : Instruksi Kendali bag.3 Date : 18 November 2019


Programmer : A Abqori Nasrullah

Machine Code Mnemonic


Address Label Comment
0 1 2 3 4 5 Opcode Operand
B8 80 00 MOV AX, 0080H Isi register AX dengan 0080
8E D8 MOV DS, AX Pindahkan isi register AX ke
register DS
BE FF 01 MOV SI, 01FFH Isi register SI dengan 01FF
B0 0A MOV AL, 10 Isi register AL dengan 10
FE C8 LOMPA DEC AL Dekremen register AL
T
74 08 JZ AKHIR Lompat jika hasil sama
dengan nol ke label AKHIR
B9 0A 01 MOV CX, 0010 Isi register CX dengan 0100
88 04 LOMPA MOV [SI], AL Pindahkan isi register AL ke
T2 isi memori SI
4E DEC SI Dekremen register SI
49 DEC CX Dekremen register CX
75 F3 JNZ LOMPAT 2 Lompat jika hasil tidak nol
ke label LOMPAT 2
E3 F8 JCXZ LOMPAT Lompat ke label LOMPAT
jika CX=0
CD 20 AKHIR INT 20 Eksekusi program

Anda mungkin juga menyukai