MIKROPROSESOR
JAKARTA
2020
MODUL I
INTERUPSI DAN INPUT/OUTPUT
ekinurafifah@gmail.com
BAB 1
PENDAHULUAN
1.1 Tujuan
1. Mampu memahami dan menjelaskan cara kerja mikroprosesor dan menggunakan
Bahasa pemrograman Assembly untuk memprogram mikroprosesor
2. Memahami fungsi dari interupsi pada mikroprosesor
3. Memahami cara meminta masukan dari keyboard dan menampilkan oada layar
1.2 Alat dan Bahan
1. Komputer
2. Aplikasi Emu808
BAB II
LANDASAN TEORI
Pada awal tahun 1980 teknologi VLSI (Vety Large Scale Integration) berkembang
sangat pesat dan digunakan sebagai rangkaian elektronik dalam sebuah mikroprosesor,
yang mampu menggabungkan ratusan ribu komponen elektronik dalam sebuah chip yang
mempunyai ukuran sama dengan chip LSI. Dengan semakin berkembangnya teknologi
pembuatan mikroprosesor dan semakin murahnya biaya produksi yang digunakan,
memungkinkan para insinyur komputer untuk mengembangkan mikrokomputer.
Komputer semacam ini mempunyai ukuran yang lebih kecil daripada televisi portabel
tetapi mempunyai kemampuan hitung yang cukup baik untuk dipakai dalam bisnis,
industri dan ilmu pengetahuan. Mikroprosesor tersebut juga memungkinkan
pengembangan produk-produk seperti intelligent-terminal, automatic teller machine dan
point of sale terminal yang biasa dipakai di toko-toko retail. Mikroprosesor juga banyak
digunakan ebagai rangkaian kontrol dalam industri robot, alat-alat penelitian, dan
peralatan-peralatan rumah sakit. Kemajuan teknologi tersebut juga memungkinkan
mikroprosesor dipakai untuk produk-produk konsumen seperti: programmable
microwave oven, televisi, game-game elektronik dan juga dalam bidang-bidang otomotif.
Isi Mikroprosesor 8086 dibagi menjadi dua berdasarkan fungsinya, yaitu EU (Execution
Unit) dan BIU (Bus Interface Unit). EU memberi instruksi pada BIU untuk memulai dari
mana data yang ingin dieksekusi diambil lalu diterjemahkan menjadi bahasa mesin
sebelum dieksekusi. Fungsinya untuk mengontrol penggunaan data dan instruksi pada
dekoder dan ALU. Excecution Unit tidak terhubung langsung dengan sistem bus, tctapi
dia memproses data melalui Bus Interace Unit seperti yang terlihat pada gambar. BIU
mengurus semua transefer data dan alamat antar bus untuk EU seperti pengiriman alamat,
mengambil instruksi dari memori, membaca dan menulis data ke port maupun memori.
Berikut penjelasan dari isi EU (3.2.1 - 3.2.4) dan BIU (3.2.5 - 3.2.6).
2.1.2.1 Control System
Control System berfungsi mengatur aliran data bus dan alamat bus, menghasilkan
sinyal dalam mikroprosesor untuk melaksanakan instruksi yang diberikan. Control unit
juga mengatur masuk keluamya data dan koneksi antar blok pada system mikroprosesor.
Conditional Flags
Flag-flag ini merepresentasikan hasil dari instruksi proses aritmatika sebagai berikut:
Carry flag (CF)- Mengindikasikan apakah ada data berlebih dari hasil operasi
aritmatika
Auxiliary flag (AF)- Mengindikasikan adanya data berlebih dari data rendah (4-
bit pertama) ke data tinggi (4-bit kedua) pada register
Parity flag (PF)- Menset (nilai 1), jika instruksi menghasilkan sebuah angka genap
Zero flag (ZF) - Menset (nilai 1), jika hasil instruksi adalah 0.
Sign flag (SF) - Menset (nilai 1), jika hasilnya adalah negatif dan bernilai 0 jika
positif
Overflow flag (OF) - Bernilai 1 ketika kapasitas system terlampaui.
Control Flags
Control flags mengatur operasi dari Execution Unit. Berikut penjelasannya :
Trap flag (TF) - Jika di set ke 1 maka program akan berjalan step-by-step
Interrupt flag (IF) mengabaikan interupsi yang terjadi jika bit ini 0.
Direction flag (DF) - Digunakan untuk operasi string. Jika bemilai 1 memori akan
diakses dari tertinggi ke terendah.
DX register - Digunakan untuk menyimpan alamat port I/O untuk instruksi I/O.
Register SP (Stack Pointer, 16 bit) Fungsi: Digunakan untuk operasi stack seperti
menyimpan alamat return saat memanggil subroutine. SP merupakan register
yang secara implisit digunakan oleh perintah PUSH dan POP yaitu menyimpan
dan mengambil kembali dari stack.
Register BP (Base Pointer, 16 bit)Fungsi: Sebagai penunjuk base dalam stack
yang disediakan untuk penyimpanan data. BP juga digunakan si dengan bahasa
pemrograman misalnya Assembler dan C.
Register IP (Instruction Pointer, 16 bit)Fungsi: Register yang berpasangan dengan
CS sebagai register utama untuk menunjukkan baris perintah program. Pada saat
program dijalankan, IP akan langsung menunjuk pada awal program. Code
Segment dan Instruction Pointer berfungsi sebagai program counter ditulis dengan
format CS:IP. Secara umum, kode mesin diletakkan di Code Segment, semua data
diletakkan di Data Segment, dan operasi PUSH dan POP dilakukan di Stack
Segment.
Register SI dan DI (Source Index dan Destination index, 16 bit)Fungsi:
Menyimpan nilai- nilai offset dalam segment data memori pada saat
bersangkutan.
2.1.2.5 Instruction queue
BIU memiliki instruction queue. BIU memiliki 6 bytes instruksi selanjutnya
yang disimpan dalam instruction queue. Maka saat EU menjalankan suatu
instruksi, sudah terdapat instruksi berikutnya pada instruction queue hasilnya
proses eksekusi menjadi lebih cepat. Mengambil instuksi setelahnya dalam
kondisi instuksi sebelumnya masih berjalan disebut pipelining.
MN/MX’ : Minimum/maximum
RQ’/GT1’,RQ’/GT0’ : Request/Grant
HOLD/HOLDA : HOLD indicates that another master has been requesting a local
bus
Bahasa rakitan atau lebih sering dikenal dengan bahasa Assembly adalah bahasa
pemograman tingkat rendah yang dipakai untuk memprogram perangkat keras seperti
mikroprosesor dan mikrokontroler. Bahasa ini merupakan bahasa pemrograman yang
berisi instruksi-instruksi yang diterjemahkan oleh decoder menjadi bahasa mesin yang
dimengerti oleh komputer.
Kolom Editor
2.1.5 Pengertian Interupsi (Interrupt)
- Interupt 00h - 1Fh (0 - 31) adalah interrupt BIOS dan standar di semua komputer
baik yang menggunakan sistem operasi DOS atau bukan. Lokasi Interupt Vector
Table-nya ada di alamat absolut 0000h-007Fh.
- Interupt 20h - FFh (32 - 255) adalah interrupt DOS. Interrupt ini hanya ada pada
komputer yang menggunakan sistem operasi DOS dan Interupt Handler-nya diload
ke memori oleh DOS pada saat DOS digunakan. Lokasi Interupt Vector Tablenya
ada di alamat absolut 07Fh-3FFh.
.MODEL SMALL
.CODE
ORG 100h
Proses :
END Proses
Syntax Highlight
Syntax Highlight
INTERRUPT 20h
Terminate Program
Fungsi : Interupsi 20h berfungsi untuk mengakhiri program dan menyerahkan
kendali sepenuhnya kepada DOS
Register Input : Tidak ada Register Output : Tidak ada
.MODEL SMALL
.CODE
ORG 100h
Proses :
END Proses
Syntax Highlight
.MODEL SMALL
.DATA
ORG 100H
.CODE
START:
END START
Syntax Highlight
Syntax Highlight
DB
Define Bytes
Fungsi : Mendefinisikan isi dari sebuah variabel
Register Input : Tidak Ada. Register Output :
Cara pakai :
Tahun 1978, IBM menciptakan personal komputer PC-XT yang sangat populer
menggunakan mikroprosesor 8086 dan 8088.Keduanya mampu menangani data 16 bit.
Bedanya hanya pada ukuran bus data yang hanya 8 bit untuk 8088 (operasi internal 16bit),
dan 16 bit untuk 8086. Kemudian Intel membut 80186 dan80188 yang juga berisi
perangkat peripheral terprogram. Tahun1982, 80286 adalah prosesor pertama yang dapat
menjalankan perangkat lunak yang ditulis untuk pendahulunya, karena instruksi yang
dimiliki oleh seri sebelumnya semuanya dimilikidan ditambahi dengan instruksi lain.
Kompatibilitas ke atas ini kemudian menjadi ciri khas mikroprosesor Intel. Dalam 6
tahun, ada 15 juta PC-AT yang menggunakan 80286 sebagai CPU.
Setiap mikroprosesor memiliki kade instruksi yang berbeda-beda sesuai dengan yang
direncanakan oleh pabrik pembuatnya. Sehingga suatu program yang ditulis dalam kode instruksi untuk
mikroprosesor tertentu tidak dapat dijalankan untuk semua jenis mikroprosesor yang ada.
Mikrokomputer adalah suatu sistem mikroprosesor, yang minimum terdiri dari chip
mikroprosesor (CPU: Central Processing Unit), ROM (Read Only Memori) yang berisi firmeware
(Program kendali sistem uP), RAM (Random Access Memori) yang berisi program atau data
sementara, dan Piranti input-output (I/O device) yang berguna untuk komunikasi antara sistem
mikroprosesor dengan piranti yang dikendalikan. (komunikasi dengan operator/user). Sistem tersebut
disusun pada suatu PCB (Printed Circuit Board). Mikrokontroler Chip yang didalamnya terkandung
sistem interkoneksi antara Mikroprosesor, RAM, ROM, I/O interface, dan beberapa
peripheral. Mikrokontroler disebut juga On-chip-Peripheral.
Saluran alamat (address bus) diperlukan untuk menentukan suatu lokasi alamat
memori maupun lokasi alamatdari perangkat input/output (Input Output Interface) yang
selalu digunakan dalam suatu sistem mikroprosesor itu sendiri, sebab jumlah saluran yang
ada langsung menentukan banyaknya alamat memori (kapasitas memori) yang dapat
ditanganinya. Pada awal pengembangannya, mikroprosesor buatan Intel dengan tipe 8008
hanya meiliki empat buah saluran alamat, sehingga total alamatmemori yang dapat
ditanganinya sebanyak 16384 alamat. Setelah mengalami pengembangan selanjutnya
sudah mencapai 16saluran alamat sehingga mampu menangani 65536 alamat memori.
Sifat saluran alamat adalah keluaran, sehingga kendali dilakukan dari mikroprosesor
menuju ke perangkat-perangkat ngatan maupun perangkat-perangkat keluaran/masukan
(inputoutput peripheral).
Memori Address
Pada mikroprosesor buatan Zilog dengan tipe Z80 juga memiliki kapasitas
memori sebesar 64 kbyte. Pada saat sekarang sebuah mikroprosesor sudah mampu
menangani memori lebih besar dari 1 Giga byte. Untuk mempermudah serta
menyederhanakan dalam pengaturan maupun penyambungan pada perangkat pendukung
mikroprosesor, maka pengalamatnnya menggunakan sistem bilangan biner. Sehingga
jumlah penyemat (pin) pada IC menjadi jauh lebih sedikit. Untuk menentukan jumlah
total alamat/kapasitas memori yang dapat ditangani oleh suatu mikroprosesor adalah
dengan cara menggunakan rumus sebagai berikut:
Jumlah total alamat = 20 dimana n = jumlah saluran alamat
Penyemat saluran alamat pada suatu mikroprosesor pada umumnya diberi tanda
dengan huruf A, oleh karena jumlah saluran alamat ada 16 buah dan masing-masing
saluran memilki bobot yang berbeda, maka saluran alamat yang berbobot paling rendah
(least significant bit, LSB) diberi tanda A0 dan selanjutnya urut hingga saluran terakhir
yang memiliki bobot terbesar (most significant bit, MSB) diberi tanda A15, dengan
demikian saluran alamat yang terdapat pada mikroprosesor tipe Z80 yang berjumlah 16
buah saluran, masing-masing diberi tanda A0, A1, A2,A3, A4, A5, A6,
.........................A15
I/O Addres
Program 2
Program 3
4.2 Analisa
Bahasa rakitan atau lebih sering dikenal Bahasa rakitan atau lebih umum dikenal
sebagai assembly language adalah bahasa pemrograman tingkat rendah yang digunakan
dalam pemrograman komputer, mikroprosesor, pengendali mikro, dan perangkat lainnya
yang dapat diprogram. Bahasa ini merupakan Bahasa pemrograman yang berisi intruksi-
intruksi yang diterjemahkan oleh decorder menjadi bahasa mesin yang dimengerti oleh
computer. Interupsi adalah suatu permintaan kepada mikroprosesor untuk melakukan
sesuatu. Input pada mikroprosesor sama seperti pada umumnya yaitu dikelola oleh mouse
dan keyboard. Lalu outputnya berupa tampilan pada layer monitor.
Pada percobaan pertama yaitu mencetak huruf ‘A’ ke layar. Header yang digunakan pada
program ini adalah model small, code, dan org 100h. Model small merupakan tanda untuk
memberitahu assembler untuk ukuran dan bentuk memori yang ingin dibuat, pada model
small ini menggunakan bentuk atau ukuran kecil dengan ukuran kurang dari 1 segment
atau 64 kb. Code merupakan keterangan program yang berfungsi untuk menyatakan suatu
perintah didalam bahasa mesin supaya mampu untuk diterjemahkan. ORG 100h
merupakan perintah yang digunakan untuk memberitahukan assembler supaya program
pada saat dijalankan ditaruh pada offset 100h (255 byte) atau dengan kata lain
menyediakan memory kosong 100h byte pada saat program dijalankan. Setelah
menuliskan header, selanjutnya memasukan perintah proses yang digunakan untuk
menampilkan huruf ‘A’ pada layar. Pertama “MOV AH, 02h” perintah ini digunakan
untuk mencetak karakter. Kemudian “MOV DL,’A’ ” perintah untuk mencetak karakter
ASCII berupa huruf ‘A’. Kode ASCII (American Standard Code for Information
Interchange) merupakan kode standar amerika untuk pertukaran informasi atau sebuah
standar internasional dalam pengkodean huruf dan simbol seperti Unicode dan Hex tetapi
ASCII lebih bersifat universal. Tabel code ASCII dapat dilihat pada menu bar aplikasi
Emu8086. Setelah itu “INT 21h” perintah ini berfungsi untuk memerintah cetak karakter
pada MOV DL yang mana untuk mencetak karakter ‘A’. Terakhir adalah INT 20h yaitu
perintah untuk selesai atau menyatakan program selesai. Setelah semua program
dimasukkan, lalu klik emulate, maka akan muncul menu emulator dan original source
code. Klik tombol single step pada emulator untuk mengetahui hasil tiap langkah-langkah
program dan klik tombol run untuk melihat hasil akhir yang akan ditampilkan pada menu
atau layar emulator screen berupa karakter huruf ‘A’.
Pada percobaan kedua yaitu mencetak karakter beserta atribut. Header yang
digunakan adalah model small, code, dan org 100h. Setelah menulis header, selanjutnya
memasukan perintah proses yang digunakan untuk menampilkan karaker beserta artribut
pada layar. Pertama “MOV AH,09h” yaitu nilai servis untuk mencetak karakter berupa
huruf. Selanjutnya “MOV AL,’A’ ” yaitu penjelasan karakter huruf yang akan dicetak.
Lalu “MOV BH,00h” yaitu berupa nomor halaman. Selanjutnya “MOV BL,93h” yaitu
warna artibut dari karakter dimana 9 adalah warna background light “blue” dan 3 adalah
warna font “cyan”. Selanjutnya “MOV CX,03h” yaitu banyaknya karakter yang ingin di
cetak. INT 10h yaitu untuk perintah laksanakan. INT 20 h yaitu untuk perintah selesai.
Setelah semua program dimasukkan, lalu klik emulate, maka akan muncul menu emulator
dan original source code. Klik tombol single step pada emulator untuk mengetahui hasil
tiap langkah-langkah program dan klik tombol run untuk melihat hasil akhir yang akan
ditampilkan pada menu atau layar emulator screen berupa karakter huruf ‘AAA’ berlatar
biru.
Program:
.MODEL SMALL
ORG 100H
.DATA
PSN1 DB "EKI NUR AFIFAH",10,13, '$'
PSN2 DB "201811043", '$'
.CODE
START :
MOV DX,OFFSET PSN1
MOV AH,09H
MOV BL,04H
MOV CX,14H
INT 10H
INT 21H
MOV DX,OFFSET PSN2
MOV AH,09H
MOV CX,9H
MOV BL,04H
INT 10H
INT 21H
INT 20H
BAB V
PENUTUP
5.1 Kesimpulan
ekinurafifah@gmail.com
BAB 1
PENDAHULUAN
1.1 Tujuan
1. Mampu menjelasakan jenis-jenis bilangan : Biner, Oktal, Desimal, Hexadesimal.
2. Memahami perintah dan proses operasi aritmatika pada mikroprosesor
3. Dapat melakukan operasi penjumlahan, pengurangan, perkalian dan pembagian
1.2 Alat dan Bahan
1. Komputer
2. Aplikasi Emu8086
BAB II
LANDASAN TEORI
2.1 Teori Modul
2.1.1 Berbagai Jenis Bilangan
Pada pertambahan diatas dapat dilihat bahwa pertambahan bilangan 1234 dengan
F221 akan menghasilkan nilai 10455. Supaya lebih jelas dapat anda lihat pada
pertambahan binernya dihasilkan bit ke 17, padahal register terdiri atas 16 bit saja.
Operasi pertambahan yang demikian akan menjadikan carry flag menjadi satu, Contoh :
ADC Tujuan,Asal
2.2.3 INC
Perintah INC(Increment) digunakan khusus untuk pertambahan dengan 1. Perintah
INC hanya menggunakan 1 byte memory, sedangkan perintah ADD dan ADC
menggunakan 3 byte. Oleh sebab itu bila anda ingin melakukan operasi pertambahan
dengan 1 gunakanlah perintah INC. Syntax pemakainya adalah :
INC Tujuan
Nilai pada tujuan akan ditambah dengan 1, seperti perintah Tujuan:=Tujuan+1
dalam Turbo Pascal. Tujuan disini dapat berupa suatu register maupun memory. Contoh
: perintah INC AL akan menambah nilai di register AL dengan 1. Adapun flag yang
terpengaruh oleh perintah ini adalah OF,SF,ZF,AF dan PF.
2.3.2 SBB
Seperti pada operasi penambahan, maka pada operasi pengurangan dengan bilangan
yang besar(lebih dari 16 bit), bisa anda gunakan perintah SUB disertai dengan
SBB(Substract With Carry). Perintah SBB digunakan dengan syntax:
SBB Tujuan,Asal
Perintah SBB akan mengurangkan nilai Tujuan dengan Asal dengan cara yang sama
seperti perintah SUB, kemudian hasil yang didapat dikurangi lagi dengan Carry Flag
(Tujuan:=TujuanAsal-CF).
2.3.3 DEC
Perintah DEC(Decrement) digunakan khusus untuk pengurangan dengan 1. Perintah DEC
hanya menggunakan 1 byte memory, sedangkan perintah SUB dan SBB menggunakan 3
byte. Oleh sebab itu bila anda ingin melakukan operasi pengurangan dengan 1 gunakanlah
perintah DEC. Syntax pemakaian perintah dec ini adalah:
DEC Tujuan
Nilai pada tujuan akan dikurangi 1, seperti perintah Tujuan:=Tujuan-1 dalam Turbo
Pascal. Tujuan disini dapat berupa suatu register maupun memory. Contoh : perintah DEC
AL akan mengurangi nilai di register AL dengan 1. 3.3.4. Contoh Program 2 Pengurangan
.MODEL SMALL
.CODE
ORG 100h
Proses :
MOV AH,15h ; AH:=15h
MOV AL,4h ; AL:=4
SUB AH,AL ; AH:=AH-AL, jadi AH=11h
MOV AX,1234h ; NIlai AX:=1234h dan carry=0
MOV BX,0F221h ; Nilai BX:=F221h dan carry=0
SUB AX,BX ; AX:=AX-BX, jadi nilai AX=2013h dan carry = 1
MOV AX,1234h ; AX = 1234h CF = 1
MOV BX,0001h ; BX = 0001h CF = 1
MOV CX,5678h ; BX = 5678h CF = 1
MOV DX,5679h ; DX = 5679h CF = 1
SUB CX,DX ; CX = FFFFh CF = 1
SBB AX,BX ; AX = AX-BX-CF = 1232 dan carry = 0
DEC AL ; AL:=AL-1, nilai pada AL dikurang 1
INT 20h
END Proses
Pada dasarnya hanya ada 5 macam operasi aritmatik yang dapat dilaksanakan oleh
mikroprosesor Z80. Operasi aritmatik tersebut adalah penjumlahan, pengurangan, tambah
satu, kurang satu, dan membandingkan. Operasi penjumlahan itu ada dua macam yaitu
ADD dan ADC (penjumlahan dengan carrynya). Operasi pengurangan juga ada dua
macam yaitu SUB dan SBC (pengurangan dengan carrynya). Selain itu dapat dibedakan
operasi 8 bit dengan operasi 16 bit. Untuk operasi 8 bit salah satu datanya harus berada
pada register A (Akumulator).
Instruksi ADD digunakan untuk melakukan operasi penjumlahan 8 bit dan 16 bit. Ada
38 jenis perintah penjumlahan pada mikroprosesor Z-80 CPU. Pada operasi aritmetika 8
bit register A (akumulator) ditambahkan dengan isi sebuah register 8 bit atau data
immediate 8 bit, atau data pada satu lokasi memori yang alamatnya dicatat oleh register
HL, IX, atau IY. Sedangkan pada operasi aritmetika 16 bit register HL, IX, dan IY
berfungsi sebagai akumulator yang dapat ditambahkan dengan isi register BC, DE, HL,
SP. Untuk lebih jelasnya perhatikan Tabel 1 berikut ini:
2. Instruksi ADC (ADD With Carry) dan SBC (Sub With Carry)
Instruksi ADC digunakan untuk menambahkan isi register A dengan data 8 bit
yang berada pada suatu register atau data immediate atau data suatu memori dan mengikut
sertakan bit Carry (C). Instruksi ADC juga digunakan untuk menambahkan isi register
HL dengan data 16 bit yang berada pada register BC, DE, HL, dan SP dengan mengikut
sertakan bit Carry Flag (C).
Instruksi SBC digunakan untuk mengurangkan isi register A dengan data 8 bit
yang berada pada suatu register atau data immediate atau data suatu memori dengan
mengikutsertakan bit carry flag. Instruksi SBC juga digunakan untuk mengurangkan isi
register HL dengan data 16 bit yang berada pada register BC, DE, HL, dan SP dengan
mengikutsertakan bit Carry Flag (Cy). Hasil dari kedua bentuk pengurangan tersebut
dicatat di Register A dan Register HL.
Tabel 4. Instruksi SBC
Instruksi INC digunakan untuk menambah isi suatu register atau memori dengan
satu nilai. Instruksi ini sangat potensial digunakan untuk membuat counter cacah naik.
a. Instruksi DAA
Instruksi DAA digunakan untuk merubah isi register A ke bent uk BCD. Instruksi
DAA digunakan untuk memberi faktor koreksi pada saat bekerja dengan bilangan
desimal. DAA dalam melakukan koreksi bekerja sbb :
Jika Bit b3, b2, b1, b0 > 9 atau ada Half Carry (H = 1) maka bit b3, b2, b1, b0 ditanbah
dengan 0110 = 6.
Jika Bit b7, b6, b5, b4 > 9 atau ada Carry (C = 1) maka bit b7, b6, b5, b4 ditanbah
dengan 0110 = 6.
b. Instruksi CPL ( Complement)
5. Instruksi CP (Compare)
Instruksi AND, OR, dan XOR digunakan untuk melakukan operasi logika isi dari
akumulator terhadap data suatu register 8 bit atau data immediate, atau data suatu lokasi
memori.
V : untuk LOGIKA OR
Pada dasarnya hanya ada 5 macam operasi aritmatik yang dapat dilaksanakan oleh
mikroprosesor Z80. Operasi aritmatik tersebut adalah penjumlahan, pengurangan, tambah
satu, kurang satu, dan membandingkan. Operasi penjumlahan itu ada dua macam yaitu
ADD dan ADC (penjumlahan dengan carrynya). Operasi pengurangan juga ada dua
macam yaitu SUB dan SBC (pengurangan dengan carrynya). Selain itu dapat dibedakan
operasi 8 bit dengan operasi 16 bit. Untuk operasi 8 bit salah satu datanya harus berada
pada register A (Akumulator).
Instruksi ADD digunakan untuk melakukan operasi penjumlahan 8 bit dan 16 bit.
Ada 38 jenis perintah penjumlahan pada mikroprosesor Z-80 CPU. Pada operasi
aritmetika 8 bit register A (akumulator) ditambahkan dengan isi sebuah register 8 bit atau
data immediate 8 bit, atau data pada satu lokasi memori yang alamatnya dicatat oleh
register HL, IX, atau IY.
Instruksi ADC (ADD With Carry) dan SBC (Sub With Carry)
Instruksi ADC digunakan untuk menambahkan isi register A dengan data 8 bit
yang berada pada suatu register atau data immediate atau data suatu memori dan mengikut
sertakan bit Carry (C).
Instruksi INC digunakan untuk menambah isi suatu register atau memori dengan
satu nilai. Instruksi ini sangat potensial digunakan untuk membuat counter cacah naik.
PROGRAM 1
PROGRAM 2
PROGRAM 3
PROGRAM 4
4.2 ANALISA
Pada percobaan modul dua dengan judul Operasi Aritmatika pada Mikroprosesor.
Operasi Aritmatika merupakan penjumlahan dan juga pengurangan, sementara
perkalian dan pembagian merupakan operasi selanjutnya yang dikembangkan dari kedua
operasi dasar tersebut. Pada praktikum ini memiliki tujuan antara lain: mampu
menjelaskan jenis-jenis bilangan (biner, octal, decimal, hexadecimal), memahami
perintah dan proses aritmatika pada mikroprosesor, dan dapat melakukan operasi
penjumlahan, pengurangan, perkalian dan pembagian. Bilangan biner adalah bilangan
yang hanya terdiri atas 2 kemungkinan (berbasis dua), yaitu 0 dan 1. Karena berbasis 2,
maka pengkorversian ke dalam bentuk desimal adalah menjumlahkan tiap suku yang tiap
suku ke-n (n=0 dari paling kanan) dikalikan dengan 2 n. Bilangan Oktal adalah bilangan
dengan basis 8, artinya angka yang dipakai hanyalah antara 0 -7. Bilangan desimal adalah
bilangan yang terdiri atas 10 buah angka (berbasis 10), yaitu angka 0-9. Dengan basis
sepuluh ini maka suatu angka dapat dijabarkan dengan perpangkatan sepuluh. Bilangan
hexadesimal merupakan bilangan yang berbasis 16. Dengan angka yang digunakan
berupa: 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F. Dalam pemrograman assembler, jenis bilangan
ini boleh dikatakan yang paling banyak digunakan. Hal ini dikarenakan mudahnya
pengkonversian bilangan ini dengan bilangan yang lain, terutama dengan bilangan biner
dan desimal. Karena berbasis 16, maka 1 angka pada hexadesimal akan menggunakan 4
bit.
Pada percobaan penjumlahan memakai header model small, code, org 100h.
Model small berarti menggunakan bentuk atau ukuran small dengan ukuran kurang dari
1 segment atau 64 kb. Code digunakan untuk menyimpan program yang nantinya akan
dijalankan. Org 100h menyediakan memory kosong 100h byte pada saat program
dijalankan. Setelah menuliskan hader, selanjutnya menuliskan program MOV AH,15h
perintah ini berfungsi untuk mencetak karakter angka 15 bilangan hexadecimal (8bit).
MOV AL, 4h merupakan perintah untuk mencetak karakter angka 4 bilangan
hexadecimal (8bit). ADD AH,AL perintah ini berfungsi untuk menjumlahkan kedua
bilangan hexadesimal tersebut kemudian hasilnya akan ditaruh di AH yaitu 19 dalam
bilangan hexadesimal. MOV AX,1234h merupakan perintah untuk mencetak karakter
angka 1234 bilangan hexdesimal (16bit). MOV BX,0F221h merupakan perintah untuk
mencetak karakter angka F221 bilangan hexdesimal (16bit). ADD AX,BX perintah ini
berfungsi untuk menjumlahkan kedua bilangan hexadesimal tersebut kemudian hasilnya
akan ditaruh di AX yaitu 0445 dalam bilangan hexadesimal dengan carry=1. MOV
AX,1234h merupakan perintah untuk mencetak karakter angka 1234 bilangan hexdesimal
(16bit) dengan penambahan carry flag= 1. MOV BX,9ABCh merupakan perintah untuk
mencetak karakter angka 9ABC bilangan hexdesimal (16bit) dengan penambahan carry
flag=1. MOV CX,5678h merupakan perintah untuk mencetak karakter angka 5678
bilangan hexdesimal (16bit) dengan penambahan carry flag= 1. MOV DX,0DEF0h
merupakan perintah untuk mencetak karakter angka DEF0 bilangan hexdesimal (16bit)
dengan penambahan carry flag= 1. ADD CX,DX perintah ini berfungsi untuk
menjumlahkan kedua bilangan hexadesimal tersebut kemudian hasilnya akan ditaruh di
AX yaitu 3568 dalam bilangan hexadesimal dengan carry=1. ADC AX,BX perintah ini
berfungsi untuk menjumlahkan kedua bilangan hexadecimal dan carry flag tersebut
kemudian hasilnya akan ditaruh di AX yaitu ACF1 dalam bilangan hexadesimal dengan
carry=0. INC AL merupakan perintah pertambahan angka 1 sehingga nilai pada AL
ditambah dengan angka 1. INT 20h merupakan perintah untuk menyelesaikan program
dan kembali ke DOS. Pada tugas akhir, menginput angka pertama dan selanjutnya
menginput angka kedua, setelah itu akan muncul hasil dari penjumlahan.
Pada percobaan pengurangan menggunakan header model small, code, dan org
100h dengan fungsi sama seperti header pada penjumlahan. Setelah itu menuliskan
program MOV AH,15h; MOV AL,4h; SUB AH,AL; MOV AX,1234h; MOV
BX,0F221h; SUB AX,BX; MOV AX,1234h; MOV BX,0001h; MOV CX,5678h; MOV
DX,5679h; SUB CX,DX; SBB AX,BX; DEC AL; INT 20h. fungsi dari perintah tersebut
sama seperti pada penjumlahan hanya saja pada pengurangan terdapat SUB, SBB, dan
DEC. Pada tugas akhir, menginput angka pertama dan selanjutnya menginput angka
kedua, setelah itu akan muncul hasil dari pengurangan sebanyak dua digit.
Operasi Perkalian yaitu suatu proses perkalian angka dalam Bahasa assembler
menggunakan perintah MUL dengan syntax MUL Sumber. Pada perintah MUL
mempunyai dua kemungkinan yang akan terjadi sesuai dengan jenis perkalian 8 bit atau
16 bit. Hasil yang didapat oleh perintah MUL akan selalu disimpan pada register AX.
Percobaan yang kedua yaitu operasi pembagian. Operasi Pembagian yaitu suatu proses
pembagian angka dalam Bahasa assembler menggunakan perintah DIV dengan sytax DIV
Sumber/Data. Pada perintah DIV BH, Jika sumber merupakan operand 8 bit, maka
computer akan mengambil nilai pada register AX dan membaginya dengan nilai BH.
Hasil pembagian dari 8 bit akan disimpan pada register AL dan sisa baginya akan
disimpan pada register AH. Pada perintah DIV BX, Jika sumber merupakan operand 16
bit, maka komputer akan mengambil nilai yang terdapat pada register DX: AX dan
membaginya dengan nilai BX. Hasil pembagian dari 16 bit akan disimpan pada register
AX dan sisa dari pembagian akan disimpan pada register DX.
Padaa percobaan perkalian ini menggunakan header model small, org 100h, dan
code dengan fungsi yang sama seperti program sebelumnya. Pada program ini terdapat
perintah “JMP PROSES” perintah ini berfungsi untuk melompati proses. A DW 01EFH
dan B DW 02EFH sebagai define word. HSLLO DW ? dan HSLHI DW ? untuk membuat
variable bebas agar tidak langsung dieksekusi. Selanjutnya masukkan perintah proses
untuk operasi perkalian, MOV AX,A; MUL B; MOV HSLLO,AX; MOV HSLHI,DX;
INT 20H. Pada percobaan perkalian terdapat perintah MUL yang mempunyai dua
kemungkinan yang akan terjadi sesuai dengan jenis perkalian 8 bit atau 16 bit. Hasil yang
didapat oleh perintah MUL akan selalu disimpan pada register AX. Pada tugas akhir,
menginput angka pertama dan selanjutnya menginput angka kedua, setelah itu akan
muncul hasil dari perkalian sebanyak dua digit.
Pada percobaan pembagian menggunakan header model small, org 100h, dan code
yang memiliki fungsi yang sama dengan percobaan sebelumnya. Sama halnya dengan
program perkalian pada program ini juga terdapat perintah JMP PROSES; A DW 01EFH
dan B DW 2h; HSL DW ? dan Sisa DW ? yang fungsi perintahnya sama. Selanjutnya
masukkan perintah proses untuk operasi pembagian, SUB DX,DX; MOV AX,A; DIV B;
MOV HSL,AX; MOV Sisa ,DX; INT 20h. Pada program pembagian terdapat DIV B yaitu
perintah untuk membagi nilai A dengan nilai B. Lalu terdapat MOV HSL,AX yang
artinya mengisi HSL dengan data pada register AX dimana AX bernilai sebesar 00F7H
atau dalam decimal 247D. MOV SISA,DX yang artinya mengisi variabel SISA dengan
data pada DX dimana nilai DX yaitu 0001 sehingga SISA akan berisi 0001. Pada tugas
akhir, menginput angka pertama dan selanjutnya menginput angka kedua, setelah itu akan
muncul hasil dari pembagian sebanyak dua digit.
4.3 TUGAS AKHIR
PENJUMLAHAN
Program:
.MODEL SMALL
.CODE
ORG 100H
START :
JMP INPUT
BLNG1:
MOV AH,09H
MOV DX,OFFSET PTH1
INT 21H
MOV AH,01H
INT 21H
MOV BL,AL
SUB BL,30H
MOV AH,01H
INT 21H
MOV BH,AL
SUB BH,30H
BLNG2:
MOV AH,09H
MOV DX,OFFSET PTH2
INT 21H
MOV AH,01H
INT 21H
ADD BL,AL
SUB BL,30H
MOV AH,01H
INT 21H
ADD BH,AL
SUB BH,30H
OUTPUT:
MOV AH,09H
MOV DX,OFFSET HASIL
INT 21H
MOV AH,02H
MOV DL,BL
ADD DL,30H
INT 21H
MOV AH,02H
MOV DL,BH
ADD DL,30H
INT 21H
INT 20H
END START
PENGURANGAN
Program:
.MODEL SMALL
.CODE
ORG 100H
INPUT:
BLG1:
MOV AH,09H
INT 21H
MOV AH,01H
INT 21H
MOV BL,AL
ADD BL,30H
MOV AH,01H
INT 21H
MOV BH,AL
ADD BH,30H
BLG2:
MOV AH,09H
INT 21H
MOV AH,01H
INT 21H
SUB BL,AL
ADD BL,30H
MOV AH,01H
INT 21H
SUB BH,AL
ADD BH,30H
OUTPUT:
MOV AH,09H
INT 21H
MOV AH,02H
MOV DL,BL
SUB DL,30H
INT 21H
MOV AH,02H
MOV DL,BH
SUB DL,30H
INT 21H
INT 20H
END START
PERKALIAN
Program:
.MODEL SMALL
.STACK 100h
.DATA
.CODE
Start:
MOV DS, AX
INT 21h
PH1:
INT 21h
CMP AL,0dh
JE INPUT1
MOV AH,0
SUB AL,30h
PUSH AX
MOV AX,10d
MUL BX
POP BX
ADD BX,AX
JMP PH1
Input1:
PUSH BX
MOV AH,09h
INT 21h
MOV BX,0
PH2:
INT 21h
CMP AL,0dh
JE MULT
MOV AH,0
SUB AL,30h
PUSH AX
MOV AX,10d
MUL BX
POP BX
ADD BX,AX
JMP PH2
Mult:
POP AX
MUL BX
PUSH AX
MOV AH,09h
INT 21h
POP AX
MOV CX,0
MOV DX,0
MOV BX,10d
JMP WRONG
Wrong:
MOV DX,0
DIV BX
PUSH DX
MOV DX,0
INC CX
OR AX,AX
JNE WRONG
Ans:
POP DX
ADD DL,30h
MOV AH,02h
INT 21h
LOOP ANS
End Start
PEMBAGIAN
Program:
.MODEL SMALL
.STACK 100h
.DATA
ANGKA1 DB "MASUKKAN ANGKA1 : $"
ANGKA2 DB 13,10, "MASUKKAN ANGKA2 : $"
HASIL DB 13,10, "HASILNYA : $"
.CODE
start:
MOV AX, DATA
MOV DS, AX
MOV DX, OFFSET ANGKA1
MOV AH, 09h
INT 21h
ph1:
MOV AH, 01h
INT 21h
CMP AL,0dh
JE input1
MOV AH,0
SUB AL,30h
PUSH AX
MOV AX,10d
MUL BX
POP BX
ADD BX,AX
JMP PH1
input1:
PUSH BX
MOV DX,OFFSET ANGKA2
MOV AH,09h
INT 21h
MOV BX,0
ph2:
MOV AH,01h
INT 21h
CMP AL,0dh
JE DIVD
MOV AH,0
SUB AL,30h
PUSH AX
MOV AX,10d
MUL BX
POP BX
ADD BX,AX
JMP PH2
divd:
POP AX
MOV DX, 0
DIV BX
PUSH AX
MOV DX,OFFSET HASIL
MOV AH,09h
INT 21h
POP AX
MOV CX,0
MOV DX,0
MOV DX,10d
JMP WRONG
wrong:
MOV DX, 0
DIV BX
PUSH DX
MOV DX,0
INC CX
OR AX,AX
JNE WRONG
ans:
POP DX
ADD DL,30h
MOV AH,02h
INT 21h
LOOP ANS
end start
BAB V
PENUTUP
5.1 Kesimpulan
Dari Percobaan yang dilakukan dapat disimpulkan, bahwa:
1. Jenis-jenis bilangan:
. Bilangan biner adalah bilangan yang hanya terdiri atas 2 kemungkinan
(berbasis dua), yaitu 0 dan 1. Karena berbasis 2, maka pengkorversian ke
dalam bentuk desimal adalah menjumlahkan tiap suku yang tiap suku ke-
n (n=0 dari paling kanan) dikalikan dengan 2n.
Bilangan Oktal adalah bilangan dengan basis 8, artinya angka yang
dipakai hanyalah antara 0 -7.
Bilangan desimal adalah bilangan yang terdiri atas 10 buah angka
(berbasis 10), yaitu angka 0-9. Dengan basis sepuluh ini maka suatu angka
dapat dijabarkan dengan perpangkatan sepuluh.
Bilangan hexadesimal merupakan bilangan yang berbasis 16. Dengan
angka yang digunakan berupa: 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F.
2. Operasi aritmatika pada mikroprosesor terdapat 4, yaitu:
Operasi penambahan, terdapat perintah ADD, ADC, dan INC
Operasi pengurangan, terdapat perintah SUB, SBB, DEC
Operasi perkalian, terdapat perintah MUL
Operasi pembagian, terdapat perintah DIV
3. Operasi penjumlahan, pengurangan, perkalian, serta pembagian memiliki perintah
yang berbeda-beda.
5.2 Saran
ekinurafifah@gmail.com
BAB 1
PENDAHULUAN
1.1 Tujuan
1. Memahami perintah dan proses operasi logika pada mikroprosesor
2. Dapat melakukan operasi logika NOT, AND, OR dan XOR pada
mikroprosesor
3. Memahami perintah dan proses operasi manipulasi bit pada mikroprosesor
4. Dapat melakukan manipulasi bit geser kiri dan geser kanan
1.2 Alat dan Bahan
1. Komputer
2. Aplikasi Emu8086
BAB II
LANDASAN TEORI
2.1 Teori Modul
2.1.1 Operasi Logika
2.1.1.1 Gerbang NOT
Operator NOT akan menginvers suatu nilai seperti yang terlihat pada table dibwah ini.
A NOT A
0 1
1 0
Operasi Not di dalam assembler, digunakan dengan syntax :
NOT (Tujuan/Sumber)
Hasil dari operasi NOT ini akan disimpan pada Tujuan, sebagai contoh, instruksi
NOT AL,3Fh akan menghasilkan nilai C0h bagi AL. Mungkin masih ada pembaca yang
bingung dengan operasi ini. Baiklah untuk lebih jelasnya kita lihat operasi di atas secara
per bit.
Hexadesimal : 3 F
Biner : 0011 1111
_______________________ NOT
Hexadesimal : C 0
Biner : 1100 0000
2.1.1.3 Gerbang OR
Operator logik OR akan menghasilkan nilai nol bila kedua operannya bernilai nol
dan satu bila salah satunya bernilai satu.
A B A OR B
0 0 0
0 1 1
1 0 1
1 1 1
Akan menghasilkan nilai 07h pada register AX. Operasi detilnya dapat dilihat
di bawah ini.
3Fh : 0000 0000 0011 1111
SHR 1 : 0000 0000 0001 1111 (=1Fh)
SHR 2 : 0000 0000 0000 1111 (=0Fh)
SHR 3 : 0000 0000 0000 0111 (=07h)
2.2 Teori Penunjang
Terdapat 12 instruksi yang memberi kemampuan untuk memanipulasi bit biner
pada mikroprosesor 8086/8088. Instruksi ini mencakup operasi logika, shift dan rotasi.
1. Gerbang NOT
Operator NOT akan menginvers suatu nilai seperti yang terlihat pada gambar 10.1.
Hasil dari operasi not ini akan disimpan pada tujuan, sebagai contoh, instruksi NOT
AL,3Fh akan menghasilkan nilai C0h bagi AL. Mungkin masih ada pembaca yang
bingung dengan operasi ini. Baiklah untuk lebih jelasnya kita lihat operasi di atas secara
per bit.
Operasi Negasi
2. Gerbang AND
Operator AND akan menghasilkan nilai nol bila salah satu operandnya bernilai nol.
Dan hanya akan bernilai satu bila kedua operandnya bernilai satu.
Gambar 10.2. Tabel Operator AND
AND Tujuan,Sumber
Hasil dari operasi AND ini akan disimpan pada Tujuan, sebagai contoh, instruksi:
MOV AL,3Fh
MOV BL,1Ah
AND AL,BL
Ingatlah! Setiap bit yang di AND dengan 0 pasti menghasilkan bit 0 juga, sedangkan
setiap bit yang di AND dengan 1 akan menghasilkan bit itu sendiri.
3. Gerbang OR
Operator logik OR akan menghasilkan nilai nol bila kedua operannya bernilai nol
dan satu bila salah satunya bernilai satu.
Gambar 10.3. Tabel Operator OR
OR Tujuan,Sumber
Hasil dari operasi OR ini akan disimpan pada Tujuan, sebagai contoh, instruksi:
MOV AL,3Fh
MOV BL,1Ah
OR AL,BL
4. Gerbang XOR
Operator XOR akan menghasilkan nol untuk dua nilai yang sama nilainya dan satu
untuk yang berbeda.
Gambar 10.4. Tabel Operator XOR
XOR Tujuan,Sumber
Hasil dari operasi XOR ini akan disimpan pada Tujuan, sebagai, contoh instruksi:
MOV AX,0A12h
XOR AX,AX
Hasil operasi XOR diatas pasti akan menghasilkan nilai 0 bagi register AX.
Ingatlah! Setiap bilangan yang di XOR dengan bilangan yang sama pasti menghasilkan
bilangan 0.
5. TEST
Perintah Test digunakan untuk mengetahui nilai pada suatu bit, dengan syntax:
TEST Operand1,Operand2
Perintah test akan mengAND kedua nilai operand, tetapi hasil yang didapatkan tidak
akan berpengaruh terhadap nilai kedua operand tersebut.
Setelah perintah Test dilaksanakan yang akan terpengaruh adalah Flags, sehingga
perintah ini sering diikuti dengan perintah yang berhubungan dengan kondisi flags.
Adapun flags yang terpengaruh adalah CF,OF,PF,ZF,SF dan AF.
TEST AX,0Fh
JNZ Proses ; Lompat jika Zerro flag 0
Pada perintah diatas komputer akan menuju ke label Proses bila ada satu bit atau lebih
dari AX yang sama dengan 0Fh. Bila diikuti dengan perintah JC Proses, maka komputer
akan menuju ke label proses bila keempat byte rendah pada AL semuanya 1(?F).
Operator SHL akan menggeser operand1 ke kiri sebanyak operand2 secara per bit.
Kemudian bit kosong yang telah tergeser di sebelah kanannya akan diberi nilai nol.
Operator SHL digunakan dengan syntax:
SHL Operand1,Operand2
Supaya lebih jelas bisa anda lihat pada gambar 10.5. Operand2 harus digunakan register
CL bila pergeseran yang dilakukan lebih dari satu kali.
MOV AX,3Fh
MOV CL,3
SHL AX,CL ; Geser 3 bit ke kiri
Akan menghasilkan nilai F8h pada register AX. Operasi detilnya dapat dilihat di bawah
ini.
Operator SHR akan menggeser operand1 ke kanan sebanyak operand2 secara per bit
dan menambahkan nilai nol pada bit yang tergeser seperti halnya pada operator SHL.
Operator SHR digunakan dengan syntax:
SHR Operand1,Operand2
Supaya lebih jelas anda bisa lihat pada gambar 10.6. Operand2 harus digunakan register
CL bila pergeseran yang dilakukan lebih dari satu kali.
Gerbang NOT
Operator NOT akan menginvers suatu nilai, hasil dari operasi not ini akan
disimpan pada tujuan.
Gerbang AND
Operator AND akan menghasilkan nilai nol bila salah satu operandnya bernilai nol.
Dan hanya akan bernilai satu bila kedua operandnya bernilai satu.
Gerbang OR
Operator logik OR akan menghasilkan nilai nol bila kedua operannya bernilai nol
dan satu bila salah satunya bernilai satu.
SHL (Shift Left)
Operator SHL akan menggeser operand1 ke kiri sebanyak operand2 secara per bit.
Kemudian bit kosong yang telah tergeser di sebelah kanannya akan diberi nilai nol.
SHR (Shift Right)
Operator SHR akan menggeser operand1 ke kanan sebanyak operand2 secara per
bit dan menambahkan nilai nol pada bit yang tergeser seperti halnya pada operator SHL.
BAB III
METODE PRAKTIKUM
3.1 Langkah Percobaan
1. Nyalakan komputer, kemudian Buka aplikasi dan jalankan Aplikasi emulator
8086
2. Kemudian tulis dan jalankan program yang sudah dibuat pada aplikasi emulator
3. Kemudian screen shoot hasil program
4. Hasil screen shoot pada Program 1-6 dimasukkan dalam laporan praktikum
5. Kerjakan tugas akhir berdasarkan materi yang diberikan. Tambahkan keterangan
pada perintah-perintah yang diberikan pada mikroprosesor. Kerjakan masing-
masing.
6. Hasil tugas akhir discreen shot dan dilampirkan pada laporan praktikum.
BAB IV
HASIL DAN ANALISA
Operasi Logika adalah operator yang digunakan untuk membandingkan dua nilai
boolean. Biasanya digunakan untuk menggabungkan hasil dari operator pembanding.
Boolean semua hubungan logika antara variable variable biner dapat dijelaskan oleh tiga
operasi logika dasar yaitu: Operasi NOT, Operasi AND, dan Operasi OR. Manipulasi Bit
adalah tindakan memanipulasi bit atau potongan data lain yang lebih pendek dari sebuah
kata secara algoritma. Bit atau Binary Digit (Digit Biner) adalah satuan unit data terkecil
dalam komputasi digital yang pada dasarnya terdiri dari satu digit biner (bisa berupa nilai
0 ataupun 1). Biner merupakan sistem bilangan yang berbasis dua yaitu hanya terdiri dari
angka 0 dan 1 saja. Pada praktikum ini terdapat 6 percobaan yaitu gerbang NOT, gerbang
AND, gerbang OR, gerbang XOR, manipulasi bit SHL, dan manipulasi bit SHR.
Pada percobaan pertama yaitu gerbang NOT, gerbang NOT adalah gerbang yang
akan menginvers nilai inputnya, jika nilai input pada gerbang NOT 1 maka outpunya akan
menjadi 0, begitu pula sebaliknya. Pada program terdapat header (MODEL SMALL,
CODE, ORG 100h), setelah menulis header selanjutnya menuliskan instruksi program
yaitu MOV AL,3FH yang akan meng-input pada AL sebesar 3FH atau jika dalam biner
0011 1111, kemudian NOT AL untuk meng invers nilai AL menjadi C0H atau jika dalam
biner 1100 0000, yang artinya hanya membuat yang tadinya 1 menjadi 0 dan yang 0
menjadi 1 INT 20H untuk mengakhiri program.
Pada percobaan kedua yaitu gerbang AND, gerbang AND adalah gerbang yang
memerlukan 2 atau lebih masukan untuk menghasilkan hanya 1 keluaran, dimana apabila
inputan sama maka nilai outputan sama dengan inputan sedangkan apabila inputan
beerbeda maka outputan berlogika 0 atau disebut dengan operasi perkalian. Pada program
terdapat header (MODEL SMALL, CODE, ORG 100h), setelah menulis header
selanjutnya menuliskan intruksi program yaitu MOV AL,3FH akan mengisi register AL
sebesar 3FH atau dalam biner 0011 1111, kemudian MOV BL,5BH akan mengisi
register BL sebesar 5BH atau dalam biner 0101 1011, AND AL,BL akan mengoperasi
AND kan register AL dan BL yang hasilnya kan diletakkan pada register AL dengan hasil
sebesar 1BH atau dalam biner 0001 1011 dan INT 20H untuk Exit atau mengakhiri
program.
Pada percobaan ketiga yaitu gerbang OR, gerbang OR adalah operasi gerbang
yang memerlukan 2 masukan (Input) untuk menghasilkan hanya 1 Keluaran (Output) dan
akan menghasilkan nilai nol bila kedua operannya bernilai nol dan satu bila salah satunya
atau keduanya bernilai satu. Pada program terdapat header (MODEL SMALL, CODE,
ORG 100h), setelah menulis header selanjutnya menuliskan intruksi program yaitu MOV
AL,3FH akan menginput ke register AL sebesar 3FH atau 0011 1111, kemudia MOV
BL,5AH akan menginput ke register BL sebesar 5AH atau 0101 1010, dan OR AL,BL
akan mengoperasi OR kan register AL dan BL dengan hasil yang akan masuk pada AL
sebesar 7FH atau 0111 1111 dan INT 20H adalah Exit Program.
Pada percobaan keempat yaitu gerbang XOR, gerbang XOR adalah gerbang yang
memerlukan 2 Masukan (Input) untuk menghasilkan hanya 1 Keluaran (Output) dan akan
menghasilkan nol untuk kedua nilai sama dan akan menghasilkan satu untuk nilai yang
berbeda. Pada program terdapat header (MODEL SMALL, CODE, ORG 100h), setelah
menulis header selanjutnya menuliskan intruksi program yaitu MOV AX,0A12H adalah
memasukkan nilai pada register AX sebesar 0A12H atau jika dalam biner 0000 1010
0001 0010, dan XOR AX,AX akan meng exclusive or kan register AX dan menjadi
0000H atau 0000 0000 0000 0000, karena AX di pertemukan dengan AX maka hasilnya
adalah 0 dan INT 20H untuk Exit Program.
Pada percobaan kelima yaitu manipulasi bit SHL (shift left), manipulasi bit SHL
adalah tindakan memanipulasi bit atau potongan data lain yang lebih pendek dari sebuah
kata secara algoritma yang akan menggeser operand1 ke kiri sebanyak operand2 secara
per bit. Pada program terdapat header (MODEL SMALL, CODE, ORG 100h), setelah
menulis header selanjutnya menuliskan intruksi program yaitu MOV AX,3FH yang
artinya memasukkan nilai pada register AX sebesar 3FH. MOV CL,3 artinya register CL
sebesar 3. SHL AX,CL artinya AX di geser 3 bit ke kiri maka nilai AX menjadi 01F8H.
Pada percobaan keenam yaitu manipulasi bit SHR (shift right), manipulasi SHR
adalah tindakan memanipulasi bit atau potongan data lain yang lebih pendek dari sebuah
kata secara algoritma yang akan menggeser operand1 ke kanan sebanyak operand2 secara
bit dan menambahkan nilai nol pada bit yang tergeser seperti halnya pada operator SHL.
Pada program terdapat header (MODEL SMALL, CODE, ORG 100h), setelah menulis
header selanjutnya menuliskan intruksi program yaitu MOV AX,3FH yang artinya
memasukkan nilai pada register AX sebesar 3FH. MOV CL,3 artinya register CL sebesar
3. Sehingga dengan SHR AX,CL nilai AX akan bergeser 3 bit ke kanan dan nilai AX
menjadi 0007H
4.3 TUGAS AKHIR
PROGRAM
.MODEL SMALL
.CODE
.DATA
.ORG 100H
TULISANGKA1 DB 13, "MASUKKAN ANGKA PERTAMA (0-15) : $"
TULISANGKA2 DB 10, 13, "MASUKKAN ANGKA KEDUA (0-15) : $"
TULISHASILANGKA1 DB 10, 13, "ANGKA 1 = $"
TULISHASILANGKA2 DB 10, 13, "ANGKA 2 = $"
TULISHASILNOT1 DB 10, 13, 10, 13, "HASIL NOT 1 = $"
TULISHASILNOT2 DB 10, 13, "HASIL NOT 2 = $"
TULISHASILAND DB 10, 13, "HASIL AND = $"
TULISHASILOR DB 10, 13, "HASIL OR = $"
TULISHASILXOR DB 10, 13, "HASIL XOR = $"
TULISKETERANGAN DB 10,13,10,13, "KETERANGAN DESIMAL", 9,
"BINER $"
TDATA :
JMP PROSES
ANGKA1 DB ? ;MASUKAN ada 2 variabel
ANGKA2 DB ?
HASIL DB ? ;Keluaran ada 1 variabel
BINER1 DB ? ;Digit Biner 1
BINER2 DB ? ;Digit Biner 2
BINER3 DB ? ;Digit Biner 3
BINER4 DB ? ;Digit Biner 4
PROSES:
XOR AX,AX
MOV AL, HASIL
MOV BL,10D
DIV BL
MOV HASIL,AH
ADD AL,30H
MOV DL,AL ;Menyimpan isi AL ke DL
MOV AH,02H ;Nilai servis untuk mencetak karakter
INT 21H
XOR AX,AX
MOV AL, HASIL
ADD AL,30H
MOV DL,AL ;Menyimpan isi AL ke DL
MOV AH,02H ;Nilai servis untuk mencetak karakter
INT 21H
MOV DL,09H
MOV AH,02H ;mencetak karakter tab
INT 21H
XOR AX, AX
MOV AL, HASIL
MOV BL, 2H
DIV BL
MOV HASIL,AL
ADD AH,30H
MOV BINER1, AH
XOR AX, AX
MOV AL, HASIL
MOV BL, 2H
DIV BL
MOV HASIL, AL
ADD AH,30H
MOV BINER2, AH
XOR AX, AX
MOV AL, HASIL
MOV BL, 2H
DIV BL
MOV HASIL, AL
ADD AH,30H
MOV BINER3, AH
XOR AX, AX
MOV AL, HASIL
MOV BL, 2H
DIV BL
MOV HASIL, AL
ADD AH,30H
MOV BINER4, AH
XOR AX,AX
MOV AL, HASIL
MOV BL,10D
DIV BL
MOV HASIL,AH
ADD AL,30H
MOV DL,AL ;Menyimpan isi AL ke DL
MOV AH,02H ;Nilai servis untuk mencetak karakter
INT 21H
XOR AX,AX
MOV AL, HASIL
ADD AL,30H
MOV DL,AL ;Menyimpan isi AL ke DL
MOV AH,02H ;Nilai servis untuk mencetak karakter
INT 21H
MOV DL,09H
MOV AH,02H ;mencetak karakter tab
INT 21H
XOR AX, AX
MOV AL, HASIL
MOV BL, 2H
DIV BL
MOV HASIL,AL
ADD AH,30H
MOV BINER1, AH
XOR AX, AX
MOV AL, HASIL
MOV BL, 2H
DIV BL
MOV HASIL, AL
ADD AH,30H
MOV BINER2, AH
XOR AX, AX
MOV AL, HASIL
MOV BL, 2H
DIV BL
MOV HASIL, AL
ADD AH,30H
MOV BINER3, AH
XOR AX, AX
MOV AL, HASIL
MOV BL, 2H
DIV BL
MOV HASIL, AL
ADD AH,30H
MOV BINER4, AH
XOR AX,AX
MOV AL, HASIL
MOV BL,10D
DIV BL
MOV HASIL, AH
ADD AL,30H
MOV DL,AL ;Menyimpan isi AL ke DL
MOV AH,02H ;Nilai servis untuk mencetak karakter
INT 21H
XOR AX,AX
MOV AL, HASIL
ADD AL,30H
MOV DL,AL ;Menyimpan isi AL ke DL
MOV AH,02H ;Nilai servis untuk mencetak karakter
INT 21H
XOR AX, AX
MOV AL, HASIL
MOV BL, 2H
DIV BL
MOV HASIL, AL
ADD AH,30H
MOV BINER1, AH
XOR AX, AX
MOV AL, HASIL
MOV BL, 2H
DIV BL
MOV HASIL, AL
ADD AH,30H
MOV BINER2, AH
XOR AX, AX
MOV AL, HASIL
MOV BL, 2H
DIV BL
MOV HASIL, AL
ADD AH,30H
MOV BINER3, AH
XOR AX, AX
MOV AL, HASIL
MOV BL, 2H
DIV BL
MOV HASIL, AL
ADD AH,30H
MOV BINER4, AH
MOV DL,09H
MOV AH,02H ;mencetak karakter tab
INT 21H
XOR AX,AX
MOV AL, HASIL
MOV BL,10D
DIV BL
MOV HASIL, AH
ADD AL,30H
MOV DL,AL ;Menyimpan isi AL ke DL
MOV AH,02H ;Nilai servis untuk mencetak karakter
INT 21H
XOR AX,AX
MOV AL, HASIL
ADD AL,30H
MOV DL,AL ;Menyimpan isi AL ke DL
MOV AH,02H ;Nilai servis untuk mencetak karakter
INT 21H
XOR AX, AX
MOV AL, HASIL
MOV BL, 2H
DIV BL
MOV HASIL, AL
ADD AH,30H
MOV BINER1, AH
XOR AX, AX
MOV AL, HASIL
MOV BL, 2H
DIV BL
MOV HASIL, AL
ADD AH,30H
MOV BINER2, AH
XOR AX, AX
MOV AL, HASIL
MOV BL, 2H
DIV BL
MOV HASIL, AL
ADD AH,30H
MOV BINER3, AH
XOR AX, AX
MOV AL, HASIL
MOV BL, 2H
DIV BL
MOV HASIL, AL
ADD AH,30H
MOV BINER4, AH
MOV DL,09H
MOV AH,02H ;mencetak karakter tab
INT 21H
XOR AX,AX
MOV AL, HASIL
MOV BL,10D
DIV BL
MOV HASIL, AH
ADD AL,30H
MOV DL,AL ;Menyimpan isi AL ke DL
MOV AH,02H ;Nilai servis untuk mencetak karakter
INT 21H
XOR AX,AX
MOV AL, HASIL
ADD AL,30H
MOV DL,AL ;Menyimpan isi AL ke DL
MOV AH,02H ;Nilai servis untuk mencetak karakter
INT 21H
XOR AX, AX
MOV AL, HASIL
MOV BL, 2H
DIV BL
MOV HASIL, AL
ADD AH,30H
MOV BINER1, AH
XOR AX, AX
MOV AL, HASIL
MOV BL, 2H
DIV BL
MOV HASIL, AL
ADD AH,30H
MOV BINER2, AH
XOR AX, AX
MOV AL, HASIL
MOV BL, 2H
DIV BL
MOV HASIL, AL
ADD AH,30H
MOV BINER3, AH
XOR AX, AX
MOV AL, HASIL
MOV BL, 2H
DIV BL
MOV HASIL, AL
ADD AH,30H
MOV BINER4, AH
MOV DL,09H
MOV AH,02H ;mencetak karakter tab
INT 21H
MOV DL, BINER4
MOV AH, 02H
INT 21H
MOV DL, BINER3
MOV AH, 02H
INT 21H
MOV DL, BINER2
MOV AH, 02H
INT 21H
MOV DL, BINER1
MOV AH, 02H
INT 21H
;MENAMPILKAN HASIL 0R
MOV DX, OFFSET TULISHASILOR ; Print minta masukan
MOV AH, 09H
INT 21H
XOR AX,AX
MOV AL, HASIL
MOV BL,10D
DIV BL
MOV HASIL, AH
ADD AL,30H
MOV DL,AL ;Menyimpan isi AL ke DL
MOV AH,02H ;Nilai servis untuk mencetak karakter
INT 21H
XOR AX,AX
MOV AL, HASIL
ADD AL,30H
MOV DL,AL ;Menyimpan isi AL ke DL
MOV AH,02H ;Nilai servis untuk mencetak karakter
INT 21H
XOR AX, AX
MOV AL, HASIL
MOV BL, 2H
DIV BL
MOV HASIL, AL
ADD AH,30H
MOV BINER2, AH
XOR AX, AX
MOV AL, HASIL
MOV BL, 2H
DIV BL
MOV HASIL, AL
ADD AH,30H
MOV BINER3, AH
XOR AX, AX
MOV AL, HASIL
MOV BL, 2H
DIV BL
MOV HASIL, AL
ADD AH,30H
MOV BINER4, AH
MOV DL,09H
MOV AH,02H ;mencetak karakter tab
INT 21H
XOR AX,AX
MOV AL, HASIL
MOV BL,10D
DIV BL
MOV HASIL, AH
ADD AL,30H
MOV DL,AL ;Menyimpan isi AL ke DL
MOV AH,02H ;Nilai servis untuk mencetak karakter
INT 21H
XOR AX,AX
MOV AL, HASIL
ADD AL,30H
MOV DL,AL ;Menyimpan isi AL ke DL
MOV AH,02H ;Nilai servis untuk mencetak karakter
INT 21H
XOR AX, AX
MOV AL, HASIL
MOV BL, 2H
DIV BL
MOV HASIL, AL
ADD AH,30H
MOV BINER1, AH
XOR AX, AX
MOV AL, HASIL
MOV BL, 2H
DIV BL
MOV HASIL, AL
ADD AH,30H
MOV BINER2, AH
XOR AX, AX
MOV AL, HASIL
MOV BL, 2H
DIV BL
MOV HASIL, AL
ADD AH,30H
MOV BINER3, AH
XOR AX, AX
MOV AL, HASIL
MOV BL, 2H
DIV BL
MOV HASIL, AL
ADD AH,30H
MOV BINER4, AH
MOV DL,09H
MOV AH,02H ;mencetak karakter tab
INT 21H
1. Pada mikroprosesor terdapat operasi logika, antara lain : operasi logika gerbang
NOT, gerbang AND, gerbang OR dan gerbang XOR.
2. Logika NOT disebut juga inverter (keluaran berlawanan dengan masukan), AND
(AND memerlukan 2 atau lebih masukan untuk menghasilkan hanya 1 Keluaran),
OR (memerlukan 2 atau lebih Masukan (Input) untuk menghasilkan hanya 1
Keluaran (Output) dan akan menghasilkan nilai nol bila kedua operannya bernilai
nol dan satu bila salah satunya atau keduanya bernilai satu), XOR (memerlukan 2
atau lebih Masukan (Input) untuk menghasilkan hanya 1 Keluaran (Output) dan
akan menghasilkan nol untuk kedua nilai sama dan akan menghasilkan satu untuk
nilai yang berbeda).
3. Pada mikroprossesor terdapat manipulasi bit SHL atau shift left (akan menggeser
operand1 ke kiri sebanyak operand2 secara per bit) dan manipulasi bit SHR atau
shift right (akan menggeser operand1 ke kanan sebanyak operand2 secara bit dan
menambahkan nilai nol pada bit yang tergeser seperti halnya pada operator SHL).
5.2 Saran
ekinurafifah@gmail.com
BAB I
PENDAHULUAN
1.1. TUJUAN
1. Memahami perintah dan proses operasi percabangan pada mikroprosesor
2. Dapat melakukan operasi percabangan JMP, JE, JNE, JA, JB
3. Memahami perintah dan proses operasi perulangan pada mikroprosesor
4. Dapat melakukan operasi perulangan LOOP
1.2 ALAT DAN BAHAN
1. Komputer
2. Aplikasi Emu 8086
BAB II
LANDASAN TEORI
2.1 TEORI MODUL
Label
Mikroprosesor dalam mengoperasikan perintah-perintah yang diberikan pada dirinya
dengan menggunakan aseembly,akan membaca perintah-perintah tersebut secara
terstruktur dari atas ke bawah. Masing-masing perintah tersebut tercatat pada alamat
offset registeryang berbeda-beda. Label pada bahasa pemrograman Assembly merupakan
sebuah penanda pada source codedimana label ini akan mencatat alamat offset
registersaat label tersebut ditulis. Alamat offset registerini nantinya bisa diambil
nilainya dengan memanggil label tersebut. Meminta program mengeksekusi untuk
kembali ke alamat yang terisi pada label akan mengembalikan instruction
pointeruntuk menjalankan instruksi pada alamat label dan dilanjutkan menjalankan
instruksi di bawah label tersebut.Terdapat dua tipe label pada Bahasa Assembly,
Label simbolik dan label nomor.
Percabangan
Percabangan pada mikroprosesor menjadi bagian yang sangat penting karena dapat
menyerhanakan program dari mikroprosesor dan menambah fleksibilitas atau kegunaan
(usability) dari mikroprosesor. Seperti yang sudah dipelajari sebelumnya bahwa
mikroprosesor akan mengeksekusi isi dari perintah pada Index Pointer (IP) dan Index
Pointer akan merujuk ke Index Pointer dibawahnya, percabangan pada mikroprosesor
dilakukan dengan cara merubah alamat dari Index Pointerke alamat yang diinginkan.
Hal ini membuat percabangan pada mikroprosesor desebut juga sebagai lompatan.
Percabangan pada mikroprosesor dibagi menjadi dua macam percabangan, yaitu;
- Percabangan tak bersyarat (unconditional branch)
- Percabangan bersyarat (conditional branch)
Percabangan tidak bersyarat adalah percabangan yang dilakukan tanpa melihat isi
dari penanda/flagapapun pada saat melakukan lompatan ke alamat yang diberikan.
Sedangkan Percabangan bersyarat adalah lompatan yang dilakukan jika sebuah
kondisi tertentu dipenuhi. Pada mikroprosesor 8086 percabangan tidak bersyarat
dapat dilakukan dengan instruksi JMP. Sedangkan percabangan bersyarat dapat
dilakukan dengan mempertimbangkan beberapa kondisi penanda/ flagdimana isi flagakan
berubah nilainya dengan perintah CMP (Compare).
JMP(Unconditional branch)
Perintah JMPini digunakan untuk melompat menuju alamat labelyang ditunjukkan oleh
perintah JMP. Adapun syntax-nya adalah:
JMP Label_Tujuan
Tujuannya dapat berupa label seperti yang digunakan pada syntaxdiatas.
Perintah JMP yang digunakan pada materi-materisebelumnya biasanyadimaksudkan agar
melewati tempat data program, karena jika tidak ada perintah JMP ini maka data program
akan ikut dieksekusi sehingga kemungkinan besar akan menyebabkan program anda
menjadi Hang.
Perintah JMP ini dikategorikan sebagai Unconditional Branch, karena perintah
ini tidak menyeleksi keadaan apapun untuk melakukan suatu lompatan. Setiap ditemui
perintah ini maka lompatan pasti dilakukan.
Membandingkan Dengan CMP
Perintah CMP(Compare) digunakan untuk membandingkan 2 buah operand,
dengan syntax:
CMP Operand1,Operand2
CMP akan membandingkan operand1 dengan operand2 dengan cara
mengurangkan operand1 dengan operand2. CMP tidak mempengaruhi nilai Operand1
dan Operand2, perintah CMP hanya akan mempengaruhi flags register sebagai hasil
perbandingan. Adapun flag-flag yang terpengaruh oleh perintah CMP ini adalah:
- OF akan 1, jika operand1 lebih kecil dari operand2 pada operasi bilangan
bertanda.
- SF akan 1, bilaoperand1 lebih kecil dari operand2, pada operasi bilangan
bertanda.
- ZF akan 1, jika operand1 nilainya sama dengan operand2
- CF akan 1, jika operand1 lebih kecil dari operand2 pada operasi bilangan tidak
bertanda.Perlu anda ingat bahwa CMP tidak dapat membandingkan antar 2
lokasi memory.
Lompat Yang Mengikuti CMP(Conditonal Branch)
Perintah CMP yang hanya mempengaruhi flag register, biasanya diikuti dengan
perintah lompat yang melihat keadaan pada flags register diatas. Jenis perintah
lompat yang biasanya mengikuti perintah CMP, terdapat 12 buah seperti pada Tabel di
bawah ini.
Perintah Lompat Kondisi
JA<Jump If Above> Lompat, jika Operand1 > Operand2 untuk bilangan
tidak bertanda
JG<Jump If Greater> Lompat, jika Operand1 > Operand2 untuk bilangan
bertanda
JE <Jump If Equal> Lompat, jika Operand1 sama dengan Operand2
JNE<Jump If Not Equal> Lompat, jika Operand1 tidak sama dengan Operand2
JB<Jump If Below> Lompat, jika Operand1 < Operand2 untuk bilangan
tidak bertanda
JL<Jump If Less> Lompat, jika Operand1 < Operand2 untuk bilangan
bertanda
JBE<Jump If Below or Lompat, jika operand1 <= Operand2 untuk bilangan
Equal>L tidak bertanda
JLE<Jump If Less or Equal> Lompat, jika Operand1 <= Operand2 untuk bilangan
bertanda
JAE <Jump If Above or Equal> Lompat, jika Operand1 >= Operand2 untuk bilangan
tidak bertanda
JGE<Jump If Greater or Lompat, jika Operand1 >= Operand2 untuk bilangan
Equal> bertanda
Pada tabel diatas dapat anda lihat bahwa terdapat dua operasi yang berbeda, yaitu
operasi bilangan bertanda dan tidak bertanda. Bilangan bertanda adalah bilangan yang
akan membedakan bilangan negatif dan positif (Mis. 37 dan -37). Sedangkan bilangan
tidak bertanda adalah bilangan yang tidak akan membedakan positif dan negatif, jadi
angka -1 untuk operasi bilangan bertanda akan dianggap FFh pada bilangan tidak
bertanda.
Contoh Program 1. Mendemokan perintah percabangan
.MODEL SMALL
.CODE
ORG 100h
TData: JMP Proses
BilA DB 67; Ganti nilai BilA dan Bil B untuk melihat perbedaannya
BilB DB 66
KalLebihDB 'Bilangan A lebih kecil dari bilangan B $'
KalSamaDB 'Bilangan A sama dengan bilangan B $'
KalKurangDB 'Bilangan A lebih besar dari bilangan B $'
Proses:
MOV AL,BilA ; Masukkan bilangan A pada AL
CMP AL,BilB ; Bandingkan AL(BilA) dengan Bilangan B
JB AKecil ; Jika BilA < BilB, lompat ke AKecil
JE Sama ; Jika BilA = BilB, lompat ke Sama
JA ABesar ; Jika BilA > BilB, lompat ke Abesar
JUMP EXIT
Akecil:
MOV AL,BilA ; Masukkan bilangan A pada AL
CMP AL,BilB ; Bandingkan AL(BilA) dengan Bilangan B
JB AKecil ; Jika BilA < BilB, lompat ke AKecil
JE Sama ; Jika BilA = BilB, lompat ke Sama
JA ABesar ; Jika BilA > BilB, lompat ke Abesar
JUMP EXIT
Akecil:
LEA DX,KalLebih; Ambil offset Kal0
JMP Cetak ; Lompat ke cetak
Sama:
LEA DX,KalSama; Ambil offset Kal1
JMP Cetak ; Lompat ke cetak
ABesar:
LEA DX,KalKurang; Ambil offset Kal2
Cetak:
MOV AH,09 ; Servis untuk mencetak kalimat
INT 21h ; Cetak kalimat !!
EXIT: INT 20h ; Kembali ke DOS.
END TData
Bila program diatas dijalankan, maka akan tampak pada layar:
Bilangan A lebih besar dari bilangan B
Anda bisa mengganti nilai pada variabel BilA dan BilB untuk melihat
hasil yang akan ditampilkan pada layar.
Catatan penting yang harus diperhatikan pada lompat bersayarat adalah bahwa
jangkauan dari lompat bersyarat tidak sama dnegan lompat tanpa syarat. Lompat
bersyarat hanya dapat melompat menuju label yang berjarak -128 sampai +127 byte dari
tempat lompatan.
Perulangan
Perulangan pada mikroprosesor sangat diperlukan dan menjadi bagian penting karena
dengan perulangan akan meminimalisir proses penulisan program dan meminimalisir
pemakaian memori yang terlalu banyakdalam menulis program. Sebaliknya dalam
melakukan proses perulangan adalah harus sangat hati-hati agar tidak terjadi
perulangan tidak berhingga atau perulangan yang menyebabkan bertumpuknya nilai
memori yang tidak perlu.
Dalam melakukan perulangan yang harus diperhatikan adalah :
- Kapan / kondisi apa yang menyebabkan perulangan itu akan berakhir
- Berapa banyak perulangan yang diinginkan
- Register apa saja yang terpengaruh pada saat perulangan dilakukan
Perulangan dengan LOOP
Perintah LOOP digunakan untuk melakukan suatu proses yang berulang-ulang.
Adapun syntax dari perintah ini adalah :
LOOP Label_Tujuan
Label_Tujuan dapat berupa suatu label yang telah didefinisikan, contoh:
Contoh Program 2. Mendemokan Perintah Perulangan
.MODEL SMALL
.CODE
ORG 100h
MOV CX,3; Banyaknya pengulangan yang dilakukan
Ulang:
MOV AH, 01H
INT 21H; Tempat terjadinya pengulangan
LOOP Ulang ; Lompat ke label 'Ulang'
EXIT:
INT 20H ; Kembali ke DOS.
Perintah LOOP adalah mirip dengan perintah JMP, hanya saja perintah LOOP
adalah lompatan yang memperhatikan nilai register CX. Pada proses pengulangan dengan
perintah LOOP, register CX memegang suatu peranan yang khusus dimana register
ini dijadikan sebagai counter/penghitung terhadap banyaknya perulangan/ loopingyang
boleh terjadi. Setiap ditemui perintah LOOP, maka register CX akan dikurangi dengan
1 terlebih dahulu, kemudian akan dilihat apakah CX sudah mencapai 0. Proses
loopingakan selesai bila nilai pada register CX mencapai nol. Seperti pada contoh diatas,
maka interupsi 21H servise 01H (meminta masukan dari keyboard)akan dihasilkan
sebanyak 3 kali(sesuai dengan nilai CX).
Perlu diperhatikan bahwa jangan sampai anda menaruh CX kedalam proses LOOP karena
hal ini akan menyebabkan nilai CX di-SET terus sehingga proses looping tidak bisa
berhenti.
TRICK:
Bila anda menetapkan nilai CX menjadi nol pada saat pertama kali sebelum
dilakukan loop, maka anda akan mendapatkan proses looping yang terbanyak. Hal
ini dikarenakan proses pengurangan 0 dengan 1 akan menghasilkan nilai FFFFH(-1),
Contoh :
MOV CX,00
Ulang: LOOP Ulang
2.2 Teori Penunjang
Penghitung Program (PC) adalah register 16 bit yang penting dalam CPU. Jika
tegangan pada CPU kaki Reset (pin 26) turun menjadi nol dan kemudian naik
menjadi satu (1) dengan menekan tombol RS, PC akan menjadi 0000H. Pelaksanaan
program kemudian akan dimulai dari alamat 0000H menurut pulsa clock yang
dihasilkan oleh sistem hardware. Setiap kali CPU selesai mengambil satu byte untuk
tiap-tiap instruksi dari memori secara otomatis PC akan ditambah dengan 1.
Rangkaian kontrol dalam CPU menentukan berapa byte yang tercakup dalam
instruksi tersebut setelah CPU mengambil byte pertama instruksi itu. Instruksi hanya
akan dilaksanakan bila PC telah ditambah dengan jumlah byte pada instruksi
tersebut. Biasanya program diambil dari memori dengan instruksi untuk pelaksanaan,
dimulai dari alamat memori terendah.
2. Instruksi-instruksi Cabang
Setelah suatu program dilaksanakan sampai alamat tertentu, PC dapat diubah ke
alamat yang lain bilamana pemrogram tidak menghendaki program dilaksanakan
pada alamat berikutnya. Misalnya karena tidak adanya memori setelah alamat
tersebut ataupun karena program tidak disimpan pada daerah tersebut. Program
kemudian meloncat ke alamat yang lain dan melanjutkan pelaksanaan program. Pada
bahasa rakitan berikut ini berati PC akan diubah ke 1828H setelah instruksi tersebut
dilaksanakan, pelaksanaan program selanjutnya dilaksanakan dari alamat 1828H. LD
PC, 1828H (instruksi ini tidak berlaku pada bahasa rakitan Z80). Sebenarnya dalam
bahasa rakitan jump (JP) digunakan untuk menyatakan perubahan dalam urutan
pelaksanaan program. Instruksi LD PC, 1828H = JP 1828H.
yang sesuai.
JP Z, 1828H Jika zero flag dalam keadaan set, yaitu A = 10H, loncat ke alamat
JP C, XXXX Jika ada carry atau carry flag = 1, loncat ke alamat XXXX.
JP NC, Jika tidak ada carry atau carry flag = 0, loncat ke alamat
XXXX XXXX.
JP Z, XXXX Jika zero flag = 1, atau hasil dari operasi terdahulu adalah nol,
alamat XXXX.
JP P, XXXX Jika sign flag = 0 (tanda dari hasil operasi yang terdahulu
adalah
Untuk mengurangi luas memori yang ditempati program dan juga untuk menekan
biaya sistem mikrokomputer, mikrokomputer Z80 dapat menggunakan alamat-alamat
relatif untuk menunjukkan perloncatan suatu program. Karena sebagian besar
perloncatan dalam suatu program di antara +127 dan -128, suatu bilangan yang terdiri
dari 1 byte dapat digunakan untuk menyatakan perloncatan ini. Untuk setiap satu
operasi loncat, kita dapat menghemat memori 1 byte dibandingkan bila kita
menggunakan instruksi JP yang membutuhkan 2 byte alamat absolut. Keterangan
instruksi-instruksi dibawah ini dapat dilihat di sebelah kanan.
JR 10H : Loncat ke depan 10H (16) lokasi dari pencacah program yang
saat itu dipakai (alamat instruksi berikutnya). Sebenarnya alamat
instruksi yang akan dilaksanakan berikutnya didapat menambah
10H pada pencacah program (PC) yang sedang dipakai.
JR C,F0H : Jika carry flag = 1, loncat ke belakang 10H (16) lokasi. Karena
bit F0H yang paling kiri adalah = 1, hal ini diketahui sebagai
bilangan negatif (komplemen ke-2 nya adalah 10H).
JR NC,7FH : Jika carry flag =0, loncat ke depan 127 lokasi (nilai
maksimum).
JR Z,80H : Jika zero flag = 1, yaitu bila hasil dari operasi yang terdahulu
adalah nol, loncat ke belakang 128 lokasi. 80H (-128) adalah
bilangan negatif minimum yang dapat digunakan dalam alamat
relatif.
Dari contoh-contoh di atas, kita dapat melihat bahwa alamat relatif yang positif
berarti loncat ke depan. Perloncatan yang paling besar adalah 7FH (+127). Alamat
relatif yang negatif berarti loncat ke belakang, perloncatan yang paling besar adalah
80H (-128). Perloncatan ini selalu diukur dari alamat opcode operasi berikutnya. Jump
relatif bisa tak bersyarat ataupun bersyarat. Loncat bersyarat tergantung dari status
carry flag atau zero flag. Dalam sistem Z80, data pada sign flag atau P/V flag tidak
dapat digunakan sebagai syarat dari satu jump relatif.
5. Program Loop
Salah satu keunggulan komputer yang paling penting adalah bahwa komputer
tersebut dapat mengulangi langkah-langkah yang diperlukan dalam menyelesaikan
suatu tugas sebanyak mungkin sampai tugas yang bersangkutan selesai dilaksanakan.
Hal ini didapat dengan mempergunakan program loop. Loop merupakan suatu alat
yang penting dalam merancang program.
Program loop dasar harus mencakup hal-hal dibawah ini:
(1) Suatu preset loop counter (penghitung loop) dengan jumlah loop yang harus
dilakukan. Biasanya, suatu register dalam CPU dapat dipakai sebagai
penghitung loop. Tentu saja memori dapat juga dipakai penghitung loop.
(2) Penghitung loop dikurang dengan 1 setiap kali satu putaran loop selesai
dilakukan. Setiap selesai satu putaran, nilai penghitung loop harus diperiksa.
Jika penghitung tidak sama nol, loop diulangi sampai penghitung loop sama
dengan nol.
Program berikut ini dapat digunakan untuk menjulahkan data 8 bit pada alamat
1900H - 190FH dan menyimpan hasilnya pada pasangan resister DE.
label LD C,10H Pergunakan resister C sebagai penghitung loop. Karena 16
data 8 bit akan dijumlahakan bersama, preset 10H dibuat di
C.
XOR A Nol-kan accumulator dan carry flag.
LD HL, 1900H Gunakan pasangan register HL sebagai penunjuk alamat.
Isi
memory yang alamatnya ditunjukkan oleh HL akan
ditambahkan ke register A. Alamat pertama adalah 1900H.
LD D, A Register D digunakan untuk menyimpan carry yang
dihasilkan
pada operasi penambahan. nol-kan register D.
xx ADD A, (HL) Tambahkan isi memori yang alamatnya ditunjukkan oleh
HL
ke register A, Intruksi ini akan diulangi sebanyak 16 kali.
xx
dapat diisi sebagai label alamat intruksi ini.
INC HL Menambah HL dengan 1. HL yang baru menunjuk pada
data
berikutnya yang ada pada memory untuk ditambahkan pada
register A.
pelaksanaan program.
INC D Jika dihasilkan carry, tambahkan carry ini pada register D.
yy DEC C Kurangi register C dengan 1.
JR NZ, xx Jika hasilnya tidak sama dengan nol (zero flag). Program
loop
belum selesai. Loncat ke xx untuk mengulangi loop.
LD E, A Jika zero flag = 1 semua data telah telah ditambahkan
bersama-sama. Isikan A pada E, hasilnya akan disimpan
dalam pasangan register DE
Penghitung Program (PC) adalah register 16 bit yang penting dalam CPU. Jika
tegangan pada CPU kaki Reset (pin 26) turun menjadi nol dan kemudian naik menjadi
satu (1) dengan menekan tombol RS, PC akan menjadi 0000H.
Instruksi-instruksi Cabang
Untuk mengurangi luas memori yang ditempati program dan juga untuk menekan
biaya sistem mikrokomputer, mikrokomputer Z80 dapat menggunakan alamat-alamat
relatif untuk menunjukkan perloncatan suatu program.
Program Loop
Salah satu keunggulan komputer yang paling penting adalah bahwa komputer
tersebut dapat mengulangi langkah-langkah yang diperlukan dalam menyelesaikan
suatu tugas sebanyak mungkin sampai tugas yang bersangkutan selesai dilaksanakan.
Hal ini didapat dengan mempergunakan program loop. Loop merupakan suatu alat yang
penting dalam merancang program.
BAB III
METODE PRAKTIKUM
3.2 Langkah Percobaan
7. Nyalakan komputer, kemudian Buka aplikasi dan jalankan Aplikasi emulator
8086
8. Kemudian tulis dan jalankan program yang sudah dibuat pada aplikasi emulator
9. Kemudian screen shoot hasil program
10. Hasil screen shoot pada Program 1-6 dimasukkan dalam laporan praktikum
11. Kerjakan tugas akhir berdasarkan materi yang diberikan. Tambahkan keterangan
pada perintah-perintah yang diberikan pada mikroprosesor. Kerjakan masing-
masing.
12. Hasil tugas akhir discreen shot dan dilampirkan pada laporan praktikum.
BAB IV
HASIL DAN ANALISA
4.1 HASIL PENGUJIAN
PROGRAM 1 (PERINTAH PRCABANGAN)
PROGRAM 2
4.2 ANALISA
Praktikum modul empat dengan judul “Percabangan dan Perulangan pada
Mikroprosesor” dengan tujuan pertama yaitu memahami perintah dan proses operasi
percabangan pada mikroprosesor, dimana percabangan pada mikroprosesor dibagi
menjadi dua macam percabangan yaitu percabangan tak bersyarat (unconditional branch)
dan percabangan bersyarat (conditional branch). Tujuan kedua yaitu dapat melakukan
operasi percabanagn JMP, JE, JNE, JA, JB, dimana percabangan JMP (dikategorikan
sebagai Unconditional Branch, karena perintah ini tidak menyeleksi keadaan apapun
untuk melakukan suatu lompatan, setiap ditemui perintah ini maka lompatan pasti
dilakukan), percabangan JE ( Jump If Equal dikatagorikan sebagai Conditional Branch,
dimana kondisi lompat, jika operand1 sama dengan operand2), percabangan JNE (Jump
If Not Equal dikatagorikan sebagai Conditional Branch, dimana kondisi lompat, jika
operand1 tidak sama dengan operand2), percabangan JA (Jump If Above dikatagorikan
sebagai Conditional Branch, dimana kondisi lompat, jika operand1>operand2 untuk
bilangan bertanda), percabangan JB (Jump If Below dikatagorikan sebagai Conditional
Branch, dimana kondisi lompat, jika operand1<operand2 untuk bilangan tidak bertanda).
Tujuan ketiga yaitu memahami perintah dan proses operasi perulangan pada
mikroprosesor, dimana perulangan akan meminimalisir proses penulisan program dan
meminimalisir pemakaian memori yang terlalu banyak dalam penulisan program. Tujuan
keempat yaitu dapat melakukan operasi perulangan LOOP, dimana perintah LOOP
merupakan lompatan yang memperhatikan nilai register CX.
Pada praktikum ini dilakukan dua kali percobaan, yaitu perintah percabangan dan
perintah perulangan. Pada program perintah percabangan terdapat header MODEL
SMALL (digunakan bentuk atau ukuran small dengan ukuran kurang dari 1 segment atau
64 kb), CODE (digunakan untuk memberitahukan kepada assembler bahwa akan mulai
menggunakan code segment yang digunakan untuk menyimpan program yang nanti akan
dijalankan), ORG 100h (digunakan untuk memberitahukan assembler supaya program
pada saat dijalankan diletak mulai pada offset ke 100h (256) byte). Selanjutnya
menuliskan program TData: Jump Proses, BilA DB 67 (menandakan bahwa terdapat
inputan angka atau bilangan A bernilai 67), Bil DB 66 (menandakan bahwa terdapat
inputan angka atau bilangan B bernilai 66), KalLebih DB 'Bilangan A lebih kecil dari
bilangan B $' (jika bilangan a lebih kecil dari b maka kalimat ini akan tampil pada layar),
KalSama DB 'Bilangan A sama dengan bilangan B $' (jika nilai a sama dengan nilai b
maka kalimat ini akan tampil pada layar), KalKurang DB 'Bilangan A lebih besar dari
bilangan B $' (jika nilai a lebih besar dari bilangan b maka kalimat ini akan tampil pada
layar). Selanjutnya menuliskan MOV AL,BilA (memasukkan bilangan A pada register
AL); CMP AL,BilB (untuk membandingkan AL yang telah terisi Bilangan A dengan
Bilangan B); JB Akecil (termasuk kedalam lompat yang mengikuti CMP, kondisi dimana
lompat jika operand 1 < operand 2 untuk bilangan tak bertanda atau jika BilA lebih kecil
dari BilB maka akan lompat ke Akecil); JE Sama (termasuk kedalam lompat yang
mengikuti CMP, kondisi dimana lompat jika operand 1=operand 2 untuk bilangan tak
bertanda atau jika BilA sama dengan BilB maka akan lompat ke Sama); JA ABesar
(termasuk kedalam lompat yang mengikuti CMP, kondisi dimana lompat jika operand
1>operand 2 untuk bilangan tak bertanda atau jika BilA lebih besar dari BilB maka akan
lompat ke Abesar); JUMP EXIT (lompat ke exit). Selanjutnya menuliskan label Akecil
(jika program yang terpilih dan akan diproses merupakan Akecil); LEA DX,KalLebih
(akan mengambil offset Kal0); JMP Cetak (untuk melompat ke cetak). Menuliskan label
Sama (jika program yang terpilih dan akan diproses merupakan Sama); LEA
DX,KalSama (akan mengambil offset dari Kal1); JMP Cetak (untuk melompat ke cetak).
Menuliskan label ABesar (jika program yang terpilih dan akan diproses merupakan
ABesar); LEA DX,KalKurang (akan mengambil offset Kal2). Selanjutnya pada label
cetak menuliskan MOV AH,09 (untuk mencetak kalimat dari label yang terpilih); INT
21h (untuk mencetak kalimat); INT,2Oh ( untuk kembali ke DOS).
Pada program kedua atau perintah perulangan terdapat header MODEL SMALL
(digunakan bentuk atau ukuran small dengan ukuran kurang dari 1 segment atau 64 kb),
CODE (digunakan untuk memberitahukan kepada assembler bahwa akan mulai
menggunakan code segment yang digunakan untuk menyimpan program yang nanti akan
dijalankan), ORG 100h (digunakan untuk memberitahukan assembler supaya program
pada saat dijalankan diletak mulai pada offset ke 100h (256) byte). Selanjutnya
menuliskan MOV CX, 3 (menunjukan banyaknya perulangan yang akan dilakukan
sebanyak tiga kali), menuliskan label Ulang (merupakan terjadinya perulangan) terdapat
MOV AH, 01H (nilai servis untuk mencetak karakter atau mencetak 1 karakter); INT 21H
(tempat terjadinya perulangan); LOOP Ulang (akan kembali ke label “Ulang”),
menuliskan label EXIT terdapat INT 20H (kembali ke DOS).
4.3 TUGAS AKHIR
PROGRAM :
.MODEL SMALL
ORG 100H
JMP PROSES
XX DB 10,10,13,' $'
X0 DB 10,13, 'PILIHAN MENU $'
X1 DB 10,13, 'A. PENJUMLAHAN $'
X2 DB 10,13, 'B. PENGURANGAN $'
X3 DB 10,13, 'C. PERKALIAN $'
X4 DB 10,13, 'D. PEMBAGIAN $'
X5 DB 10,13, 'E. NOT$'
X6 DB 10,13, 'F. AND$'
X7 DB 10,13, 'G. OR$'
X8 DB 10,13, 'H. XOR$'
X9 DB 10,13, 'I. EXIT$'
X10 DB 10,13, 'MASUKKAN ANGKA PERTAMA : $'
X11 DB 10,13, 'MASUKKAN ANGKA KEDUA : $'
X12 DB 10,10,13,'KETERANGAN DESIMAL',9,'BINER $'
X13 DB 10,13, 'ANGKA PERTAMA : $'
X14 DB 10,13, 'ANGKA KEDUA : $'
X15 DB 10,13, 'HASIL NOT 1 : $'
X16 DB 10,13, 'HASIL NOT 2 : $'
X17 DB 10,13, 'HASIL AND : $'
X18 DB 10,13, 'HASIL OR : $'
X19 DB 10,13, 'HASIL X0R : $'
X20 DB 10,10,13,'MASUKAN PILIHAN : $'
X21 DB 10,13, 'MASUKKAN ANGKA PERTAMA : $'
X22 DB 10,13, 'MASUKKAN ANGKA KEDUA : $'
X23 DB 10,13, 'HASILNYA : $'
X24 DB 10,13, 'MASUKKAN ANGKA PERTAMA : $'
X25 DB 10,13, 'MASUKKAN ANGKA KEDUA : $'
X26 DB 10,13, 'SISANYA : $'
ANGKA1 DW ?
ANGKA2 DW ?
HASIL DW ?
SISA DW ?
INP DB ?
INPUTX1 DB ?
INPUTX2 DB ?
INPUTXX DB ?
BIN1 DB ?
BIN2 DB ?
BIN3 DB ?
BIN4 DB ?
X DW 1000D
Y DB 100D
Z DB 10D
PROSES:
;TAMPILAN MENU
LEA DX,X0
MOV AH,9H
INT 21H
LEA DX,X1
MOV AH,9H
INT 21H
LEA DX,X2
MOV AH,9H
INT 21H
LEA DX,X3
MOV AH,9H
INT 21H
LEA DX,X4
MOV AH,9H
INT 21H
LEA DX,X5
MOV AH,9H
INT 21H
LEA DX,X6
MOV AH,9H
INT 21H
LEA DX,X7
MOV AH,9H
INT 21H
LEA DX,X8
MOV AH,9H
INT 21H
LEA DX,X9
MOV AH,9H
INT 21H
;MEMILIH
LEA DX,X20
INT 21H
MOV AH,1H
INT 21H
SUB AL,30H
MOV INP,AL
CMP AL,3
JB INPUT1
CMP AL,5
JB INPUT2
CMP AL,9
JB INPUT3
CMP AL,9
JE EN
INPUT1:
;INPUT ANGKA PERTAMA
LEA DX,X21
MOV AH,9H
INT 21H
MOV AH,1H
INT 21H
SUB AL,30H
MUL Y
MOV ANGKA1,AX
MOV AH,1H
INT 21H
SUB AL,30H
MUL Z
ADD ANGKA1,AX
MOV AH,01H
INT 21H
SUB AL,30H
SUB BX,BX
MOV BL,AL
ADD ANGKA1,BX
MOV AH,1H
INT 21H
SUB AL,30H
MUL Y
MOV ANGKA2,AX
MOV AH,1H
INT 21H
SUB AL,30H
MUL Z
ADD ANGKA2,AX
MOV AH,1H
INT 21H
SUB AL,30H
SUB BX,BX
MOV BL,AL
ADD ANGKA2,BX
MOV AL,INP
CMP AL,1H
JE TAMBAH
CMP AL,2H
JE KURANG
TAMBAH:
;HASIL
LEA DX,X23
MOV AH,9H
INT 21H
MOV AX,ANGKA1
ADD AX,ANGKA2
MOV HASIL, AX
SUB DX,DX
MOV AX, HASIL
DIV X
MOV HASIL, DX
ADD AL,30H
MOV DL,AL
MOV AH,02H
INT 21H
SUB AX,AX
MOV AX, HASIL
ADD AL,30H
MOV DL,AL
MOV AH,02H
INT 21H
JMP SPA
KURANG:
;HASIL
LEA DX,X23
MOV AH,9H
INT 21H
MOV AX,ANGKA1
SUB AX,ANGKA2
MOV HASIL, AX
SUB DX,DX
MOV AX, HASIL
DIV X
MOV HASIL, DX
ADD AL,30H
MOV DL,AL
MOV AH,02H
INT 21H
SUB AX,AX
MOV AX, HASIL
ADD AL,30H
MOV DL,AL
MOV AH,02H
INT 21H
JMP SPA
INPUT2:
;ANGKA PERTAMA
LEA DX,X24
MOV AH,9H
INT 21H
MOV AH,1H
INT 21H
SUB AL,30H
MUL Z
ADD ANGKA1,AX
MOV AH,01H
INT 21H
SUB AL,30H
SUB BX,BX
MOV BL,AL
ADD ANGKA1,BX
;ANGKA KEDUA
LEA DX,X25
MOV AH,9H
INT 21H
MOV AH,1H
INT 21H
SUB AL,30H
MUL Z
ADD ANGKA2,AX
MOV AH,01H
INT 21H
SUB AL,30H
SUB BX,BX
MOV BL,AL
ADD ANGKA2,BX
MOV AL,INP
CMP AL,3H
JE KALI
CMP AL,4H
JE BAGI
KALI:
;HASIL
LEA DX,X23
MOV AH,9H
INT 21H
MOV AX,ANGKA1
MOV BX,ANGKA2
MUL BX
MOV HASIL, AX
SUB DX,DX
MOV AX,HASIL
DIV X
MOV HASIL,DX
ADD AL,30H
MOV DL,AL
MOV AH,2H
INT 21H
MOV AX,HASIL
DIV Y
SUB BX,BX
MOV BL,AH
MOV HASIL,BX
ADD AL,30H
MOV DL,AL
MOV AH,2H
INT 21H
SUB AX,AX
MOV AX,HASIL
ADD AL,30H
MOV DL,AL
MOV AH,2H
INT 21H
JMP SPA
BAGI:
;HASIL
LEA DX,X23
MOV AH,9H
INT 21H
MOV AX,ANGKA1
MOV BX,ANGKA2
DIV BL
SUB BX,BX
MOV BL,AL
MOV HASIL, BX
SUB BX,BX
MOV BL,AH
MOV SISA,BX
MOV AX,HASIL
DIV Z
SUB BX,BX
MOV BL,AH
MOV HASIL, BX
MOV DL,AL
MOV AH,02H
INT 21H
SUB AX,AX
MOV AX,HASIL
ADD AL,30H
MOV DL,AL
MOV AH,02H
INT 21H
LEA DX,X26
MOV AH, 09H
INT 21H
MOV AX,SISA
DIV Z
SUB BX,BX
MOV SISA, BX
SUB BX,BX
MOV BL,AH
MOV SISA,BX
ADD AL,30H
MOV DL,AL
MOV AH,2H
INT 21H
SUB AX,AX
MOV AX,SISA
ADD AL,30H
MOV DL,AL
MOV AH,02H
INT 21H
JMP SPA
INPUT3:
;INPUT ANGKA KE-1
LEA DX,X10
MOV AH,9H
INT 21H
MOV AH,1H
INT 21H
SUB AL,30H
MOV BH,AL
MUL Z
MOV BH,AL
MOV AH,1H
INT 21H
SUB AL,30H
MOV BL,AL
ADD BH,BL
MOV INPUTX1,BH
MOV AH,1H
INT 21H
SUB AL,30H
MOV BH,AL
MUL Z
MOV BH,AL
MOV AH,1H
INT 21H
SUB AL,30H
MOV BL,AL
ADD BH,BL
MOV INPUTX2,BH
KET:
LEA DX,X12
MOV AH,9H
INT 21H
ANGKAAA1:
;MENAMPILKAN BENTUK DESIMAL ANGKA KE-1
LEA DX,X13
MOV AH,9H
INT 21H
MOV AL,INPUTX1
MOV INPUTXX,AL
MOV CL,2H
JMP CONV
ANGKAAA2:
;MENAMPILKAN BENTUK DSIMAL ANGKA KE-2
LEA DX,X14
MOV AH,9H
INT 21H
MOV AL,INPUTX2
MOV INPUTXX,AL
MOV CL,3H
JMP CONV
PILIH:
MOV AL,INP
CMP AL,5H
JE NOT1
CMP AL,6H
JE ANDG
CMP AL,7H
JE ORG
CMP AL,8H
JE XORG
NOT1:
LEA DX,X15
MOV AH,9H
INT 21H
XOR AX,AX
MOV AL,INPUTX1
NOT AL
MOV INPUTXX,AL
MOV CL,1H
JMP CONV
NOT2:
LEA DX,X16
MOV AH,9H
INT 21H
XOR AX,AX
MOV AL,INPUTX2
NOT AL
MOV INPUTXX,AL
MOV CL,0H
JMP CONV
ANDG:
LEA DX,X17
MOV AH,9H
INT 21H
MOV AL,INPUTX1
MOV BL,INPUTX2
AND AL,BL
MOV INPUTXX,AL
MOV CL,0H
JMP CONV
ORG:
LEA DX,X18
MOV AH,9H
INT 21H
MOV AL,INPUTX1
MOV BL,INPUTX2
OR AL,BL
MOV INPUTXX,AL
MOV CL,0H
JMP CONV
XORG:
LEA DX,X19
MOV AH,9H
INT 21H
MOV AL,INPUTX1
MOV BL,INPUTX2
XOR AL,BL
MOV INPUTXX,AL
MOV CL,0H
JMP CONV
CONV:
;DEC
XOR AX,AX
MOV AL,INPUTXX
AAA
MOV BX,AX
MOV DL,BH
ADD DL,30H
MOV AH,2H
INT 21H
MOV DL,BL
ADD DL,30H
MOV AH,2H
INT 21H
;BIN
MOV DL,9H
MOV AH,2H
INT 21H
XOR AX,AX
XOR BX,BX
MOV BL,2H
MOV AL,INPUTXX
DIV BL
MOV BIN4,AH
MOV AH,0
DIV BL
MOV BIN3,AH
MOV AH,0
DIV BL
MOV BIN2,AH
MOV AH,0
DIV BL
MOV BIN1,AH
MOV DL,BIN1
ADD DL,30H
MOV AH,2H
INT 21H
MOV DL,BIN2
ADD DL,30H
MOV AH,2H
INT 21H
MOV DL,BIN3
ADD DL,30H
MOV AH,2H
INT 21H
MOV DL,BIN4
ADD DL,30H
MOV AH,2H
INT 21H
MOV AL,CL
CMP AL,0H
JE SPA
CMP AL,1H
JE NOT2
CMP AL,2H
JE ANGKAAA2
CMP AL,3H
JE PILIH
SPA:
MOV ANGKA1,0D
MOV ANGKA2,0D
MOV HASIL,0D
MOV SISA,0D
MOV INP,0D
MOV INPUTX1,0D
MOV INPUTX2,0D
MOV INPUTXX,0D
MOV BIN1,0D
MOV BIN2,0D
MOV BIN3,0D
MOV BIN4,0D
XOR AX,AX
XOR BX,BX
XOR CX,CX
XOR DX,DX
LEA DX,XX
MOV AH,9H
INT 21H
JMP PROSES
EN:
INT 20H
BAB V
PENUTUP
5.1 KESIMPULAN
Dari percobaan yang telah dilakukan dapat disimpulkan, bahwa:
ekinurafifah@gmail.com
BAB 1
PENDAHULUAN
1.1 Tujuan
1. Memahami perintah dan proses operasi prosedur pada mikroprosesor
2. Dapat mendekalarasikan prosedur menggunakan PROC dan menutup
prosedur dengan ENDP
3. Dapat melakukan operasi pemanggilan prosedur dengan CALL dan
mengembalikan dengan ke program utama dengan RET
4. Memahami perintah dan operasi stack pada mikroprosesor
5. Dapat melakukan operasi stack dengan PUSH dan POP
1.2 Alat dan Bahan
1. Komputer
2. Aplikasi Emu8086
BAB II
LANDASAN TEORI
2.1 Teori Modul
2.1.1 Pemahaman Prosedur
Prosedur merupakan suatu alat bantu yang sangat berguna. Dengan prosedur suatu
program yang besar bisa diselesaikan dengan lebih mudah. Proses pencarian
kesalahanpun akan lebih mudah bila digunakan prosedur. Prosedur diidentifikasi dengan
nama, diikuti dengan bagian baris tugas yang akan dikerjakan oleh prosedur. Akhir dari
prosedur ditunjukkan dengan pernyataan pengembalian.
Untuk memasukkan nilai suatu register pada stack, digunakan perintah push dengan
PUSH Reg16Bit
Sebagai contohnya pada perintah:
MOV AX,12 MOV BX,33 MOV CX,99
PUSH AX ; Simpan nilai AX pada stack
PUSH BX ; Simpan nilai BX pada stack
PUSH CX ; Simpan nilai CX pada stack
Untuk mengambil keluar koin nilai pada tabung stack, digunakan perintah pop dengan
POP Reg16Bit
Perintah POP akan mengambil koin nilai pada stack yang paling atas dan dimasukkan
pada Reg16Bit.
POP CX ; Ambil nilai pada puncak stack, masukkan ke CX
POP BX ; Ambil nilai pada puncak stack, masukkan ke BX
POP AX ; Ambil nilai pada puncak stack, masukkan ke AX
Prosedure adalah bagian perangkat lunak yang dapat dipergunakan berulang kali,
mengingat bahwa prosedur disimpan pada memori sekali, namun digunakan seseringkali
mungkin. Hal ini tentu saja menghemat ruang memori dan memudahkan pengembangan
perangkat lunak. Satu-satunya kerugian dari prosedur ialah bahwa prosedur sedikit
menghabiskan waktu sari computer untuk terhubung dengan prosedur tersebut hingga
kemudian selesai menjalankan prosedur tersebut. Instruksi CALLialah instruksi yang
melakukan hubungan dengan prosedur dan RET(Return) untuk kembali dari prosedur.
Perintah "RET(Return)" digunakan untuk mengembalikan Kontrol programpada
sipemanggil procedure. Pada bentuk NEAR perintah RET ini akan memPOP atau
mengambil register IP dari stack sebagai alamat loncat menuju program pemanggil
prosedur. Sedangkan pada bentuk "FAR" perintah RET akan mengambil register IP dan
CS dari stack sebagai alamat loncatan menuju programpemanggil procedure. Perintah
Call ini akan menyimpan register IP saja bila procedure yang dipanggil berbentuk
"NEAR". Bila procedure yang dipanggil berbentuk "FAR", maka perintah "CALL" akan
menyimpan register CS dan IP. DalamAssembler ada peraturan khusus mengenai
penyimpanan prosedur, sebuah prosedur di awali dengan directive PROC dan
diakhiridengan directive ENDP. Dengan menggunakan procedure suatu programyang
besar dapat diselesaikan dengan lebih mudah. Proses pencarian kesalahan pun akan lebih
mudah bil;a digunakan procedure.
Rangkuman Teori Penunjang
Prosedure adalah bagian perangkat lunak yang dapat dipergunakan berulang kali,
mengingat bahwa prosedur disimpan pada memori sekali, namun digunakan seseringkali
mungkin. Hal ini tentu saja menghemat ruang memori dan memudahkan pengembangan
perangkat lunak. Satu-satunya kerugian dari prosedur ialah bahwa prosedur sedikit
menghabiskan waktu sari computer untuk terhubung dengan prosedur tersebut hingga
kemudian selesai menjalankan prosedur tersebut. Instruksi CALLialah instruksi yang
melakukan hubungan dengan prosedur dan RET(Return) untuk kembali dari prosedur.
Perintah "RET(Return)" digunakan untuk mengembalikan Kontrol programpada
sipemanggil procedure. Pada bentuk NEAR perintah RET ini akan memPOP atau
mengambil register IP dari stack sebagai alamat loncat menuju program pemanggil
prosedur. Sedangkan pada bentuk "FAR" perintah RET akan mengambil register IP dan
CS dari stack sebagai alamat loncatan menuju programpemanggil procedure. Perintah
Call ini akan menyimpan register IP saja bila procedure yang dipanggil berbentuk
"NEAR". Bila procedure yang dipanggil berbentuk "FAR", maka perintah "CALL" akan
menyimpan register CS dan IP. DalamAssembler ada peraturan khusus mengenai
penyimpanan prosedur, sebuah prosedur di awali dengan directive PROC dan
diakhiridengan directive ENDP. Dengan menggunakan procedure suatu programyang
besar dapat diselesaikan dengan lebih mudah. Proses pencarian kesalahan pun akan lebih
mudah bil;a digunakan procedure.
Karena jumlah register data terbatas (hanya 4 buah : AX, BX, CX, DX), maka
diperlukan suatu lokasi penyimpanan data untuk sementara yang disebut stack. Kelebihan
stack adalah dari kesederhanaannya didalam menyimpan dan mengembalikan kembali
data yg telah tersimpan dibandingkan dengan penyimpanan ke memori. Dari arti katanya
stack adalah tumpukan. Ini berarti jika kita akan menyimpan data di stack, data tersebut
akan ditumpuk berdasarkan urutan siapa yang terakhir datang. Oleh karenanya, sistem
akses data di stack disebut LIFO (Last In First Out) dimana data yang akan diambil adalah
data yang ditumpuk terakhir. Untuk mengidentifikasi tumpukan data terakhir (paling
bawah), digunakan register SP (Stack Pointer). Jadi SP akan ‘menunjuk’ ke tumpukan
terendah dari stack. Setiap kali ada data yang ditumpuk, isi SP akan berkurang (counting
down). Instruksi yang digunakan untuk operasi stack adalah PUSH dan POP. PUSH akan
‘mendorong’ data ke stack dan POP akan ‘mengeluarkan’ data dari stack.
BAB III
METODE PRAKTIKUM
3.3 Langkah Percobaan
13. Nyalakan komputer, kemudian Buka aplikasi dan jalankan Aplikasi emulator
8086
14. Kemudian tulis dan jalankan program yang sudah dibuat pada aplikasi emulator
15. Kemudian screen shoot hasil program
16. Hasil screen shoot pada Program 1-6 dimasukkan dalam laporan praktikum
17. Kerjakan tugas akhir berdasarkan materi yang diberikan. Tambahkan keterangan
pada perintah-perintah yang diberikan pada mikroprosesor. Kerjakan masing-
masing.
18. Hasil tugas akhir discreen shot dan dilampirkan pada laporan praktikum.
BAB IV
HASIL DAN ANALISA
4.1 HASIL PENGUJIAN
PROGRAM 1
PROGRAM 2
PROGRAM 3
4.2 ANALISA
Pada praktikum modul 5 dengan judul “Prosedur dan Stack pada Mikroprosesor”
dengan tujuan pertama yaitu memahami perintah dan proses operasi prosedur pada
mikroprosesor, dimana prosedur pada mikroprosesor sangat berguna dalam membuat
suatu program yang besar agar dapat diselesaikan lebih mudah. Tujuan kedua yaitu dapat
mendeklarasikan prosedur menggunakan PROC dan menutup prosedur dengan ENDP,
dimana membuat prosedur bias menggunakan syntax (Nama_Prosedur PROC dan
Nama_Prosedur ENDP), dimana PROC merupakan keyword/kata kunci yang
menyatakan sebuah prosedur, sedangkan ENDP merupakan akhir deklarasi dari
pembuatan prosedur. Tujuan ketiga yaitu dapat melakukan operasi pemanggilan prosedur
dengan CALL dan mengembalikan ke program utama dengan RET, dimana operasi
CALL berfungsi untuk memanggil atau menjalankan prosedur, sedangkan RET (return)
digunakan untuk mengembalikan kontrol program pada si pemanggil prosedur. Tujuan
keempat yaitu memahami perintah dan operasi stack pada mikroprosesor, dimana stuck
merupakan bagian memori yang digunakan untuk menyimpan nilai dari suatu register
untuk sementara. Tujuan kelima yaitu dapat melakukan operasi stack dengan PUSH dan
POP, dimana PUSH digunakan untuk memasukan atau menginput data pada stuck,
sedangkan POP digunakan untuk mengeluarkan data dan akan mengeluarkan data dari
yang paling terakhir masuk.
Pada program pertama terdapat header MODEL SMALL (digunakan bentuk atau
ukuran small dengan ukuran kurang dari 1 segment atau 64 kb), CODE (digunakan untuk
memberitahukan kepada assembler bahwa akan mulai menggunakan code segment yang
digunakan untuk menyimpan program yang nanti akan dijalankan), ORG 100h
(digunakan untuk memberitahukan assembler supaya program pada saat dijalankan
diletak mulai pada offset ke 100h (256) byte). Selanjutnya menuliskan program MOV
AX,DX (memasukkan atau menyimpan isi DX ke AX); itu CALL Cetak_Kar (memanggil
prosedur dengan nama Cetak_Kar); MOV BX, AX (memasukkan atau menyimpan isi BX
ke AX); MOV AX, 10H (untuk menyimpan nilai hexadesimal pada register AX); INT
20H (untuk mengakhiri sebuah program). Selanjutnya terdapat prosedur Cetak_Kar
PROC NEAR dan terdapat MOV AH,02h (untuk mencetak karakter pada layar); MOV
DL,’S’ (karakter S akan dimunculkan pada DL); INT 21h (untuk mencetak karakter);
RET (perintah untuk kembali kepada pemanggil). Selantuknya Cetak_Kar ENDP (untuk
mengakhiri prosedur).
Pada percobaan kedua yaitu untuk mengetahui input, output, serta penyimpanana
pada stuck. Pada program memasukan nilai decimal pada register AX, BX, CX. Akan
tetapi pada register terbaca heksadesimal. Pada program apabila ingin menyimpan niali
pada register ke stack menggunakan perintah PUSH, sedangkan untuk mengambil nilai
stack menggunakan perintah POP.
Pada percobaan ketiga yaitu mencetak kalimat dengan jumlah karakter tertentu
yang mana menggunkan penggabungan prosedur dan stack. Pada program menuliskan
header MODEL SMALL (digunakan bentuk atau ukuran small dengan ukuran kurang
dari 1 segment atau 64 kb), CODE (digunakan untuk memberitahukan kepada assembler
bahwa akan mulai menggunakan code segment yang digunakan untuk menyimpan
program yang nanti akan dijalankan), ORG 100h (digunakan untuk memberitahukan
assembler supaya program pada saat dijalankan diletak mulai pada offset ke 100h (256)
byte). Setelah itu menuliskan program dengan label TData, JMP Proses (melompat
langsung ke label proses); Kar DB ? (untuk memanggil karakter yang akan dikeluarkan
yang menunjukan bahwa karakter belum diketahui); Kar Klm DB ‘AKU SUKA
PRAKTIKUM MIKROPROSESOR’ (kalimat yang akan ditampilkan). Selanjutnya pada
label proses terdapat MOV CX,24 (menunjukan banyaknya perulangan karakter yang
akan ditampilkan); XOR BX,BX (mengosongkan register BX). Kemudia pada label
ULANG terdapat MOV DL, Klm[BX] (untuk meletakkan karakter di Klm DB yang sudah
disimpan pada BX pada DL); MOV Kar, DL (meletakan isi dari DL ke Kar); CALL
Cetak_Kar (memanggil ke prosedur Cetak_Kar Proc) kemudian terdapat loop ulang.
Selanjutnya pada label Cetak_Kar PROC terdapat PUSH AX dan PUSH DX (untuk
menyimpan semua register yang akan digunakan); MOV AH,02h (mencetak karakter);
MOV DL,Kar (akan meletakan DL pada Kar); INT 21h (akan mencetak karakter pada
layar); POP DX dan POP AX (akan mengebalikan semua register yang disimpan); RET
(akan kembali kepada pemanggil) Selantuknya Cetak_Kar ENDP (untuk mengakhiri
prosedur). Data yang tampil pada layar sebanyak 24 kali perulangan atau AKU SUKA
PRAKTIKUM MIKRO, karena karakter full terdapat 34 sedangkan pada program hanya
terdapat 24 kali perulangan.
4.3 TUGAS AKHIR
PROGRAM:
.model small
.code
org 100h
mov ah,09h
lea dx,kal1
int 21h
lea dx,Buffer
mov ah,0Ah
int 21h
mov ah,09h
lea dx,kal2
int 21h
mov ah,09h
lea dx,kal3
int 21h
lea BX,Buffer+1
Ulang:
cmp byte ptr [BX],T_Enter
JE Balikan
mov dl,[BX]
push bx
inc BX
JMP Ulang
Balikan:
mov dl,[bx]
cmp dl,Buffer+1
je Exit
mov ah,02h
int 21h
dec bx
jmp Balikan
Exit:
loop Data
BAB V
PENUTUP
5.1 KESIMPULAN
Dari percobaan yang dilakukan dapat disimpulkan, bahwa:
1. Prosedur pada mikroprosesor sangat berguna dalam membuat suatu program yang
besar agar dapat diselesaikan lebih mudah.
2. Membuat prosedur bisa menggunakan syntax (Nama_Prosedur PROC dan
Nama_Prosedur ENDP), dimana PROC merupakan keyword/kata kunci yang
menyatakan sebuah prosedur, sedangkan ENDP merupakan akhir deklarasi dari
pembuatan prosedur.
3. Operasi CALL berfungsi untuk memanggil atau menjalankan prosedur,
sedangkan RET (return) digunakan untuk mengembalikan kontrol program pada
si pemanggil prosedur.
4. Stuck merupakan bagian memori yang digunakan untuk menyimpan nilai dari
suatu register untuk sementara.
5. PUSH digunakan untuk memasukan atau menginput data pada stuck, sedangkan
POP digunakan untuk mengeluarkan data dan akan mengeluarkan data dari yang
paling terakhir masuk.
5.2 SARAN
Dalam penyampaian materi sebaiknya sebelum praktikum tanpa terdapat jeda,
karena materi yang diberikan lalu dipraktikan akan lebih efektif dalam pemahaman.
DAFTAR PUSTAKA
Tan, Dody. 2017. STACK dan PENGENALAN PROSEDUR.
https://docplayer.info/46007407-Modul-v-stack-dan-pengenalan-procedure.html
(diakses 11 Desember 2020)
Patmasari, Raditiana. 2014. Mikroprosesor dan Antarmuka. Fakultas Teknik
Elektro. Universitas Telkom.
Wahyudi, Farid. 2017. STACK dan Prosedur.
http://faridstifler.blogspot.com/2017/03/assembler-stack-dan-prosedur.html
(diakses 11 Desember 2020)