Anda di halaman 1dari 165

LAPORAN PRAKTIKUM

MIKROPROSESOR

Nama : Eki Nur Afifah


NIM : 201811043
Kelas :B
Kelompok : B4
Jurusan : S1 Teknik Elektro
Tgl Praktikum : 29 September 2020
20 Oktober 2020
27 Oktober 2020
24 November 2020
1 Desember 2020
Asisten : Veby Rizky Diviralda

LABORATORIUM ELEKTRONIKA INDUSTRI

INSTITUT TEKNOLOGI PLN

JAKARTA

2020
MODUL I
INTERUPSI DAN INPUT/OUTPUT

Andhika Fitra Ramadhan (201811031); Cahyo Utomo (201811043); Mulia Djuang


(201811034); Eki Nur Afifah (201811043)

S1 Teknik Elektro, Institut Teknologi – PLN

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

2.1 Teori Modul


2.1.1 PENGERTIAN MIKROPROSESOR
Mikroprosesor adalah sebuah komponen rangkaian elektronik terpadu yang terdiri
dari rangkaian aritmatik, logik dan kontrol yang diperlukan untuk menjalankan fungsi-
fungsi sebuah CPU (Central Processing Unit) dari sebuah komputer digital. Rangkaian
elektronika terpadu tersebut dapat menerjemahkan dan menjalankan instruksi dari sebuah
program serta menangani operasi aritmatik. Mikroprosesor dikembangkan pada akhir
tahun 1970 sebagai hasil dari teknologi LSI (Large Scale Integration), suatu rangkaian
elektronik terpadu yang memungkinkan menggabungkan ribuan transistor, dioda, dan
resistor pada sebuah chip silikon sebesar 5 mm persegi.

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.

2.1.2 KOMPONEN MIKROPROSESOR (8086)


Terdapat banyak sekali tipe dari mikroprosesor, tetapi pada umumnya isi di dalam
mikroprosesor adalah sama. Salah satu chip mikroprosesor yang dikembangkan oleh
perusahaan Intel pada tahun 1970-an adalah mikroprosesor tipe 8085 dan seri selanjutnya
yaitu 8086. Perbedaan signifikan pada 8085 dan 8086 yaitu mikroprosesro 8085
merupakan tipe 8-bit sedangkan 8086 merupakan tipe 16-bit mikroprosesor. Pada
praktikum akan digunakan mikroprosesror tipe 8086. Berikut arsitektur internal dari
mikroprosesor 8086

Block Diagram of 8086 Microprocessor |Electronic Desk

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.

2.1.2.2 Arithmetic Logic Unit (ALU)


ALU melakukan operasi aritmatika (penjumlahan dan pengurangan) dan logika
(AND, OR). ALU menggunakan data dari memori dan Akumulator untuk melakukan
proses operasi tersebut dan menyimpan hasilnya pada akumulator.

 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.

2.1.2.3 General purpose register


Terdapat 8 general purpose registers, yaitu AH, AL, BH, BL, CH, CL, DH, and
DL. Secara individu register ini dapat digunakan untuk menyimpan data 8-bit dan dapat
digabungkan untuk menyimpan data 16-bit. Gabungan dari AH dan AL disebut AX, BH
dan BL adalah BX, begitu pula dengan CX dan DX.

AX register - Digunakan sebagai register akumulator. Digunakan untuk


menyimpan hasil dari operasi aritmatika.

BX register - Digunakan sebagai register dasar, yaitu sebagai memori


penyimpanan alamat dasar dari area memori dalam sebuah segmen data.

CX register - Digunakan sebagai register counter, yaitu untuk melakukan


instruksi perulangan sejumlah yang dimasukkan pada CX.

DX register - Digunakan untuk menyimpan alamat port I/O untuk instruksi I/O.

2.1.2.4 Pointer dan Indeks register


Merupakan 16-bit register yang menyimpan alamat dari mulainya suatu segmen.

 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.

2.1.2.6 Segment register


BIU memiliki 4 segment buses, yaitu CS, DS, SS & ES. Segment buses
menyimpan alamat dari instruksi dan data pada memori yang digunakan oleh
prosesor untuk mengakses lokasi memori. Ia juga memiliki sati pointer register
(IP), yang menyimpan alamat dari instruksi berikutnya yang akan dieksekusi oleh
EU.

 Code Segment (CS) - Digunakan untuk menyimpan alamat lokasi program


executable ditempatkan.
 Data Segment (DS) - Berisikan data yang digunakan pada program dengan
memanfaatkan alamat offset.
 Stack Segment (SS) - Berperan untuk menyimpan data dan alamat pada
memori selama proses eksekusi berlangsung.
 Extra Segment (ES) - Merupakan segmen tambahan yang digunakan oleh
string untuk menyimpan tambahan destinasi data.
2.1.3 Bentuk IC Mikroprosesor 8086

AD0-AD15 : Address/Data bus

A16-A19 : High order address bus

S2,S1,S0 : Status pins

BHE’/S7 : Bus High Enable/Status

RD’ : This is used for read operation

READY : This is the acknowledgement from the memory or slow device


that they have completed the data transfer

INTR : Interrupt Request

NMI : Non maskable interrupt

INTA : Interrupt acknowledge

MN/MX’ : Minimum/maximum

RQ’/GT1’,RQ’/GT0’ : Request/Grant

LOCK’ : Its an active low pin

TEST’ : This examined by a ‘WAIT’ instruction

CLK : Clock Input

RESET : This pin requires the microprocessor to terminate its present


activity immediately
DT/R : Data Transmit/Receive

DEN ; Data Enable

HOLD/HOLDA : HOLD indicates that another master has been requesting a local
bus

ALE : Addres Latch Enable

2.1.4 Pemrograman Bahasa Asembly

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.

Untuk mempelajari bahasa ini akan digunakan aplikasi emu8086. Lakukan


instalasi terlebih dahulu (https://emu8086-microprocessor-
emulator.en.softonic.com/download). Aplikasi ini merupakan emulator untuk
memprogram mikroprosesor 8086 menggunakan bahasa pemrograman asembly.
Tampilan aplikasi emu8086 dapat dilihat pada gambar dibawah ini. Source code program
dapat dituliska pada kolom editor.

Kolom Editor
2.1.5 Pengertian Interupsi (Interrupt)

Interupsi adalah suatu permintaan khusus kepada mikroposesor untuk melakukan


sesuatu. Bila terjadi interupsi, maka komputer akan menghentikan dahulu apa yang
sedang dikerjakannya dan melakukan apa yang diminta oleh yang menginterupsi.

Interupt dibagi menjadi 2 yaitu interrupt BIOS dan DOS :

- 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.

2.1.6 Input dan Output pada Mikroprosesor


Pengertian input dan output pada mikroprosesor sama dengan perangkat
elektronik lainnya, yaitu input adalah masukan yang didapatkan oleh mikroprosesor guna
mengolah data yang dimasukkan sedangkan output adalah hasil olahan data atau perintah
yang diberikan dari mikroprosesor kepada lingkungannya. Input yang pada
mikroprosesor contohnya adalah dari keyboard dan mouse. Output dari mikroprosesor
contohnya tampilan pada layar monitor computer dan transmisi data lewat PORT
mikroprosesor.

Selanjutnya seiring dengan topik-topik praktikum akan dipelajari tipe-tipe


Input/output yang dapat diberikan/dikeluarkan oleh mikroprosesor. Tipe-tipe yang
dimaksud diatur oleh interupsi yang diberikan dan isi dari register-register pada
mikroprosesor.
Tabel 1.1. BIOS Interrupt

Tabel 1.2. DOS Interrupt

Program 1. Mencetak Huruf ‘A’ ke Layar

.MODEL SMALL

.CODE

ORG 100h
Proses :

MOV AH,02h ; Nilai servis ntuk mencetak karakter


MOV DL,'A' ; DL = Karakter ASCII yang akan dicetak
INT 21h ; Cetak karakter !!
INT 20h ; Selesai ! kembali ke DOS

END Proses

Syntax Highlight

INTERRUPT 21h - Service 02h


Write Character To Standard Output
Fungsi : Untuk mencetak satu buah karakter pada layar.
Register Input : Register Output : Tidak ada
AH = 02h
DL = Kode ASCII

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

Program 2. Mencetak karakter beserta atribut

.MODEL SMALL
.CODE
ORG 100h

Proses :

MOV AH,09h ; Nilai servis untuk mencetak karakter


MOV AL,'A' ; AL = Karakter yang akan dicetak
MOV BH,00h ; Nomor Halaman layar
MOV BL,93h ; Warna atau atribut dari karakter
MOV CX,03h ; Banyaknya karakter yang ingin dicetak
INT 10h ; Laksanakan !!!
INT 20h ; Selesai ! kembali ke DOS

END Proses

Syntax Highlight

INTERRUPT 10h - Service 09h


Write Character And Attribute At Cursor Position
Fungsi : Mencetak karakter dan atribut pada posisi kursor.
Register Input : Register Output : Tidak Ada.
AH = 09h
AL = kode ASCII karakter
BH = nomor halaman
BL = atribut karakter
CX = jumlah pengulangan pencetakan
Penjelasan : Karakter kontrol akan dicetak sebagai karakter biasa.

Program 3. Meminta memasukkan dan menampilkan masukan

.MODEL SMALL

.DATA

ORG 100H

MSG1 DB "ENTER YOUR CHARACTER : $" ;DB = Define Bytes

MSG2 DB 10,13, "THE CHARACTER IS $" ;DB bisa numerik atau


text

.CODE

START:

MOV DX,OFFSET MSG1 ;OFFSET meminta alamat variabel

MOV AH,09H ;Nilai servis untuk mencetak karakter

INT 21H ;Cetak data pada alamat DX

MOV AH,01H ;Nilai servis untuk mencetak masukan

INT 21H ;Membaca masukan 1 karakter


MOV BL,AL ;Menyimpan isi AL ke BL

MOV DX,OFFSET MSG2 ;OFFSET meminta alamat variabel

MOV AH,09H ;Nilai servis untuk mencetak karakter

INT 21H ;Cetak data pada alamat DX

MOV DL,BL ;Menyimpan isi BL ke DL

MOV AH,02H ;Nilai servis untuk mencetak karakter

INT 21H ;Cetak karakter pada alamat DL

INT 20H ;Exit Program

END START

Syntax Highlight

INTERRUPT 21h - Service 01h


Read Character With Echo
Fungsi : Untuk membaca masukan 1 karakter dari keyboard dan menampilkannya ke
layar. Fungsi ini dapat dihentikan oleh penekanan tombol Ctrl+Break.
Register Input : Register Output :
AH = 10h AL = Kode ASCII
Catatan : Berbeda dengan fungsi dari BIOS, untuk membaca karakter khusus yang
mempunyai kode Extended, anda harus membacanya dua kali dengan fungsi dari OS ini.

Syntax Highlight

DB
Define Bytes
Fungsi : Mendefinisikan isi dari sebuah variabel
Register Input : Tidak Ada. Register Output :
Cara pakai :

NamaVariabel Data1, Data2, Data3... ;


Penjelasan : Jika data berupa string menggunakan tanda petik buka untuk memulai,
ditutup juga dengan tanda petik. Tanda dollar ($) merupakan akhir dari string
2.2 Teori Penunjang

Pengertian Dasar Mikroprosesor

Mikroprosesor pertama kali diperkenalkan oleh IntelCorporation pada tahun 1971


berupa sebuah chip Intel 4004. Chip4004 berupa LSI (Large Scale Integration) yang berisi
rangkaianlogika yang cukup besar, karena chip LSI mampumenggantikanratusan
rangkaian yang digunakan dalam sistemmikro komputer konvensional yang digunakan
pada waktu itu.Pada 4004 memiliki 46 perintah (instruction) dan mampu memuatdata
sebanyak 4 bit setiap saat.

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.

Mikroprosesor adalah sebuah chip (keping) yang dapat melaksanakan operasi-


operasi hitungan, operasi nalar, dan operasi kendali secara elektronis (digital). Biasanya
mikroprosesor dikemas dengan plastik atau keramik. Kemasannya dilengkapi dengan pin-
pin yang merupakan terminal masukan dan keluaran dari chip. Mikroprosesor merupakan
rangkaian terpadu (integreted circuit) dalam bentuk komponen chip VLSI (very large
scale integration) yang mampu menjalankan perintah secara berurutan dalam bentuk
program sehingga dapat bekerja sesuai yang diinginkan programer. Perintah atau
instruksi yang diberikan pada suatu mikroprosesor haruslah dapat dimengerti oleh
mikroprosesor itu sendiri. Pada umumnya instruksi yang diberikan dalam bentuk besaran-
besaran biner atau dalam bahasa mesin (machine language).

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.

Namun demikian terdapat beberapa jenis mikroprosesor yang kompatible satu


arah saja, artinya ada program yang dapat dijalankan oleh suatu mikroprosesor dapat
dijalankan oleh mikroprosesor yang berbeda, tetapi untuk kebalikannya maka program
tersebut tidak dapat jalan. Misalnya tipe mikroprosesor Z80 dapat menjalankan instruksi
untuk mikroprosesor 8080 ataupun 8085, program yang menggunakan prosesor 8086 dapat
dijalankan oleh prosesor yang lebih tinggi (80186, 80286, 80386, 80486 dan seterusnya) namun tidak
dapat program (80186, 80286, 80386, 80486 tidak dapat dijalankan oleh prosesor dibawahnya

Saluran-saluran pada Mikroprosesor

Secara fisik mikroprosesor memiliki beberapa saluran masukan maupun keluaran


yang digunakan untuk sambungan dengan komponen-komponen pendukung sistem
mikroprosesor. Saluran-saluran tersebut dikelompokkan sebagai berikut:
oBus saluran Alamat (Address Bus)
oBus saluran Data (Data Bus)
oBus saluran Kendali (Control Bus)
Secara blok diagram saluran-saluran yang terdapat pada mikroprosesor Z80 dapat
digambarkan sebagai berikut:
Addres Bus

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

Jadi misalkan suatu mikroprosesor memiliki jumlah penyemat 16 saluran, maka


kapasitas total alamat memori yang dapat ditangani oleh mikroprosesor tersebut adalah
216= 65536 byte, sedangkan untuk mencari jumlah saluran dapat dihitung dengan rumus
sebagai berikut:

Jumlah saluran alamat = 2 log jumlah total memori

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

Selain terdapat alamat-alamat yang dapat digunakan untuk menghubungi


perangkat ingatan, pada CPU Z80 juga memiliki alamat-alamat yang digunakan untuk
keperluan penanganan perangkat-perangkat I/O sebanyak 256 alamat. Sebagaimana
pengaturan alamat pada sistem ingatan, maka alamat I/O ditangani oleh address bus
bagian bawah (A0 sampai A7) sebanyak 8 saluran.Dalam kode heksa desimal alamat I/O
adalah 00-FF. Sedangkan address bus bagian atas (A8-A15) digunakan untuk buffer
(penyangga) data. Jadi pada address bus memiliki fungsi ganda sebagai alamat ingatan
dan alamat masukan atau keluaran.
Rangkuman Teori Penunjang

Mikroprosesor adalah sebuah chip (keping) yang dapat melaksanakan operasi-


operasi hitungan, operasi nalar, dan operasi kendali secara elektronis (digital). Biasanya
mikroprosesor dikemas dengan plastik atau keramik. Kemasannya dilengkapi dengan pin-
pin yang merupakan terminal masukan dan keluaran dari chip. Mikroprosesor merupakan
rangkaian terpadu (integreted circuit) dalam bentuk komponen chip VLSI (very large
scale integration) yang mampu menjalankan perintah secara berurutan dalam bentuk
program sehingga dapat bekerja sesuai yang diinginkan programer. Perintah atau instruksi
yang diberikan pada suatu mikroprosesor haruslah dapat dimengerti oleh mikroprosesor
itu sendiri. Pada umumnya instruksi yang diberikan dalam bentuk besaran-besaran biner
atau dalam bahasa mesin (machine language).

Secara fisik mikroprosesor memiliki beberapa saluran masukan maupun keluaran


yang digunakan untuk sambungan dengan komponen-komponen pendukung sistem
mikroprosesor. Saluran-saluran tersebut dikelompokkan sebagai berikut:
oBus saluran Alamat (Address Bus)
oBus saluran Data (Data Bus)
oBus saluran Kendali (Control Bus)
Macam-macam saluran alamat, antara lain:
1. Address Bus, 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.
2. Memori Address, 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.
3. I/O Address, Sebagaimana pengaturan alamat pada sistem ingatan, maka alamat
I/O ditangani oleh address bus bagian bawah (A0 sampai A7) sebanyak 8
saluran.Dalam kode heksa desimal alamat I/O adalah 00-FF. Sedangkan address
bus bagian atas (A8-A15) digunakan untuk buffer (penyangga) data. Jadi pada
address bus memiliki fungsi ganda sebagai alamat ingatan dan alamat masukan
atau keluaran.
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 - 3 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
4.1 Hasil Pengujian
Program 1

Program 2

Program 3
4.2 Analisa

Pada modul 1 dengan judul Pengantar Mikroprosesor dan Bahasa Pemrograman


Assembly (Interupsi dan Input/Output). Mikroprosesor adalah sebuah komponen
elektronika terpadu yang terdiri dari rangkaian aritmatik, logic dan kontrol yang
diperlukan untuk menjalankan fungsi-fungsi sebuah CPU (Central Processsing Unit) dari
sebuah computer digital. Tujuan dari praktikum ini antara lain mampu memahami dan
menjelaskan cara kerja mikroprosesor dan menggunkan Bahasa pemrograman Assembly
untuk memprogram mikroprosesor, memahami fungsi dari interupsi pada mikroprosesor,
memahami cara meminta masukkan dari keyboard dan menampilkan pada layar.

Mikroprosesor banyak digunakan sebagai rangkaian kontrol dalam industry robot,


alat-alat penelitian, dan peralatan-peralatan rumah sakit. Kemajuan teknologi tersebut
juga memungkinkan mikroprosesor dipakai untuk produk-produk konsumen seperti:
pegrammable microwave oven, televisi, game-game elektronk dan juga dalam bidang
otomotif. Mikroprosesor yang dikembangkan oleh perusahaan intel yaitu mikroprossesor
tipe 8085 dan seri selanjutnya yaitu 8086. Perbedaan signifikan pada 8085 yaitu
menggunakan tipe 8 bit, sedangkan pada 8086 menggunakan tipe 16 bit. Pada praktikum
ini menggunakan mikroprosesor 8086. Isi mikroprosesor 8086 dibagi menjadi dua
berdasarkan fungsinya, yaitu EU (Executtion Unit) dan BIU (Bus Interface Unit). EU
memberi intruksi pada BIU untuk memulai dari mana data yang ingin dieksekusi diambil
yang nantinya diterjemahkan menjadi Bahasa mesin sebelum dieksekusi. BIU mengurus
semua transfer data dan alamat antar bus untuk EU seperti pengiriman alamat, mengambil
instruksi dari memori, membaca dan menulis data ke port maupun memori.

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.

Pada percobaan ketiga yaitu meminta memasukkan dan menampilkan karakter.


Header yang digunakan adalah model small, data(untuk memberitahu assembler bahwa
bagian bawah dari header data adalah data yang akan digunakan), dan org 100h. Selain
itu terdapat MSG1 DB "ENTER YOUR CHARACTER : $" (DB berfungsi untuk
membawa inputan yang diingnkan sampai string dan “$” atau string). Lalu MSG2 DB
10,13, "THE CHARACTER IS $" (10,13 berfungsi sebagai pemberi sepasi dan menata
outputan agar lebih rapi). Dan cose yang digunakan untuk menyimpan program yang
nantinya akan dijalankan. Setelah memasukkan header lalu masukan perintah MOV
DX,OFFSET MSG1; MOV AH,09h; INT 21h; MOV AH,01h; INT 21h; MOV BL,AL;
MOV DX, OFFSET MSG 2; MOV AH,09h; INT 21h; MOV DL,BL; MOV AH,02h;
INT 21h; INT 20h. 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 layar emulator screen berupa tulisan ENTER YOUR
CHARACTER: lalu masukan karakter dan karakter yang dimasukan akan muncul pada
THE CHARACTER IS, sehingga karakter yang diketik sama dengan karakter yang
muncul.
4.3 Tugas Akhir

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

Dari percobaan yang dilakukan dapat disimpulkan, bahwa:

1. Mikroprosesor menjalankan sekumpulan bahasa pemrograman yang berisi


intruksi-intruksi yang diterjemahkan oleh decorder menjadi bahasa mesin yang
dimengerti oleh computer.
2. Interupsi berfungsi untuk memberi perintah kepada mikroprosesor untuk
melakukan sesuatu.
3. Perintah inputan menggunakan karakter AH, dan untuk outputan menggunakan
INT 21h
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

Wardoyo, Siswo. 2011. Dasar Mikroprosesor. Cilegon.


MODUL II
Operasi Aritmatika pada Mikroprosesor
Andhika Fitra Ramadhan (201811031); Cahyo Utomo (201811043); Mulia Djuang
(201811034); Eki Nur Afifah (201811043)

S1 Teknik Elektro, Institut Teknologi – PLN

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

Didalam pemrograman dengan bahasa assembler, bisa digunakan berbagai jenis


bilangan berdasarkan basisnya. Jenis bilangan yang bisa digunakan, yaitu: Bilangan
biner(basis 2), octal (basis 8) desimal (basis 10) dan hexadesimal (basis 16). Pemahaman
terhadap jenis-jenis bilangan ini adalah penting, karena akan sangat membantu kita dalam
pemrograman yang sesungguhnya. Penulisan penanda basis pada sebuah bilangan
ditandai dengan angka dipojok kanan bawah suatu bilangan, misalkan 10 adalah biner
maka diulis 102, jika 10 adalah decimal ditulis 1010 dan heksadesimal 1016. Tetapi untuk
mendefisikan jenis bilangan pada Bahasa Assembly, bilangan tersebut diakhiri dengan
huruf B(Biner), O(Oktal), D(Desimal) dan H(Hexadesimal).
Contoh MOV AX, 01010H. 0101 pada perintah tersebut merupakan bilangan
Hexadesimal
2.1.2 Bilangan Biner
Sebenarnya semua bilangan, data maupun program itu sendiri akan diterjemahkan
oleh komputer ke dalam bentuk biner. Jadi pendefinisisan data dengan jenis bilangan
apapun (Desimal, dan hexadesimal) akan selalu diterjemahkan oleh komputer ke dalam
bentuk biner. 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.
Contohnya: bilangan biner 01112 = (0 x 23) + (1 x 22) + (1 x 21) + (1 x 20) = 710

2.1.3 Bilangan Oktal


Bilangan oktal adalah bilangan dengan basis 8, artinya angka yang dipakai hanyalah
antara 0 -7. Sama halnya dengan jenis bilangan yang lain, suatu bilangan oktal dapat
dikonversikan dalam bentuk desimal dengan menjumlahkan tiap suku yang tiap suku ke-
n (n=0 dari paling kanan) dikalikan dengan 8n.
Contohnya bilangan 128 = (1 x 81) + (2 x 80) = 1010.
2.1.4 Bilangan Desimal
Tentunya jenis bilangan ini sudah tidak asing lagi bagi kita semua. Bilangan
Desimal adalah jenis bilangan yang paling banyak dipakai dalam kehidupan sehari-hari,
sehingga kebanyakan orang sudah akrab dengannya. 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.
Misalkan pada angka 12310 = (1 X 102) + (2 X 101) + (3 X 100).

2.1.5 Bilangan Hexadesimal


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.
Contoh : A16 = 1010 = 128 = 10102

2.2 Operasi Penambahan


2.2.1 ADD
Untuk menambah dalam bahasa assembler digunakan perintah ADD dan ADC serta INC.
Perintah ADD digunakan dengan syntax :
ADD Tujuan,Asal
Perintah ADD ini akan menambahkan nilai pada Tujuan dan Asal. Hasil yang
didapat akan ditaruh pada Tujuan, dalam bahasa pascal sama dengan instruksi Tujuan:=Tujuan
+ Asal. Sebagai contohnya :
MOV AH,15h ; AH:=15h
MOV AL,4 ; AL:=4
ADD AH,AL ; AH:=AH+AL, jadi AH=19h
Perlu anda perhatikan bahwa pada perintah ADD ini antara Tujuan dan Asal harus
mempunyai daya tampung yang sama, misalnya register AH(8 bit) dan AL(8 bit), AX(16
bit) dan BX(16 bit). Mungkin ada yang bertanya-tanya, apa yang akan terjadi bila Tujuan
tempat hasil penjumlahan disimpan tidak mencukupi seperti pertambahan 1234h dengan
F221h.
1234 h Biner --> 0001 0010 0011 0100
F221 h Biner --> 1111 0010 0010 0001
---------- + --------------------- +
10455 h 1 0000 0100 0101 0101

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 :

MOV AX,1234h ; NIlai AX:=1234h dan carry=0


MOV BX,0F221h ; Nilai BX:=F221h dan carry=0
ADD AX,BX ; Nilai AX menjadi 0455h dan carry=1
2.2.2 ADC
Perintah ADC digunakan dengan cara yang sama pada perintah ADD, yaitu :

ADC Tujuan,Asal

Perbedaannya pada perintah ADC ini Tujuan tempat menampung hasil


pertambahan Tujuan dan Asal ditambah lagi dengan carry flag
(Tujuan:=Tujuan+Asal+Carry). Pertambahan yang demikian bisa memecahkan masalah
seperti yang pernah kita kemukakan, seperti pertambahan pada bilangan
12345678h+9ABCDEF0h.
Seperti yang telah kita ketahui bahwa satu register hanya mampu menampung 16
bit, maka untuk pertambahan seperti yang diatas bisa anda gunakan perintah ADC untuk
memecahkannya, Contoh:
MOV AX,1234h ; AX = 1234h CF = 0
MOV BX,9ABCh ; BX = 9ABCh CF = 0
MOV CX,5678h ; BX = 5678h CF = 0
MOV DX,0DEF0h ; DX = DEF0h CF = 0
ADD CX,DX ; CX = 3568h CF = 1
ADC AX,BX ; AX = AX+BX+CF = ACF1

Hasil penjumlahan akan ditampung pada register AX:CX yaitu ACF13568h.


Adapun flagflag yang terpengaruh oleh perintah ADD dan ADC ini adalah
CF,PF,AF,ZF,SF dan OF.

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.2.4 Contoh Program 1 Penambahan


.MODEL SMALL
.CODE
ORG
100h
Proses :
MOV AH,15h ; AH:=15h
MOV AL,4h ; AL:=4
ADD AH,AL ; AH:=AH+AL, jadi AH=19h
MOV AX,1234h ; NIlai AX:=1234h dan carry=0
MOV BX,0F221h ; Nilai BX:=F221h dan carry=0
ADD AX,BX ; AX:=AX+BX, jadi nilai AX=0455h dan carry = 1
MOV AX,1234h ; AX = 1234h CF = 1
MOV BX,9ABCh ; BX = 9ABCh CF = 1
MOV CX,5678h ; BX = 5678h CF =
1 MOV DX,0DEF0h ; DX = DEF0h CF =
1 ADD CX,DX ; CX = 3568h CF =
1
ADC AX,BX ; AX = AX+BX+CF = ACF1 dan carry =
0 INC AL ; AL:=AL+1, nilai pada AL ditambah 1
INT 20h
END Proses

2.3 Operasi Pengurangan


2.3.1 SUB
Untuk Operasi pengurangan dapat digunakan perintah SUB dengan syntax:
SUB Tujuan,Asal.
Perintah SUB akan mengurangkan nilai pada Tujuan dengan Asal. Hasil yang
didapat akan ditaruh pada Tujuan, dalam bahasa pascal sama dengan instruksi
Tujuan:=Tujuan-Asal. Contoh :
MOV AX,15h ; AX:=15h
MOV BX,12h ; BX:=12h
SUB AX,BX ; AX:= 15h-12h= 3h
SUB AX,AX ; AX=0
Untuk menolkan suatu register bisa anda kurangkan dengan dirinya sendiri seperti SUB
AX,AX.

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

2.4 Operasi Perkalian


Untuk perkalian bisa digunakan perintah MUL dengan syntax:
MUL SUMBER
Sumber disini dapat berupa suatu register 8 bit (mis:BL,BH,..), register 16 bit (mis:
BX,DX,..) atau suatu varibel. Ada dua kemungkinan yang akan terjadi pada perintah
MUL ini sesuai dengan jenis perkalian 8 bit atau 16 bit. Bila Sumber merupakan 8 bit
seperti MUL BH, maka komputer akan mengambil nilai yang terdapat pada BH dan nilai
pada AL untuk dikalikan. Hasil yang didapat akan selalu disimpan pada register AX. Bila
sumber merupakan 16 bit seperti MUL BX maka komputer akan mengambil nilai yang
terdapat pada BX dan nilai pada AX untuk dikalikan. Hasil yang didapat akan disimpan
pada register DX dan AX (DX:AX), jadi register DX menyimpan Word tingginya dan
AX menyimpan Word rendahnya. Contohnya :
MOV AL,50H
MOV BL,0FFH
MUL BL
AX = AFB0H

2.4.1 Contoh Program 3 Perkalian


.MODEL SMALL
.CODE
ORG
100H TDATA :
JMP PROSES ; Lompat ke Proses
A DW 01EFH ; Define word
B DW 02EFH ; Define word
HSLLO DW ? ; Membuat variable bebas
HSLHI DW ? ; Membuat variable bebas
PROSES:
MOV AX,A ; AX = 1EFH = 495D
MUL B ; Kalikan 1EFH*2EFH = 495D*751D = 371745D = 0005AC21H
MOV HSLLO,AX ; AX bernilai AC21 sehingga HSLLO=AC21
MOV HSLHI,DX ; DX bernilai 0005 sehingga HSLHI=000A
INT 20H ; Kembali ke DOS
END TDATA
2.5 Pembagian
Operasi pada pembagian pada dasarnya sama dengan perkalian. Untuk operasi
pembagian digunakan perintah DIV dengan syntax:
DIV Sumber/Data
Bila sumber merupakan operand 8 bit seperti DIV BH, maka komputer akan mengambil
nilai pada register AX dan membaginya dengan nilai BH. Hasil pembagian 8 bit ini akan
disimpan pada register AL dan sisa dari pembagian akan disimpan pada register AH. Bila
sumber merupakan operand 16 bit seperti DIV BX, maka komputer akan mengambil nilai
yang terdapat pada register DX:AX dan membaginya dengan nilai BX. Hasil pembagian
16 bit ini akan disimpan pada register AX dan sisa dari pembagian akan disimpan pada
register DX.
2.5.1 Contoh Program 4 Pembagian
.MODEL SMALLS
.CODE
ORG 100h
TData :
JMP Proses ; Lompat ke Proses
A DW 01EFh
B DW 2 Hsl DW ?
Sisa DW ?
Proses:
SUB DX,DX ; Jadikan DX=0
MOV AX,A ; AX = 1EFH = 495D
DIV B ; Bagi 1EFH:2H
MOV Hsl,AX ; AX bernilai 00F7H = 247D sehingga Hsl=00F7
MOV Sisa,DX ; DX berisi 0001 sehingga Sisa=0001
INT 20h ; Kembali ke DOS
END Tdata
2.2 Teori Penunjang
Sistem bilangan yang banyak dipergunakan oleh manusia adalah sistem bilangan
desimal, yaitu sistem bilangan yang menggunakan sepuluh macam simbol untukmewakili
suatu besaran. Sistem ini banyak digunakan karena manusia mempunyai sepuluh jari
untuk dapat membantu perhitungan. Lain halnya dengan komputer, komputer
menggunakan komponen-komponen digital yang bersifat saklar (switch). Logika di
komputer diwakili oleh dua bentuk keadaan, yaitu tidak ada arus (off) dan ada arus (on).
Melihat sifat tersebut, sistem bilangan yang sesuai adalah sistem bilangan biner.
Kesederhanaan perubahan nilai bilangan biner ke bilangan oktal atau heksadesimal
membuat bilangan oktal dan heksadesimal juga sering digunakan di dalam dunia
komputer.

Semua sistem digital bekerja dengan menggunakan sistem bilangan biner.


Sehingga dengan kata lain sistem bilangan biner merupakan sistem bilangan yang paling
penting dalam sistem digital. Selain sistem bilangan biner, sistem yang sering dipakai
dalam pengkodean instruksi oleh sistem digital adalah sistem bilangan oktal dan
heksadesimal.

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).

1. Instruksi ADD dan SUB

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:

Tabel 1. Instruksi ADD

Instruksi SUB digunakan hanya untuk melakukan operasi pengurangan 8


bit. Pada operasi SUB isi register A dikurangkan dengan salah satu isi register A, B, C,
D, E, H, L, atau data immediate 8 bit. Disamping juga isi register A dapat dikurangi
dengan data pada suatu lokasi memori yang alamatnya dicatat oleh register HL, IX, dan
IY.

Tabel 2. Instruksi SUB


Instruksi ADD dan SUB dapat mempengaruhi status Sign, Zerro, HalfCarry,
Overflow, dan Carry pada Register Flag. Pada instruksi ADD flag N = 0 dan pada
instruksi SUB flag N = 1. Dua keadaan ini digunakan untuk menyatakan fungsi flag C
sebagai carry atau borrow.

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).

Tabel 3. Instruksi ADC

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

3. Instruksi INC (Increment) dan DEC (Decrement)

Instruksi INC digunakan untuk menambah isi suatu register atau memori dengan
satu nilai. Instruksi ini sangat potensial digunakan untuk membuat counter cacah naik.

Tabel 5. Instruksi INC


Instruksi DEC digunakan untuk mengurangi isi register atau data suatu
memori dengan nilai 1.

Tabel 6. Instruksi DEC

4. Instruksi Aritmetika Khusus


Dalam operasi aritmetika disediakan beberapa instruksi khusus yaitu :
- DAA mnemonic dari Decimal Adjust Accumulator

- CPL mnemonic dari Complement Accumulator ( Komplemen 1)

- NEG mnemonic dari Negate Accumulator (Komplemen 2).

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)

Instruksi CPL digunakan untuk merubah isi akumulator menjadi bentuk


komplemen 1 yaitu dengan menginverse semua bit yang ada di akumulator.

c. Instruksi NEG (Negate)

Instruksi BEG digunakan untuk merubah isi akumulator menjadi bentuk


negatifnya yaitu dengan merubahnya menjadi nilai komplemen dua.

5. Instruksi CP (Compare)

Digunakan untuk membandingkan isi akumulator dengan data immediate 8 bit


atau isi salah satu register 8 bit atau isi/data suatu lokasi memori tanpa merubah isi
akumulator. Instruksi CP membangun keadaan pada status Flag pada Bit Sign, Zero,
Over Flow, Half Carry dan Carry pada Register Flag. Instruksi CP sangat baik digunakan
untuk menguji sebuah data apakah data tersebut sama dengan suatu nilai tertentu atau
lebih besar dan lebih kecil dari suatu nilai tertentu.

6. Instruksi LOGIKA AND, OR, dan XOR

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.

Tabel 8. Instruksi Logika


Pola di atas berlaku juga pada operasi LOGIKA OR dan XOR. Simbol
operasi Logika adalah sbb:

^ : untuk LOGIKA AND

V : untuk LOGIKA OR

(+) : untuk LOGIKA XO


Ringkasan Teori Penunjang

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 dan SUB

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 (Increment) dan DEC (Decrement)

Instruksi INC digunakan untuk menambah isi suatu register atau memori dengan
satu nilai. Instruksi ini sangat potensial digunakan untuk membuat counter cacah naik.

Instruksi Aritmetika Khusus

Dalam operasi aritmetika disediakan beberapa instruksi khusus yaitu :

- DAA mnemonic dari Decimal Adjust Accumulator

- CPL mnemonic dari Complement Accumulator ( Komplemen 1)

- NEG mnemonic dari Negate Accumulator (Komplemen 2).


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 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
4.1 Hasil Pengujian

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 ini terdapat 4 operasi aritmatika, yaitu penjumlahan,


pengurangan, perkalian, dan pembagian. Operasi Penjumlahan yaitu suatu proses untuk
menambahkan angka dalam Bahasa assembler digunakan perintah ADD, ADC dan INC.
Perintah ADD ini akan menambahkan nilai pada tujuan dan asal. Hasil yang didapat akan
ditaruh pada tujuan, perintah ADD ini perlu diperhatikan antara tujuan dan asal harus
mempunyai daya tampung yang sama, misalnya register AH (8 bit) dan AL(8 bit), AX(16
bit) dan BX(16 bit). Perintah ADC ini mempunyai cara yang sama seperti perintah ADD.
Pada perintah ADC memiliki tujuan tempat untuk menampung hasil pertambahan tujuan
dan asal yang ditambah lagi dengan carry flag. Carry Flag ini mengindikasikan apakah
ada data berlebih dari hasil operasi aritmatika dan akan aktif ketika sudah melebihi 15
bilangan desimal yang nantinya akan menambahkan nilai 1 pada bilangan biner. Hasil
penjumlahan pada ADC ini akan ditampung pada register AX: CX yaitu ACF13568h.
Perintah INC (Increment) digunakan khusus untuk pertambahan dengan 1. Perintah INC
hanya menggunakan 1 byte memory, sedangkan pada perintah ADD dan ADC
menggunakan 3 byte. Oleh karena itu, ketika ingin melakukan operasi pertambahan
dengan 1 gunakanlah perintah INC.

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.

Operasi Pengurangan yaitu suatu proses pengurangan angka dalam Bahasa


assembler terdapat tiga perintah yaitu SUB, SBB, DEC. Menggunakan perintah SUB
dengan sytax SUB Tujuan Asal. Perintah SUB akan mengurangkan nilai pada Tujuan
dengan Asal yang nantinya hasil didapat akan ditaruh pada Tujuan. Perintah SBB ini akan
mengurangkan nilai tujuan dengan asal dengan cara yang sama seperti perintah SUB,
kemudian hasil yang didapat dikurangi lagi dengan Carry Flag. Perintah DEC pada
operasi pengurangan digunakan khusus untuk pengurangan dengan 1. Perintah DEC
hanya menggunakan 1 byte memory, sedangkan perintah SUB dan SBB menggunakan 3
byte.

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

PTH1 DB 'MASUKKAN ANGKA1 : ','$'


PTH2 DB 13,10,'MASUKAN ANGKA2 : ','$'
HASIL DB 13,10, 'HASIL PENJUMLAHANNYA : ','$'
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

START : JMP INPUT

PTH1 DB 'MASUKAN ANGKA1 : ','$'

PTH2 DB 13,10,'MASUKAN ANGKA2 : ','$'

HASIL DB 13,10,'HASILNYA PENGURANGANNYA : ','$'

INPUT:

BLG1:

MOV AH,09H

MOV DX,OFFSET PTH1

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

MOV DX,OFFSET PTH2

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

MOV DX,OFFSET HASIL

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

ANGKA1 DB "MASUKKAN ANGKA1 : $"

ANGKA2 DB 13,10, "MASUKKAN ANGKA2 : $"

HASIL DB 13,10,"HASIL PERKALIAN : $"

.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 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 DX,OFFSET HASIL

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

Dalam penyampaian materi sebaiknya sebelum praktikum tanpa terdapat jeda,


karena materi yang diberikan lalu dipraktikan akan lebih efektif dalam pemahaman.
DAFTAR PUSTAKA

 Abdil, Margiono. 2020. Instruksi Aritmatika dan Logika.


http://margionoabdil.blogspot.com/2013/05/instruksi-aritmetika-logika.html
(diakses 11 Desember 2020).
 Patmasari, Raditiana. 2014. Mikroprosesor dan Antarmuka. Fakultas Teknik
Elektro. Universitas Telkom.
MODUL III
Operasi Logika dan Manipulasi Bit
Andhika Fitra Ramadhan (201811031); Cahyo Utomo (201811043); Mulia Djuang
(201811034); Eki Nur Afifah (201811043)

S1 Teknik Elektro, Institut Teknologi – PLN

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

Program 1. Operasi NOT


.MODEL SMALL
ORG 100H
.CODE
START:
MOV AL,3FH ;AL = 3FH 0011 1111
NOT AL ;AL = C0H 1100 0000
INT 20H ;Exit Program
END START
2.1.1.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.
A B A AND B
0 0 0
0 1 0
1 0 0
1 1 1
Operasi AND di dalam assembler, digunakan dengan syntax :
AND Tujuan,Sumber
Hasil dari operasi AND ini akan disimpan pada Tujuan, sebagai contoh, instruksi:
MOV AL,3FH
MOV BL,1AH
AND AL,BL
Perintah diatas akan menghasilkan nilai 1A bagi register AL. 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.
Program 2. Operasi AND
.MODEL SMALL
ORG 100H
.CODE
START:
MOV AL,3FH ;AL = 3FH 0011 1111
MOV BL,5BH ;BL = 5BH 0101 1011
AND AL,BL ;AL = 1BH 0001 1011
INT 20H ;Exit Program
END START

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

Operasi OR di dalam assembler, digunakan dengan syntax :


OR Tujuan,Sumber
Hasil dari operasi OR ini akan disimpan pada Tujuan, sebagai contoh, instruksi :
MOV AL,3FH
MOV BL,1AH
OR AL,BL
Hasil operasi OR diatas akan menghasilkan nilai 3F bagi register AL. Ingatlah :
Setiap bit yang di OR dengan 0 pasti menghasilkan bit itu sendiri, sedangkan
setiap bit yang di OR dengan 1 pasti menghasilkan bit 1.
Program 3. Operasi OR
.MODEL SMALL
ORG 100H
.CODE
START:
MOV AL,3FH ;AL = 3FH 0011 1111
MOV BL,1AH ;Bl = 3AH 0101 1010
OR AL,BL ;AL = 7FH 0111 1111
INT 20H ;Exit Program
END START

2.1.1.4 Gerbang XOR


Operator XOR akan menghasilkan nol untuk dua nilai yang sama nilainya dan
satu untuk yang berbeda.
A B A XOR B
0 0 0
0 1 1
1 0 1
1 1 0
Operasi XOR di dalam assembler, digunakan dengan syntax :
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.
Program 4. Operasi XOR
.MODEL SMALL
ORG 100H
.CODE
START:
MOV AX,0A12H ;AX = 0A12H 0000 1010 0001 0010
XOR AX,AX ;AX = 0000H 0000 0000 0000 0000
INT 20H ;Exit Program
END START

2.1.1 Manipulasi Bit


2.1.1.5 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.
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.
Program 5. Operasi SHL
.MODEL SMALL
ORG 100H
.CODE
START:
MOV AX,3FH
MOV CL,3
SHL AX,CL ; Geser 3 bit ke kiri AX=01F8H
END START
Akan menghasilkan nilai F8h pada register AX. Operasi detilnya dapat dilihat di
bawah ini.
3Fh : 0000 0000 0011 1111
SHL 1 : 0000 0000 0111 1110 (=007Eh)
SHL 2 : 0000 0000 1111 1100 (=00FCh)
SHL 3 : 0000 0001 1111 1000 (=01F8h)

2.1.1.6 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.
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.
Program 6. Operasi SHL
.MODEL SMALL
ORG 100H
.CODE
START:
MOV AX,3FH
MOV CL,3
SHR AX,CL ; Geser 3 bit ke kanan AX=0007H
END START

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.

Gambar 10.1. Tabel Operator NOT

Operasi Not di dalam assembler, digunakan dengan syntax:


Operasi Not di dalam assembler, digunakan dengan syntax:

Manipulasi Bit dan Logika

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

Operasi AND di dalam assembler, digunakan dengan syntax:

AND Tujuan,Sumber

Hasil dari operasi AND ini akan disimpan pada Tujuan, sebagai contoh, instruksi:

MOV AL,3Fh
MOV BL,1Ah
AND AL,BL

Perintah diatas akan menghasilkan nilai 1A bagi register AL.

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

Operasi OR di dalam assembler, digunakan dengan syntax:

OR Tujuan,Sumber

Hasil dari operasi OR ini akan disimpan pada Tujuan, sebagai contoh, instruksi:

MOV AL,3Fh
MOV BL,1Ah
OR AL,BL

Hasil operasi OR diatas akan menghasilkan nilai 3F bagi register AL.


Ingatlah! Setiap bit yang di OR dengan 0 pasti menghasilkan bit itu sendiri, sedangkan
setiap bit yang di OR dengan 1 pasti menghasilkan bit 1.

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

Operasi XOR di dalam assembler, digunakan dengan syntax:

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).

6. 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.
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.

Gambar 10.5. Operasi SHL

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.

3Fh : 0011 1111


SHL 1 : 0111 1110 (=7Eh)
SHL 2 : 1111 1100 (=FCh)
SHL 3 : 1111 1000 (=F8h)
7. 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.
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.

Gambar 10.6. Operasi SHR


Ringkasan Teori Penunjang

Terdapat 12 instruksi yang memberi kemampuan untuk memanipulasi bit biner


pada mikroprosesor 8086/8088. Instruksi ini mencakup operasi logika, shift dan rotasi.

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

4.1 HASIL PENGUJIAN


PROGRAM 1 (GERBANG NOT)

PROGRAM 2 (GERBANG AND)


PROGRAM 3 (GERBANG OR)

PROGRAM 4 (GERBANG XOR)


PROGRAM 5 (MANIPULASI BIT SHL)

PROGRAM 6 (MANIPULASI BIT SHR)


4.2 ANALISA
Pada praktikum modul ketiga dangan judul “Operasi Logika dan Manipulasi Bit”
dengan tujuan pertama adalah dapat memahami perintah dan proses operasi logika pada
mikroprosesor, dimana pada mikroprosesor terdapat perintah operasi logika NOT, AND,
OR dan XOR. Tujuan kedua adalah dapat melakukan operasi logika NOT, AND, OR, dan
XOR pada mikroprosesor, dimana 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) daan 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). Tujuan ketiga adalah memahami perintah dan proses operasi
manipulasi bit pada mikroprosesor, dimana 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). Tujuan keempat adalah dapat melakukan manipulasi bit geser kiri dan
geser kanan, dimana operasi bit geser kiri yaitu manipulasi SHL (shift left) dan operasi
bit geser kanan yaitu manipulasi SHR (shift right).

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:

;MINTA MASUKAN ANGKA


MOV DX, OFFSET TULISANGKA1 ; Print minta masukan
MOV AH, 09H
INT 21H

MOV AH, 01H


INT 21H ; Masukkan digit 1
SUB AL, 30H ; char masukan menjadi desimal
MOV BL, 10D
MUL BL
MOV ANGKA1, AL

MOV AH, 01H


INT 21H ; Masukkan digit 2
SUB AL, 30H ; char masukan menjadi desimal
ADD ANGKA1, AL ; membuat satuan

;MINTA MASUKAN ANGKA2


MOV DX, OFFSET TULISANGKA2 ; Print minta masukan
MOV AH, 09H
INT 21H

MOV AH, 01H


INT 21H ; Masukkan digit 1
SUB AL, 30H ; char masukan menjadi desimal
MOV BL, 10D
MUL BL
MOV ANGKA2, AL

MOV AH, 01H


INT 21H ; Masukkan digit 2
SUB AL, 30H ; char masukan menjadi desimal
ADD ANGKA2, AL ; membuat satuan

;MENAMPILKAN MASUKAN DALAM BINER1

MOV DX, OFFSET TULISKETERANGAN


MOV AH, 09H
INT 21H

MOV DX, OFFSET TULISHASILANGKA1


MOV AH, 09H
INT 21H

MOV BL, ANGKA1


MOV HASIL,BL

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

MOV BL, ANGKA1


MOV HASIL, BL ; Masukkan angka 1 ke hasil

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, 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 MASUKAN DALAM BINER

MOV DX, OFFSET TULISHASILANGKA2


MOV AH, 09H
INT 21H

MOV BL, ANGKA2


MOV HASIL,BL

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

MOV BL, ANGKA2


MOV HASIL, BL ; Masukkan angka 1 ke hasil

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, 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 NOT1


MOV DX, OFFSET TULISHASILNOT1 ; Print minta masukan
MOV AH, 09H
INT 21H

MOV AL, ANGKA1


NOT AL
AND AL, 0FH
MOV HASIL, AL

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 AL, ANGKA1


NOT AL
AND AL, 0FH
MOV HASIL, AL

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 NOT2


MOV DX, OFFSET TULISHASILNOT2 ; Print minta masukan
MOV AH, 09H
INT 21H

MOV AL, ANGKA2


NOT AL
AND AL, 0FH
MOV HASIL, AL

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 AL, ANGKA2


NOT AL
AND AL, 0FH
MOV HASIL, AL

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 AND


MOV DX, OFFSET TULISHASILAND ; Print minta masukan
MOV AH, 09H
INT 21H

MOV AL, ANGKA1


MOV BL, ANGKA2
AND AL, BL
AND AL, 0FH
MOV HASIL, AL

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 AL, ANGKA1


MOV BL, ANGKA2
AND AL, BL
AND AL, 0FH
MOV HASIL, AL

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

MOV AL, ANGKA1


MOV BL, ANGKA2
OR AL, BL
AND AL, 0FH
MOV HASIL, AL

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 AL, ANGKA1


MOV BL, ANGKA2
OR AL, BL
AND AL, 0FH
MOV HASIL, AL
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 X0R
MOV DX, OFFSET TULISHASILXOR ; Print minta masukan
MOV AH, 09H
INT 21H

MOV AL, ANGKA1


MOV BL, ANGKA2
XOR AL, BL
AND AL, 0FH
MOV HASIL, AL

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 AL, ANGKA1


MOV BL, ANGKA2
XOR AL, BL
AND AL, 0FH
MOV HASIL, AL

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
INT 20H ;Exit Program
END PROSES
BAB V
PENUTUP
5.1 KESIMPULAN

Dari percobaan yang telah dilakukan dapat disimpulkan, bahwa:

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

Dalam penyampaian materi sebaiknya sebelum praktikum tanpa terdapat jeda,


karena materi yang diberikan lalu dipraktikan akan lebih efektif dalam pemahaman.
DAFTAR PUSTAKA

 Patmasari, Raditiana. 2014. Mikroprosesor dan Antarmuka. Fakultas Teknik


Elektro. Universitas Telkom.
 Bundet. 2020. Manipulasi Bit dengan Gerbang Logika.
https://bundet.com/d/1113-manipulasi-bit-dengan-gerbang-logika (diakses 11
Desember 2020).
MODUL IV
Percabangan dan Perulangan pada Mikroprosesor
Andhika Fitra Ramadhan (201811031); Cahyo Utomo (201811043); Mulia Djuang
(201811034); Eki Nur Afifah (201811043)

S1 Teknik Elektro, Institut Teknologi – PLN

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

1. Penghitung Program (Program Counter).

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.

3. Instruksi Percabangan Bersyarat.


Instruksi percabangan bersyarat melakukan operasi loncat (jump) bila beberapa
syarat tertentu terpenuhi. Syarat-syarat ini tergantung dari data pada flag register.
Fungsi ini menyebabkan sebuah nikroprosesor mampu menanggapi berbagai syarat
yang mutlak perlu dalam merancang program loop. Arti dari instruksi-instruksi
beikut ini tertulis diselah kanannya :
CP 10H Membandingkan isi accumulator dengan 10H dan mengeset flag

yang sesuai.
JP Z, 1828H Jika zero flag dalam keadaan set, yaitu A = 10H, loncat ke alamat

1828H dan lanjutkan pelaksanaan program.


JP C, 245AH Jika carry flag dalam keadaan set, yaitu A < 10H, loncat ke 245AH

untuk melaksanakan program lain.


ADD A,B Sebaliknya, yaitu jika A > 10H, lanjutkan pelaksanaan program.

Syarat-syarat untuk instruksi percabangan bersyarat ditulis setelah JP :

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,

loncat ke alamat XXXX.


JP NZ, XXXX Jika zero flag = 0, loncat ke alamat XXXX.
JP PE, XXXX Jika parity flag = 1 (genap), atau jika terjadi overflow dalam

operasi aritmatik terdahulu, loncat ke alamat XXXX.


JP PO, XXXX Jika P/V = 0 (parity ganjil, atau tidak ada overflow), loncat
ke

alamat XXXX.
JP P, XXXX Jika sign flag = 0 (tanda dari hasil operasi yang terdahulu
adalah

positif), loncat ke alamat XXXX.


JP M, 245AH Jika sign flag = 1 (negatif), loncat ke alamat XXXX.

4. Loncat (Jump) Relatif

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.

JR NC,YY Jika dihasilkan cary, loncat ke alamat YY untuk


melanjutkan

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

RST 38H Selesai.


Rangkuman Teori Penunjang
Penghitung Program (Program Counter)

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

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.

Instruksi Percabangan Bersyarat

Instruksi percabangan bersyarat melakukan operasi loncat (jump) bila beberapa


syarat tertentu terpenuhi. Syarat-syarat ini tergantung dari data pada flag register. Fungsi
ini menyebabkan sebuah nikroprosesor mampu menanggapi berbagai syarat yang mutlak
perlu dalam merancang program loop

Loncat (Jump) Relatif

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.

Percabangan dibagi menjadi dua yaitu percabangan tak bersyarat (unconditional


branch) dan percabangan bersyarat (conditional branch). Percabangan tidak bersyarat
adalah suatu percabangan yang dilakukan tanpa melihat isi dari penanda atau flag apapun
pada saat melakukan lompatan ke alamat yang diberikan. Sedangkan Percabangan
bersyarat adalah lompatan yang dilakukan jika sebuah kondisi tertentu dipenuhi.
percabangan tidak bersyarat dapat dilakukan dengan instruksi JMP. Sedangkan
percabangan bersyarat dapat dilakukan dengan mempertimbangkan beberapa kondisi
penanda atau flag dimana isi flag akan berubah nilainya dengan perintah CMP (Compare).
Perulangan bertujuan untuk meminimalisir proses penulisan program dan meminimalisir
pemakaian memori yang terlalu banyak dalam menulis program. Dalam perulangan
terdapat hal-hal yang harus diperhatikan, yaitu: kondisi apa yang menyebabkan
perulangan akan berakhir, berapa banyak perulangan yang diinginkan, register apa yang
berpengaruh pada perulangan dilakukan.

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

;INPUT ANGKA KEDUA


LEA DX,X22
MOV AH,9H
INT 21H

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

MOV AX, HASIL


DIV Y
SUB BX,BX
MOV BL, AH
MOV HASIL, BX
ADD AL,30H
MOV DL,AL
MOV AH,02H
INT 21H

MOV AX, HASIL


DIV Z
SUB BX,BX
MOV BL, AH
MOV HASIL, BX
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

MOV AX, HASIL


DIV Y
SUB BX,BX
MOV BL, AH
MOV HASIL, BX
ADD AL,30H
MOV DL,AL
MOV AH,02H
INT 21H

MOV AX, HASIL


DIV Z
SUB BX,BX
MOV BL, AH
MOV HASIL, BX
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

MOV AX, HASIL


DIV Z
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

;INPUT ANGKA KE-2


LEA DX,X11
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 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:

1. Percabangan pada mikroprosesor dibagi menjadi dua macam percabangan yaitu


percabangan tak bersyarat (unconditional branch) dan percabangan bersyarat
(conditional branch).
2. Operasi percabangan
 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).
3. Perulangan akan meminimalisir proses penulisan program dan meminimalisir
pemakaian memori yang terlalu banyak dalam penulisan program.
4. Perintah LOOP merupakan lompatan yang memperhatikan nilai register CX.
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

 Patmasari, Raditiana. 2014. Mikroprosesor dan Antarmuka. Fakultas Teknik


Elektro. Universitas Telkom.
 Irwanto, Yudhi. 2017. Intruksi percabangan dan loop. Sekolah Tinggi Teknologi
Nuklir.
MODUL V
Prosedur dan Stack pada Mikroprosesor
Andhika Fitra Ramadhan (201811031); Cahyo Utomo (201811043); Mulia Djuang
(201811034); Eki Nur Afifah (201811043)

S1 Teknik Elektro, Institut Teknologi – PLN

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.

2.1.2 Membuat dan memanggil prosesdur


Untuk membuat prosedur bisa menggunakan syntax seperti berikut
Nama_Prosedur PROC
{Program} RET
Nama_Prosedur ENDP
"Nama_Prosedur" adalah nama dari prosedur yang kita definisikan sendiri. Untuk
memudahkan nama untuk prosedur bisa didefinisikan sesuai dengan fungsi dari prosedur
tersebut. Perintah "RET” (Return) digunakan untuk mengembalikan Kontrol program
pada si pemanggil prosedur. Sedangkan untuk memanggil atau menjalankan prosedur
digunakan operasi
CALL, dengan syntax
CALL NamaP
2.1.1.1 Menggunakan Prosedur
Sebagai contoh dari pemakaian prosedur akan kita lihat pada contoh program mencetak
karakter dengan prosedur
Contoh Program 1. Mencetak karakter dengan Prosedur
.MODEL SMALL
.CODE ORG 100h
Proses:
MOV AX, DX
CALL Cetak_Kar ; Panggil Cetak_Kar
MOV BX, AX
MOV AX, 10H
INT 20h
Cetak_Kar PROC NEAR
MOV AH,02h
MOV DL,'S'
INT 21h ; Cetak karakter
RET ; Kembali kepada si pemanggil Cetak_Kar
ENDP ; END Prosedur
END Proses
2.1.1.2 Pemahaman Stack
Bila kita terjemahkan secara bebas, stack artinya adalah 'tumpukan'. Stack adalah bagian
memory yang digunakan untuk menyimpan nilai dari suatu register untuk sementara.
Operasi- operasi pada assembler yang langsung menggunakan stack misalnya pada
perintah PUSH dan POP.
2.1.1.3 Menggunakan Stack
Stack dapat kita bayangkan sebagai sebuah tabung yang panjang. Sedangkan nilai pada
register dapat dibayangkan berbentuk koin yang dapat dimasukkan dalam tabung
tersebut. Operasi stack menggunakan prinsip LIFO(Last In First Out). Artinya data
terakhir yang disimpan akan dikeluarkan terlebih dahulu. Data yang disimpan adalah data
dari register 16 bit (AX, BX, CX dan DX), atau dalam arti besarnya tiap penyimpanan
sebesar 2 bytes. Data yang bisa ditampung pada register stack adalah sebesar 64 Kbytes.

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

2.1.3 Menggunakan Stack dan Prosedur


Perlu dipahami bahwa ketika menggunakan prosedur, maka seringkali dalam isi program
prosedur akan merubah nilai-nilai dari general purpose register. Bagaimana seandainya
kita masih membutuhkan nilai dari general purpose register dimana nilai tersebut ingin
digunakan nantinya? Disanalah dapat digunakan stack untuk menyimpan data general
purpose register tanpa membuat variabel baru untuk menyimpannya. Masih banyak pula
fungsi lain dari pada penggabungan penggunaan stack dan prosedur
Berikut contoh program mencetak kalimat dengan jumlah karakter berdasarkan nilai
register CX
Contoh Program 2. Mencetak kalimat dengan jumlah karakter tertentu
.MODEL SMALL
.CODE ORG 100h
TData:
JMP Proses
Kar DB ?
Klm DB 'AKU SUKA PRAKTIKUM MIKROPROSESOR' ; 32 Karakter
Proses:
MOV CX,24 ; Banyaknya pengulangan
XOR BX,BX ; Addressing Mode
Ulang:
MOV DL,Klm[BX]
MOV Kar,DL
CALL Cetak_Kar ; Panggil Cetak_Kar INC BX
LOOP Ulang
INT 20h
Cetak_Kar PROC
PUSH AX ; Simpan semua register
PUSH DX ; Yang digunakan MOV AH,02h
MOV DL,Kar
INT 21h ; Cetak karakter
POP DX ; Kembalikan semua register
POP AX ; Yang disimpan
RET ; Kembali kepada si pemanggil
Cetak_Kar ENDP ; END Prosedur
END TData
2.2 Teori Penunjang
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.

Prosedur atau subrutin adalah sebuah kelompok instruksi yang membentuk


substack (misalnya operasi penunda waktu) yang sering dikerjakan oleh program utama.
Stack dan subrutin menawarkan keuntungan yang fleksibel di dalam penulisan program.
Sebuah rencana pembuatan software yang besar biasanya dibagi dlaam substack yang
disebut modul. Awal sebuah modul subrutin, isi register program utama disimpan ke
dalam stack dan isi register dikembalikan sebelum kembali ke program utama. Instruksi
operasi pada assembler yang menggunakan stack adalah PUSH dan POP. Dalam proses
stack ini melibatkan register Stack Pointer (SP). Contoh instruksi stack ditunjukkan dalam
Tabel 1. Sedangkan instruksi prosedur ditunjukkan dalam Tabel 2.

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.

Prosedur merupakan alat bantu untuk mempermudah menyalesaikan program.


Pada prosedur terdapat nama prosedur, dimana digunakan pada blok program lainnya
dengan menyebut judul prosedurnya maka prosedur tersebut harus dituliskan pada bagian
deklarasi, sedangkan label digunakan untuk memberi nama pada suatu baris perintah agar
bias mudah menyebutnya dalam penulisan program. Stuck merupakan daerah memori
yang mempunyai satu gerbang untuk input dan output, data ditulis (input) atau dibaca
(output) dari stuck melalui gerbang ini. Data pertama yang diletakkan di stack dikatakan
dibagian bawah stack. Data terakhir yang dimasukkan berada pada bagian atas stuck. Jadi
stack dapat dikatakan sebagai memori yang “last-in first-out” atau masuk terakhir keluar
terlebih dahulu. Pada stuck terdapat PUSH dan POP, PUSH digunakan untuk
memasukkan nilai suatu register pada stuck, sedangkan POP digunakan untuk mengambil
nilai pada stuck yang paling atas dan dimasukkan padda register 16 bit. Pada praktikum
modul lima terdapat 3 kali percobaan, yaitu mencetak karakter dengan prosedur, stack,
dan mencetak kalimat dengan jumlah karakter tertentu.

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

Data: JMP Proses


T_Enter EQU 0dh
kal0 db 13,10,'Masukan Kata atau Kalimat $'
kal1 db 10,13,'$'
kal2 db 10,13,'Hasil Dari Kata atau Kalimat Kebalikannya $'
kal3 db 10,'$'
Buffer db 30,?,30 DUP (?)
Proses:
lea dx,kal0
mov ah,09h
int 21h

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)

Anda mungkin juga menyukai