Anda di halaman 1dari 193

LAPORAN PRAKTEK

MIKROPROSESOR

Nama : Mulia Djuang


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

LABORATORIUM ELEKTRONIKA INDUSTRI


INSTITUT TEKNOLOGI PLN
JAKARTA
2020
MODUL 1
PENGANTAR MIKROPROSESOR DAN BAHASA PEMROGRAMAN
ASSEMBLY (INTERUPSI DAN INPUT/OUTPUT)
Andhika Fitra Ramadhan (201811031) ; Cahyo Utomo (201811032) ; Mulia Djuang
(201811034) ; Eki Nur Afifah (201811043)
S1 Teknik Elektro , Institut Teknologi – PLN
djuang161099@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 pada layar.

1.2 Alat dan Bahan

1. Komputer

2. Aplikasi Emu8086
BAB II

LANDASAN TEORI

2.1 Teori Modul

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

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

3.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
keluarnya data dan koneksi antar blok pada system mikroprosesor.

3.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 bernilai 1 memori akan diakses dari
tertinggi ke terendah.
3.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.
3.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.
3.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.
3.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) − It stands for. 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.
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 : Address Latch Enable

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

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.

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

Mikroprosesor dan Sistem Mikroprosesor

Mikroprosesor dalam perkembangan dunia komputer digital disebut sebagai Central Processing
Unit (CPU). Mikroprosesor diberi sebutan CPU karena fungsinya sebagai unit pemroses pusat. CPU
bekerja sebagai pusat pemroses dan pengendali bekerjanya sistim komputer. Sebagai salah satu jenis
chip dari berbagai jenis chip yang telah diproduksi, mikroprosesor sering juga diberi sebutan
Microprocessor Unit (MPU). CPU atau MPU merupakan komponen utama dari sebuah komputer.Sebuah
mikroprosesor secara internal dikonstruksi dari tiga bagian penting yaitu : Arithmetic Logic Unit
(ALU),Register Unit (RU), dan Control Unit (CU). Mikroprosesor memerlukan unit lain yaitu unit
memori dan unit I/O. Dengan menggabungkan CPU, Memory Unit, dan I/O unit terbangun sebuah sistim
yang disebut dengan sistim mikroprosesor.

Saat sekarang sebuah mikroprosesor yang cukup canggih dapat diperoleh dengan harga yang
murah tidak lain disebabkan oleh perkembangan teknologi pembuatan mikroprosesor yang sudah sangat
maju sehingga kerumitan dalam suatu rangkaian ribuan hingga jutaan komponen dapat dibuat dalam satu
chip yang kira-kira hanya berukurankurang lebih hanya 1 cm2 saja.

Dalam pembuatan mikroprosesor dikenal bermacam-macam teknologi yang diterapkan. Pada


masing-masing teknologi memiliki karakteristik tertentu yang dapat digunakan sesuai dengan kebutuhan.
Yaitu kecepatan proses, harga yang lebih ekonomis atau dalam hal penggunaan daya yang sangat rendah.
Teknologi dalam pembuatan mikroprosesor yang dikenal saat ini adalah:

o Teknologi PMOS (chanel P Metal Oxide Semiconductor) Dasar Mikroprosesor Siswo Wardoyo
Teknik Elektro 27

o Teknologi NMOS (chanel N Metal Oxide Semiconductor)

o Teknologi CMOS (Complementary-NMOS)

o Teknologi bipolar jenis ECL

o Teknologi bipolar jenis Schottky

o Teknologi Galium Arsenide dan lain-lain.


Dari sekian teknologi yang digunakan dalam pembuatan mikroprosesor maka yang paling murah
adalah teknologi PMOS dan yang paling sedikit penggunaan daya adalah jenis teknologi CMOS. Pada
Tabel 1.1 dijelaskan beberapa macam mikroprosesor dan jenis teknologi yang dipergunakannya.

Tabel 1.1 Macam dan teknologi mikroprosesor

Penggunaan Mikroprosesor

Penggunaan sebuah mikroprosesor sebenarnya sangatlah luas karena mampu menggantikan


hampir semua perangkat yang Dasar Mikroprosesor Siswo Wardoyo Teknik Elektro 28 berbasis sistem
digital serta flexibilitas kerjanya yang sangat tinggi. Keterbatasan dalam pemakaiannya pada umumnya
banyak dipengaruhi antara lain:

o Kemampuan untuk memahami kerja mikroprosesor

o Kemampuan daya imajinasi perancang dan pemrograman

o Kompatibilitas perangkat tambahan serta tersedianya sarana pendukungnya.

Sampai saat ini mikroprosesor digunakan secara luas dalam berbagai bidang, baik yang
menyangkut penggunaan langsung dalam sebuah sistem komputer personal sampai komputer main frame
maupun bidang lain dalam sistem elektrik sampai mekanik yang memerlukan pengendalian yang
langsung dapat ditangani oleh sebuah mikroprosesor, bahkan dari alat rumah tangga, alat hiburan, sistem
komunikasi, industri sampaim dengan perlengkapan militer. Adapun kriteria pemilihan mikroprosesor
ditentukan antara lain:

o Persyaratan yang harus dipenuhi oleh sistem

o Jumlah dan jenis komponen yang dipergunakan

o Kecepatan operasi kerja


o Kompatibilatas perangkat penghubung/tambahan

o Ada tidaknya modifikasi yang akan dilakukan terhadap sistem dikemudian hari.

Disamping itu harus diperhatikan pula keuntungan dan kerugian yang ditimbulkan oleh
pemakaian suatu sistem mikroprosesor dalam penggunaanya. Beberapa keuntungan dari penggunaan
sistem mikroprosesor antara lain:

o Sistem mikroprosesor dapat diprogram (programable), sehingga dengan perangkat keras


(hardware) yang relatif Dasar Mikroprosesor Siswo Wardoyo Teknik Elektro 29 sama tetapi dapat
dipergunakan untuk bermacammacam sistem aplikasi yang berbeda tergantung dari program yang
diberikan pada perangkat keras tersebut.

o Sistem menjadi lebih handal baik dalam kecepatan maupun ketepatan

o Operasional menjadi lebih mudah, bahkan dapat diatur untuk kearah otomasi

o Jumlah komponen yang diperlukan semakin sedikit serta daya yang diperlukan semakin kecil
pula. Disamping keuntungan yang menjanjikan, sistem mikroprosesor juga memiliki kerugian-kerugian
sebagai berikut:

o Mikroprosesor banyak jenisnya dan antara satu dengan yang lainnya tidak kompatible karena
dari segi hardware maupun softwarenya berbeda, sehingga pengembangan sistemnya juga tidak sama o
Mikroprosesor mengalami perkembangan yang sangat pesat sehingga suatu sistem mikroprosesor
menjadi cepat usang (out of date). Aplikasi yang memungkinkan menggunakan mikroprosesor dapat
dikelompokkan dalam berbagai bidang, diantaranya adalah Bidang komputer yaitu komputer (mikro
komputer), terminal peripheral controller ( printer, disk, key board). Bidang komunikasi dan jaringan
komputer (switch, router). Bidang kedokteran contohnya yaitu instrumentasi kedokteran. Bidang industri
yaitu PLC (Programable Logic Controller), kendali (control) ban berjalan (conveyor), pengatur
kecepatan motor (motor dc dan ac), servo posisi, kendali proses, robotika. Aplikasi dibidang lain adalah
bidang militer contohnya Peluru Kendali (Rudal), bidang kedirgantaraan contohnya sistem avionik,
bidang alat-alat rumah tangga contohnya adalah mesin Dasar Mikroprosesor Siswo Wardoyo Teknik
Elektro 30 cuci, microwave oven, pemrograman acara (kanal) pada TV, remote control, sound system,
syntesizer. Bidang hiburan dan mainan anak-anak contohnya adalah Game dan Play Station.
2.3 Rangkuman Teori Penunjang

Mikroprosesor dalam perkembangan dunia komputer digital disebut sebagai Central Processing
Unit (CPU). Mikroprosesor diberi sebutan CPU karena fungsinya sebagai unit pemroses pusat. CPU
bekerja sebagai pusat pemroses dan pengendali bekerjanya sistim komputer. Sebagai salah satu jenis
chip dari berbagai jenis chip yang telah diproduksi, mikroprosesor sering juga diberi sebutan
Microprocessor Unit (MPU). CPU atau MPU merupakan komponen utama dari sebuah komputer.Sebuah
mikroprosesor secara internal dikonstruksi dari tiga bagian penting yaitu : Arithmetic Logic Unit
(ALU),Register Unit (RU), dan Control Unit (CU). Mikroprosesor memerlukan unit lain yaitu unit
memori dan unit I/O. Dengan menggabungkan CPU, Memory Unit, dan I/O unit terbangun sebuah sistim
yang disebut dengan sistim mikroprosesor. Saat sekarang sebuah mikroprosesor yang cukup canggih
dapat diperoleh dengan harga yang murah tidak lain disebabkan oleh perkembangan teknologi
pembuatan mikroprosesor yang sudah sangat maju sehingga kerumitan dalam suatu rangkaian ribuan
hingga jutaan komponen dapat dibuat dalam satu chip yang kira-kira hanya berukurankurang lebih hanya
1 cm2 saja.

Penggunaan sebuah mikroprosesor sebenarnya sangatlah luas karena mampu menggantikan


hampir semua perangkat yang Dasar Mikroprosesor Siswo Wardoyo Teknik Elektro 28 berbasis sistem
digital serta flexibilitas kerjanya yang sangat tinggi. Keterbatasan dalam pemakaiannya pada umumnya
banyak dipengaruhi antara lain:

o Kemampuan untuk memahami kerja mikroprosesor

o Kemampuan daya imajinasi perancang dan pemrograman

o Kompatibilitas perangkat tambahan serta tersedianya sarana pendukungnya.

Adapun kriteria pemilihan mikroprosesor ditentukan antara lain:

o Persyaratan yang harus dipenuhi oleh sistem

o Jumlah dan jenis komponen yang dipergunakan

o Kecepatan operasi kerja

o Kompatibilatas perangkat penghubung/tambahan

o Ada tidaknya modifikasi yang akan dilakukan terhadap sistem dikemudian hari.
BAB III
METODE PRAKTIKUM
3.1 Langkah Percobaan

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

4.1.1 Program 1

4.1.2 Program 2

4.1.3 Program 3
4.2 Analisa Pembahasan

Pada praktikum mikroprosesor yang kami lakukan pada hari selasa tanggal 29 september 2020 yang
dilakukan secara online dengan menggunakan aplikasi microsoft teams mempunyai judul yaitu
Pengantar Mikroprosesor dan Bahasa Pemrograman Assembly (Interupsi dan Input/Output), yang
memiliki beberapa tujuan yaitu antara lain: Mampu memahami dan menjelaskan cara kerja
mikroprosesor dan menggunakan bahasa pemrograman Assembly untuk memprogram mikroprosesor,
memahami fungsi dari interupsi pada mikroprosesor, dan memahami cara meminta masukan dari
keyboard dan menampilkan pada layar. Adapun alat dan bahan yang diperlukan dalam praktikum
mikroprosesor kali ini adalah komputer dan aplikasi Emu8086.

Selanjutnya, saya akan menjelaskan pengertian yang ada pada modul 1. Pengertian mikroprosesor
sendiri 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. Lalu pengertian dari
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. Setelah itu, pengertian dari 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. Berikutnya, 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.

Pada program pertama yaitu menjelaskan cara menampilkan atau mencetak huruf ke dalam layar.
Pada program pertama menggunakan .model small yaitu dimana .model berfungsi untuk memberitahu
assembler bahwa data dan code digunakan oleh program dan fungsi small disini adalah jika data dan
code yang digunakan oleh program kurang dari ukuran satu segment atau 64 kb. Selanjutnya adalah
.code yang berfungsi untuk memberitahu bahwa menggunakan segmennya untuk menyimpan program
yang dijalankan. Berikutnya adalah fungsi dari .org 100h yaitu adalah untuk menentukan alamat program
dalam memori. Pada bagian pemrosesan kode, bentuk perintah pertama yang digunakan adalah MOV
AH,02h dimana berfungsi sebagai nilai servis untuk mencetak satu buah karakter pada layar. Lalu,
bentuk perintah selanjutnya adalah MOV,DL ‘A’ dimana merupakan karakter ASCII yang akan dicetak
dan huruf tersebut adalah ‘A’. Perintah selanjutnya adalah INT 21h dimana digunakan untuk mencetak
satu buah karakter pada layar. Setelah itu, perintah yang digunakan adalah INT 20h atau interupsi 20h
yang berfungsi untuk mengakhiri program dan menyerahkan kendali sepenuhnya kepada DOS. Pada
program kedua yaitu menjelaskan cara mencetak karakter beserta atribut nya.

Pada program kedua menggunakan .model small yaitu dimana .model berfungsi untuk memberitahu
assembler bahwa data dan code digunakan oleh program dan fungsi small disini adalah jika data dan
code yang digunakan oleh program kurang dari ukuran satu segment atau 64 kb. Selanjutnya adalah
.code yang berfungsi untuk memberitahu bahwa menggunakan segmennya untuk menyimpan program
yang dijalankan. Berikutnya adalah fungsi dari .org 100h yaitu adalah untuk menentukan alamat program
dalam memori. Pada bagian pemrosesan kode, bentuk perintah pertama yang digunakan adalah MOV
AH,09h dimana berfungsi sebagai nilai servis untuk mencetak satu buah karakter pada layar. Lalu,
bentuk perintah selanjutnya adalah MOV,AL ‘A’ dimana merupakan karakter ASCII yang akan dicetak
dan huruf tersebut adalah ‘A’. Bentuk perintah selanjutnya yaitu MOV BH,00h yang berfungsi sebagai
nomor halaman layar. Berikutnya, bentuk perintah nya adalah MOV BH,93h yang berfungsi untuk
mengubah warna atau atribut dari karakter. Dimana angka 9 yaitu warna light blue berfungsi sebagai
warna background dan angka 3 yaitu warna cyan berfungsi sebagai warna dasar karakter. Bentuk
perintah selanjutnya adalah MOV CX,03h dimana berfungsi sebagai jumlah karakter yang mau
diwarnain. Bentuk perintah berikutnya yaitu INT 10h yang berfungsi untuk mencetak karakter dan
atribut pada posisi kursor. Setelah itu, perintah yang digunakan adalah INT 20h atau interupsi 20h yang
berfungsi untuk mengakhiri program dan menyerahkan kendali sepenuhnya kepada DOS. Pada program
ketiga yaitu meminta memasukkan dan menampilkan masukan.

Pada program ketiga menggunakan .model small yaitu dimana .model berfungsi untuk memberitahu
assembler bahwa data dan code digunakan oleh program dan fungsi small disini adalah jika data dan
code yang digunakan oleh program kurang dari ukuran satu segment atau 64 kb. Berikutnya adalah
fungsi dari .org 100h yaitu adalah untuk menentukan alamat program dalam memori. Selanjutnya adalah
.data yang berfungsi untuk memberitahu assembler bahwa bagian bawah ini adalah data program. Fungsi
DB (Define Bytes) yaitu mendefinisikan isi dari sebuah variabel. Selanjutnya adalah .code yang
berfungsi untuk memberitahu bahwa menggunakan segmennya untuk menyimpan program yang
dijalankan. Perintah berikutnya adalah MOV DX,OFFSET MSG1 dimana OFFSET meminta alamat
variabel. Perintah selanjutnya yang digunakan adalah MOV AH,09h dimana berfungsi sebagai nilai
servis untuk mencetak satu buah karakter pada layar. Perintah INT 21H yaitu untuk mencetak data pada
alamat DX. Perintah MOV BL,AL berfungsi untuk menyimpan isi AL ke BL. Cara ini juga diulang
untuk MSG 2. Perintah INT 20H berfungsi untuk mengakhiri program dan menyerahkan kendali
sepenuhnya kepada DOS.
4.3 Tugas Akhir

.MODEL SMALL

ORG 100H

.DATA

MSG1 DB "Mulia Djuang",10,13, '$'

MSG2 DB "201811034", '$'

.CODE

START:

MOV AH,09H

mov bl,04h

mov cx,12d

MOV Dx,OFFSET MSG1

int 10h

INT 21H

MOV AH,09H

mov bl,04h

mov cx,9d

MOV Dx,OFFSET MSG2

int 10h

INT 21H

INT 20H

END START
BAB V

PENUTUP

5.1 Kesimpulan
1. Cara kerja microprosesor yaitu menggunakan arahan dari memori, lalu dilakukan langkah-langkah
agar memperoleh arahan untuk berhenti.
2. 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.
3. Register AH digunakan untuk memasukkan karakter.
5.2 Saran
Untuk praktikum selanjutnya agar asisten laboratorium lebih meningkatkan cara mengajar materi nya
agar para praktikan dapat lebih memahami materi yang disampaikan dengan baik dan benar serta dapat
mengurangi error/galat pada aplikasi Emu8086.
DAFTAR PUSTAKA

http://robby.c.staff.gunadarma.ac.id/Downloads/files/40497/BUKU-PEGANGAN-KULIAH-DASAR-
MIKROPROSESOR-LENGKAP.pdf

http://staffnew.uny.ac.id/upload/131655274/pendidikan/07+Modul+Bahan+Ajar-01.pdf
MODUL II
OPERASI ARITMATIKA PADA MIKROPROSESOR
Andhika Fitra Ramadhan (201811031) ; Cahyo Utomo (201811032) ; Mulia Djuang
(201811034) ; Eki Nur Afifah (201811043)
S1 Teknik Elektro , Institut Teknologi – PLN
djuang161099@gmail.com
BAB I

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


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.1. 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.2 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.3. 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.4. 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 Pernambahan


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 23
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 flag 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.4
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).5
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.
2.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.6
Contoh :
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
4.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 ?7
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
Operasi artimatika merupakan operasi dasar dalam mikroprosesor. Operasi aritmatika
dipergunakan untuk melakukan kalkulasi berbagai proses yang nantinya akan dilakukan oleh
mikroprosesor, baik berhubungan dengan perhitungan alamat, data, maupun keperluan
lainnya. Operasi aritmatika meliputi : 1. Operasi penjumlahan 2. Operasi pengurangan 3.
Operasi perkalian 4. Operasi pembagian Operasi penjumlahan merupakan operasi untuk
menambahkan 2 atau lebih operan. Operasi ini ada berbagai macam , antara lain : ADD, ADC,
INC. Operasi pengurangan merupakan operasi untuk mengurangkan 2 atau lebih operan.
Sama seperti operasi penjumlahan, maka operasi pengurangan juga ada operasi pengurangan
general (SUB), pengurangan dengan carry (SBB), dan pengurangan dengan 1 (DEC). Operasi
perkalian mengalikan 2 buah operan atau lebih dengan menggunakan instruksi MUL. Untuk
perkalian yang melibatkan floating point number, maka biasanya menggunakan co-processor
hardware yang mendukung fungsi – fungsi floating point seperti FMUL. Sedangkan operasi
pembagian melakukan pembagian antara 2 buah atau lebih operan menggunakan instruksi
DIV. Untuk melihat perubahan pada flag
– flag registernya jika terjadi operasi aritmatika, maka dipergunakan bantuan program
DEBUG seperti pada praktikum sebelumnya. Untuk mendebug sebuah program COM
dengan nama cth.com menggunakan DEBUG, maka di command prompt DOS diketikkan
perintah : DEBUG cth.com Maka secara otomatis DEBUG akan mulai melakukan
eksekusi program COM di register yang bersangkutan. Menggunakan proses tracing
maka dapat dilihat proses operasi aritmatika yang dijalankan akan mengubah register apa
saja di komputer.

Pengertian dari ALU (Arithemtic And Logic Unit)

Arithmetic Logic Unit (ALU) adalah salah satu bagian dalam dari sebuah mikroprosesor
yang berfungsi untuk melakukan operasi hitungan aritmatika dan logika.
Tujuan ALU adalahmelakukan keputusan dari operasi logika sesuai dengan instruksi
program.

Operator logika yang dipakai pada ALU adalah sebagai berikut :


a. sama dengan (=)
b. tidak sama dengan (<>)
c. kurang dari (<)
d. kurang atau sama dengan dari (<=)
e. lebih besar dari (>)
f. lebih besar atau sama dengan dari (>=)

Skema ALU Inputs and Outputs

Ini adalah skema input dan output

Penjelasan dari gambar diatas adalah


› Control Unit, berfungsi untuk mengontrol operasi CPU dan mengontrol komputer secara
keseluruhan.
›Arithmetic And Logic Unit (ALU), berfungsi untuk membentuk fungsi – fungsi
pengolahan data komputer.
›Register, berfungsi sebagai penyimpan internal bagi CPU.

›Flags berfungsi sebagai unit control untuk menentukan status prosesor dan hasil operasi
ALU sebelumnya.

Pengertian Konversi Bilangan

Konversi bilangan adalah suatu proses dimana satu system bilangan dengan basis tertentu
akan dijadikan bilangan dengan basis yang lain.
Sistem Bilangan terdiri dari 4 antara lain :
1. Desimal (Basis 10) adalah Sistem Bilangan yang paling umum digunakan dalam
kehidupan sehari-hari. Sistem bilangan desimal menggunakan basis 10 dan
menggunakan 10 macam simbol bilangan yaitu : 0, 1, 2, 3, 4, 5, 6, 7, 8 dan 9.
2. Biner (Basis 2) adalah Sistem Bilangan yang terdiri dari 2 simbol yaitu 0 dan 1.
3. Oktal (Basis 8) adalah Sistem Bilangan yang terdiri dari 8 Simbol yaitu 0, 1, 2, 3,
4, 5, 6, 7.
4. Hexadesimal (Basis 16), Hexa berarti 6 dan Desimal berarti 10 adalah Sistem
Bilangan yang terdiri dari 16 simbol yaitu 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A(10), B(11),
C(12), D(13), E(14), F(15). Pada Sistem Bilangan Hexadesimal memadukan 2
unsur yaitu angka dan huruf. Huruf A mewakili angka 10, B mewakili angka 11
dan seterusnya sampai Huruf F mewakili angka 15.

Konversi Bilangan
Konversi Bilangan dibagi menjadi 4 yaitu sebagaia berikut.

• Konversi dari bilangan Desimal ke biner.


• Konversi bilangan Desimal ke Oktal.
• Konversi bilangan Desimal ke Hexadesimal.
• Konversi dari bilangan Desimal ke biner
Yaitu dengan cara membagi bilangan desimal dengan dua kemudian diambil sisa
pembagiannya.

Contoh : 25410=… .....................2

254 : 2 = 127 sisa 0


127 : 2 = 63 sisa 1
63 : 2 = 31 sisa 1
31 : 2 = 15 sisa 1
15 : 2 = 7 sisa 1
7 : 2 = 3 sisa 1
3 : 2 = 1 sisa 1
1 : 2 = 0 sisa 1
0 : 2 = 0 sisi 0
Jadi 25410 = 111111102 diurutkan dari sisa pembagian terakhir sebagai MSB (Most
Significant Bit)

• Konversi dari bilangan Biner ke Desimal


contoh : 111111102=… ........10

= ( 1 x 20 ) + ( 1 x 21 ) + ( 1 x 22 ) + ( 1 x 23 ) + ( 1 x 24 ) + ( 1 x 25 ) +( 1 x 26 ) + ( 0 x
27 )
= ( 0 ) + ( 2 ) + ( 4 ) + ( 8 ) + ( 16 ) + ( 32 ) + ( 64 ) +( 128 )
= 25410
Sehingga 111111102= 25410

• Konversi bilangan Desimal ke Oktal


Yaitu dengan cara membagi bilangan desimal dengan 8 kemudian diambil sisa
pembagiannya.
Contoh : 4097 10 = .....8

4097 : 8 = 512 sisa 1


512 : 8 = 64 sisa 0
64 : 8 = 8 sisa 0
8 : 8 = 0 sisa 0
Sehingga 409710 = 00018.
• Konversi bilangan Oktal ke Desimal
0018 = ......10
Caranya:
0018= 0 x 80 + 0 x 81 + 1 x 82
= ( 0 ) + ( 0 ) + ( 64 )
= 6410
Jadi, 00018= 6410

• Konversi bilangan Desimal ke Hexadesimal


Yaitu dengan cara membagi bilangan desimal dengan 16 kemudian diambil sisa
pembagiannya.
Contoh : 388810 = …. 16
Caranya:
3888 : 16 = 243 sisa 0
243 : 16 = 15 sisa 3
15 : 16 = 0 sisa 15 ingat 15 diganti dengan F.
0 : 16 = 0
Sehingga 388810 = F3016

• Konversi bilangan Hexadesimal ke Desimal


B6A16 = …. 10
Caranya:
B6A = (11 x 160) + (6 x 161) + (10 x 162)
= ( 176 ) + ( 96 ) + ( 2560 )
= 283210
Sehingga B6A16 = 283210

Cara proses ALU pada CPU


Proses merupakan instruksi atau perintah yang dikerjakan oleh computer untuk
menjalankan operasi data secara aritmatika dan logika yang dilakukan pada data. Selama
proses data, data diubah bentuk, urutan, dan strukturnya sehingga mendapatkan hasilnya.
Setelah itu hasil tersebut disimpan didalam data.

CPU terdiri dari 3 bagian utama yaitu :


1. ALU ( aritmatica logical unit)
2. CU ( control unit )
3. REGISTER
2.3 Rangkuman Teori Penunjang
Pengertian dari ALU (Arithemtic And Logic Unit)

Arithmetic Logic Unit (ALU) adalah salah satu bagian dalam dari sebuah mikroprosesor
yang berfungsi untuk melakukan operasi hitungan aritmatika dan logika.
Tujuan ALU adalahmelakukan keputusan dari operasi logika sesuai dengan instruksi
program.

Operator logika yang dipakai pada ALU adalah sebagai berikut :


a. sama dengan (=)
b. tidak sama dengan (<>)
c. kurang dari (<)
d. kurang atau sama dengan dari (<=)
e. lebih besar dari (>)
f. lebih besar atau sama dengan dari (>=)

Skema ALU Inputs and Outputs

Ini adalah skema input dan output

Penjelasan dari gambar diatas adalah


› Control Unit, berfungsi untuk mengontrol operasi CPU dan mengontrol komputer secara
keseluruhan.
›Arithmetic And Logic Unit (ALU), berfungsi untuk membentuk fungsi – fungsi
pengolahan data komputer.
›Register, berfungsi sebagai penyimpan internal bagi CPU.
›Flags berfungsi sebagai unit control untuk menentukan status prosesor dan hasil operasi
ALU sebelumnya.

Pengertian Konversi Bilangan


Konversi bilangan adalah suatu proses dimana satu system bilangan dengan basis tertentu
akan dijadikan bilangan dengan basis yang lain.
Sistem Bilangan terdiri dari 4 antara lain :

5. Desimal (Basis 10) adalah Sistem Bilangan yang paling umum digunakan dalam
kehidupan sehari-hari. Sistem bilangan desimal menggunakan basis 10 dan
menggunakan 10 macam simbol bilangan yaitu : 0, 1, 2, 3, 4, 5, 6, 7, 8 dan 9.
6. Biner (Basis 2) adalah Sistem Bilangan yang terdiri dari 2 simbol yaitu 0 dan 1.
7. Oktal (Basis 8) adalah Sistem Bilangan yang terdiri dari 8 Simbol yaitu 0, 1, 2, 3,
4, 5, 6, 7.
8. Hexadesimal (Basis 16), Hexa berarti 6 dan Desimal berarti 10 adalah Sistem
Bilangan yang terdiri dari 16 simbol yaitu 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A(10), B(11),
C(12), D(13), E(14), F(15). Pada Sistem Bilangan Hexadesimal memadukan 2
unsur yaitu angka dan huruf. Huruf A mewakili angka 10, B mewakili angka 11
dan seterusnya sampai Huruf F mewakili angka 15.

Konversi Bilangan
Konversi Bilangan dibagi menjadi 4 yaitu sebagaia berikut.

• Konversi dari bilangan Desimal ke biner.


• Konversi bilangan Desimal ke Oktal.
• Konversi bilangan Desimal ke Hexadesimal.
• Konversi dari bilangan Desimal ke biner
Cara proses ALU pada CPU
Proses merupakan instruksi atau perintah yang dikerjakan oleh
computer untuk menjalankan operasi data secara aritmatika dan
logika yang dilakukan pada data. Selama proses data, data diubah
bentuk, urutan, dan strukturnya sehingga mendapatkan hasilnya.
Setelah itu hasil tersebut disimpan didalam data.

CPU terdiri dari 3 bagian utama yaitu :


4. ALU ( aritmatica logical unit)
5. CU ( control unit )
6. REGISTER
BAB III

METODE PRAKTIKUM

3.1 Langkah Percobaan

1. Nyalakan 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 - 4 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

4.1.1 Program Penjumlahan

4.1.2 Program Pengurangan


4.1.3 Program Perkalian

4.1.4 Program Pembagian


4.2 Analisa Pembahasan

Pada praktikum mikroprosesor yang kami lakukan pada hari selasa tanggal 20
oktober 2020 yang dilakukan secara online dengan menggunakan aplikasi microsoft
teams mempunyai judul yaitu Operasi Aritmatika pada Mikroprosesor, yang
mempunyai beberapa tujuan yaitu antara lain: Mampu menjelasakan jenis - jenis
bilangan: Biner, Oktal, Desimal, Hexadesimal, memahami perintah dan proses operasi
aritmatika pada mikroprosesor, dan dapat melakukan operasi penjumlahan,
pengurangan, perkalian dan pembagian. Adapun alat dan bahan yang diperlukan dalam
praktikum mikroprosesor kali ini adalah komputer dan aplikasi Emu8086.

Selanjutnya, saya akan menjelaskan pengertian yang ada pada modul 2. Pengertian
dari operasi aritmatika sendiri adalah penjumlahan, pengurangan, perkalian dan
pembagian, walaupun operasi-operasi lain yang lebih canggih (seperti persentase, akar
kuadrat, pemangkatan, dan logaritma) kadang juga dimasukkan ke dalam kategori ini.
Perhitungan dalam aritmatika dilakukan menurut suatu urutan operasi yang menentukan
operasi aritmatika yang mana lebih dulu dilakukan. Aritmatika sendiri adalah cabang
matematika yang mempelajari operasi dasar bilangan. Oleh orang awam, kata
"aritmatika" sering dianggap sebagai sinonim dari teori bilangan.

Pada operasi aritmatika ini menggunakan beberapa jenis-jenis bilangan antara lain
yaitu: bilangan biner (2), bilangan oktal (8), bilangan desimal (10), dan bilangan
hexadesimal (16). Konversi bilangan merupakan suatu proses dimana satu sistem
bilangan dengan basis tertentu akan dijadikan bilangan dengan basis yang lain. Bilangan
biner sendiri adalah bilangan yang hanya terdiri dari 2 buah basis yaitu angka 0 dan
angka 1. Karena hanya memiliki basis 2, jadi pengkorversian ke dalam bentuk desimal
yaitu menjumlahkan tiap suku yang tiap suku ke-n (n = 0 dari paling kanan) dikalikan
dengan 2n. Contoh mudah nya yaitu: Bilangan biner 01102 = (0 x 23) + (1 x 22) + (1 x
21) + (0 x 20) = 610. Bilangan oktal sendiri adalah bilangan yang mempunyai 8 buah
basis, berarti angka yang digunakan cuma antara 0 - 7.

Bilangan desimal sendiri adalah bilangan yang mempunyai yang mempunyai 10


buah basis, yaitu angka antara 0 – 9. Bilangan hexadesimal sendiri adalah bilangan yang
mempunyai basis 16 buah. Dengan simbol yang digunakan yaitu:
0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F. Pada modul 2 kali ini mempunyai 4 program yang
akan dipraktikan. Pada program pertama yaitu operasi pertambahan dimana untuk
menambah dalam bahasa assembler digunakan perintah ADD, ADC serta INC. Pada
program pertama menggunakan .model small yaitu dimana .model berfungsi untuk
memberitahu assembler bahwa data dan code digunakan oleh program dan fungsi small
disini adalah jika data dan code yang digunakan oleh program kurang dari ukuran satu
segment atau 64 kb.

Selanjutnya adalah .code yang berfungsi untuk memberitahu bahwa menggunakan


segmennya untuk menyimpan program yang dijalankan bukan data. Berikutnya adalah
fungsi dari .org 100h yaitu adalah untuk menentukan alamat program dalam memori.
Pada bagian pemrosesan kode, bentuk perintah yang awal-awal digunakan adalah MOV
AH, 15h dan MOV AL, 4h yang berfungsi sebagai nilai servis untuk mencetak satu
buah karakter pada layar dan pada program ini ADD AH,AL hasilnya ada AH = 19h.
Karena pada penjumlahannya ada 15 hexa dan 4 desimal, dan sebab nilai 4 desimal
sama dengan 4 hexa maka langsung saja dijumlahkan 15 dan 4 hasilnya adalah 19h.
Lalu, bentuk perintah selanjutnya adalah MOV AX,1234h dan MOV BX,0F221h dan
hasil bentuk perintah yang digunakan untuk mendapatkan hasil adalah ADC AX,BX.
Pada pertambahan ini kita menggunakan ADC karena bila nilai ditambahkan melebihi
16 bit maka nilai lebih nya akan ditaruh pada carry flag. Setelah itu perintah yang
digunakan adalah INC AL dimana digunakan untuk pertambahan dengan 1(Increment)
digunakan khusus untuk pertambahan dengan 1, jadi nilai AL disini ditambah 1.

Pada program kedua yaitu operasi pengurangan dimana untuk pengurangan dapat
digunakan perintah SUB, SBB, dan DEC. Pada program kedua menggunakan .model
small yaitu dimana .model berfungsi untuk memberitahu assembler bahwa data dan
code digunakan oleh program dan fungsi small disini adalah jika data dan code yang
digunakan oleh program kurang dari ukuran satu segment atau 64 kb. Selanjutnya
adalah .code yang berfungsi untuk memberitahu bahwa menggunakan segmennya untuk
menyimpan program yang dijalankan bukan data. Berikutnya adalah fungsi dari .org
100h yaitu adalah untuk menentukan alamat program dalam memori. Pada bagian
pemrosesan kode, bentuk perintah yang awal-awal digunakan adalah MOV AH, 15h
dan MOV AL, 4h yang berfungsi sebagai nilai servis untuk mencetak satu buah karakter
pada layar dan pada program ini SUB AH,AL hasilnya ada AH = 11h.

Karena pada pengurangannya ada 15 hexa dan 4 desimal, dan sebab nilai 4 desimal
sama dengan 4 hexa maka langsung saja dikurangkan 15 dan 4 hasilnya adalah 11h.
Lalu, bentuk perintah selanjutnya adalah MOV AX,1234h dan MOV BX,0F221h dan
hasil bentuk perintah yang digunakan untuk mendapatkan hasil adalah SBB AX,BX.
Pada pengurangan ini kita menggunakan SBB karena nilai nya minus sehingga perlu
meminjam nilai bilangan depannya sampai tidak terhingga kekiri dan terhitungnya
carry, carrynya dipakai sampai bawah. Setelah itu perintah yang digunakan adalah DEC
AL dimana digunakan untuk SBB carrynya dipakai dan nilai pada AL dikurangi dengan
1. Pada program ketiga yaitu operasi perkalian dimana untuk perkalian bisa digunakan
perintah MUL. Pada program ketiga menggunakan .model small yaitu dimana .model
berfungsi untuk memberitahu assembler bahwa data dan code digunakan oleh program
dan fungsi small disini adalah jika data dan code yang digunakan oleh program kurang
dari ukuran satu segment atau 64 kb.

Selanjutnya adalah .code yang berfungsi untuk memberitahu bahwa menggunakan


segmennya untuk menyimpan program yang dijalankan bukan data. Berikutnya adalah
fungsi dari .org 100h yaitu adalah untuk menentukan alamat program dalam memori.
Bentuk perintah selanjutnya adalah JMP PROSES dimana berfungsi untuk melewati
proses-proses dan dibawa langsung kebagian tempat pemrosesan kode yang ingin
ditulis. Bentuk perintah MUL B mendapatkan hasil perkalian dari A dan B dan
mendapatkan hasil 0005AC21H. Untuk hasil yang low yaitu AC21 dimasukkan dan
kesimpan di register AX dan untuk hasil yang high 0005 dimasukkan dan disimpan di
register DX. Selanjutnya bentuk perintah HSLLO DW ? untuk menujukkan hasil yang
low dan HSLLI DW ? untuk menujukkan hasil yang high. Kenapa bisa ada “?” pada
kedua perintah itu, karena “?” disini berfungsi untuk membuat variabel bebas, variabel
bebas sendiri itu adalah hasil perkalian yang belum kita ketahui agar bisa dilewatkan
dulu supaya tidak langsung dieksekusi nilai A dan B nya.

Pada program keempat yaitu operasi pembagian dimana untuk pembagian bisa
digunakan perintah DIV. Pada program keempat menggunakan .model small yaitu
dimana .model berfungsi untuk memberitahu assembler bahwa data dan code digunakan
oleh program dan fungsi small disini adalah jika data dan code yang digunakan oleh
program kurang dari ukuran satu segment atau 64 kb. Selanjutnya adalah .code yang
berfungsi untuk memberitahu bahwa menggunakan segmennya untuk menyimpan
program yang dijalankan bukan data. Berikutnya adalah fungsi dari .org 100h yaitu
adalah untuk menentukan alamat program dalam memori. Pada program keempat ini
terdapat sisa dikarenakan tidak semua pembagian bernilai bulat pasti kadang memiliki
pecahan makanya ada perintah sisa untuk nilai yang tidak bisa dibagi lagi. Dalam
program ini hasil sisa akan disimpan pada register DX dan nilai nya akan disimpan pada
register AX. Hasil ini adalah pembagian dari nilai AX yang dibagi dengan nilai b
menggunakan perintah DIV.
4.3 Tugas Akhir

PENJUMLAHAN
.MODEL SMALL

.STACK 100H

.DATA

DIGIT1 DB 0AH, 0DH, "MASUKAN ANGKA: $"

DIGIT2 DB 0AH, 0DH, "MASUKAN ANGKA PENAMBAH: $"

RESULT DB 0AH, 0DH, "HASIL PENJUMLAHAN : $"

.CODE

MAIN:

MOV AX, DATA

MOV DS, AX

LEA DX, DIGIT1

MOV AH, 09H

INT 21H

MOV AH, 01H

INT 21H

SUB AL, 30H

MOV BH, AL

MOV AH, 01H

INT 21H

SUB AL, 30H

MOV BL, AL ; BH:BL ANGKA PERTAMA

LEA DX, DIGIT2

MOV AH, 09H

INT 21H

MOV AH, 01H

INT 21H
SUB AL, 30H

MOV CH, AL

MOV AH, 01H

INT 21H

SUB AL, 30H

MOV CL, AL ; CH:CL ANGKA KEDUA

ADD BL, CL

MOV AL, BL

MOV AH, 00H

MOV CL, AL ; JAWABAN

MOV BL, AH

ADD BL, BH

ADD BL, CH

MOV AL, BL

MOV AH, 00H

MOV BX, AX

;MOV BH, AH

;MOV BL, AL

MOV DX, OFFSET RESULT

MOV AH, 09H

INT 21H

MOV DL, BH

ADD DL, 30H

MOV AH, 02H

INT 21H

MOV DL, BL
ADD DL, 30H

MOV AH, 02H

INT 21H

MOV DL, CL

ADD DL, 30H

MOV AH, 02H

INT 21H

END

PENGURANGAN
.MODEL SMALL

.STACK 100H

.DATA

DIGIT1 DB 0AH, 0DH, "MASUKAN ANGKA: $"

DIGIT2 DB 0AH, 0DH, "MASUKAN ANGKA PENGURANG: $"

RESULT DB 0AH, 0DH, "HASIL PENGURANGAN : $"

.CODE

MAIN:

MOV AX, DATA

MOV DS, AX

LEA DX, DIGIT1

MOV AH, 09H

INT 21H

MOV AH, 01H

INT 21H

SUB AL, 30H

MOV BH, AL

MOV AH, 01H

INT 21H

SUB AL, 30H

MOV BL, AL ; BH:BL ANGKA PERTAMA


LEA DX, DIGIT2

MOV AH, 09H

INT 21H

MOV AH, 01H

INT 21H

SUB AL, 30H

MOV CH, AL

MOV AH, 01H

INT 21H

SUB AL, 30H

MOV CL, AL ; CH:CL ANGKA KEDUA

SUB BL, CL

MOV AL, BL

MOV AH, 00H

MOV CL, AL ; JAWABAN

MOV BL, AH

ADD BL, BH

SUB BL, CH

MOV AL, BL

MOV AH, 00H

MOV BX, AX

;MOV BH, AH

;MOV BL, AL

MOV DX, OFFSET RESULT

MOV AH, 09H


INT 21H

MOV DL, BH

ADD DL, 30H

MOV AH, 02H

INT 21H

MOV DL, BL

ADD DL, 30H

MOV AH, 02H

INT 21H

MOV DL, CL

ADD DL, 30H

MOV AH, 02H

INT 21H

END

PERKALIAN
.model small

.stack 100h

.data

msg1 db "MASUKAN ANGKA PERTAMA : $"

msg2 db 13,10, "MASUKAN ANGKA KEDUA : $"

perkalian db 13,10,"HASIL PERKALIAN : $"

.code

start:

mov ax, @data

mov ds, ax

mov dx, OFFSET msg1


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 msg2

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 perkalian

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

.stack 100h

.data

msg1 db "MASUKAN ANGKA PERTAMA : $"

msg2 db 13,10, "MASUKAN ANGKA KEDUA : $"

pembagian db 13,10, "HASIL PEMBAGIAN : $"

.code

start:

mov ax, @data

mov ds, ax

mov dx, OFFSET msg1

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 msg2

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 pembagian

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
BAB V
PENUTUP

5.1 Kesimpulan
1. Ada 4 jenis bilangan menurut basisnya yang dapat digunakan dalam pemograman,
yaitu biner (2) dimana hanya ada 1 (ON) dan 0 (OFF), oktal (8) dimana 0 - 7,
desimal (10) 0 – 9, dan hexadesimal (16) dimana 0 - 9 sesudah 9 yaitu A - F.
2. Perintah aritmatika dapat dilaksanakan yaitu seperti penjumlahan (ADD
Tujuan,Asal), pengurangan (SUB Tujuan,Asal), perkalian (MUL Sumber) dan
pembagian (DIV Sumber/Data).
3. Operasi penjumlahan dalam mikroprosesor bisa menggunakan perintah ADD, ADC,
dan INC. Operasi pengurangan dalam mikroprosesor bisa menggunakan perintah
SUB,SBB, dan DEC. Operasi perkalian dalam mikroprosesor bisa menggunakan
perintah MUL. Operasi pembagian dalam mikroprosesor bisa menggunakan perintah
DIV.
5.2 Saran
Untuk praktikum selanjutnya agar asisten laboratorium lebih meningkatkan cara
mengajar materi nya agar para praktikan dapat lebih memahami materi yang
disampaikan dengan baik dan benar serta dapat mengurangi error/galat pada aplikasi
Emu8086.
DAFTAR PUSTAKA

https://yogiearieffadillah.wordpress.com/2013/12/30/pengertian-dan-cara-kerja-
arithmatic-logical-unit-
alu/#:~:text=Arithmatic%20Logical%20Unit%20(ALU)%2C,adalah%20logika%20AN
D%20dan%20OR.
https://id.wikipedia.org/wiki/Unit_aritmatika_dan_logika
http://whiteregion.blogspot.com/2015/05/struktur-alu-register-dan-cpu.html
MODUL III
OPERASI LOGIKA DAN MANIPULASI BIT
Andhika Fitra Ramadhan (201811031) ; Cahyo Utomo (201811032) ; Mulia Djuang
(201811034) ; Eki Nur Afifah (201811043)
S1 Teknik Elektro , Institut Teknologi – PLN
djuang161099@gmail.com
BAB I

PENDAHULUAN

1.1 Tujuan

1. Memahami perintah dan proses opeasi 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.2Gerbang 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.2 Manipulasi Bit

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

1. Gerbang NOT
Operator NOT akan menginver suatu nilai seperti yang terlihat pada Tabel
Kebenaran Operator NOT

Operator NOT didalm 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, untuk lebih jelas dapat
dilihat pada operasi di atas secara per bit.

2. Gerbang AND
Operator AND akan menghasilkan nilai 0 bila salah satu operandnya bernilai 0
dan hanya akan bernilai 1 bila kedua operandnya bernilai 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 di atas akan menghasilkan nilai 1A bagj register AL. Setiap bit yang di
AND dengan 0 pasti menghasilkan bitb0 juga, sedangkan setiap bit yang di
AND dengan 1 akan menghasilkan bit itu sendiri

3. Gerbang OR
Operator logika OR akan menghasilkan nilai 0 bila kedua operandnya bernilai 0
dan akan menghasilkan nilai 1 bila salah satu operandnya bernilai 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 di atas akan menghasilkan nilai 3F bagi register AL. 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 0 untuk dua nilai yang sama nilainya dan satu
untuk berbeda.

Operasi XOR di dalam assembler,digunakan dengan syntax: XOR Tujuan,


Sumber. Hasil XOR akan disimpan pada Tujuan, sebagai contoh, instruksi:

MOV AX, 0A12h

XOR AX, AX

Hasil operasi di atas pasti akan menghasilkan nilai 0 bagi register AX. 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 yng didapatkan
tidak berpengaruh terhadap nilai kedua operand tersebut. Setelah perintah Test
dilaksanakan yang akan terpengaruh adalah Flags, sehingga perintah ini sering
diikuti perintah yang berhubungan dengan 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 di atas komputer akan menuju ke label Proses bila ada satu bit
atau lebih dari AX yang sama dengan 0Fh. Bila diikuti dengan perintah
JCProses, maka komputer akan menuju ke label bila keempat byte pada AL
rendah semuanya.

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 0. Operator SHL digunakan dengan syntax:

SHL Operand1,Operand2

Operand2 harus digunakan register CL bila pergeseran yang dilakukan lebih dari
satu kali.

Instruksi:

MOV AX,3Fh

MOV CL,3

SHL AX,CL : Geser 3 bit ke kiri

Akan menghasilkan nilai F8h pada register AX. Operasi detail:

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 Operan1 ke kanan sebanyak Operand2 secara per
bit dan menambahkan nilai 0 pada bit yang tergeser seperti hal nya pada
operator SHL. Operator SHR digunakam dengan syntax:

SHR Operand1,Operand2. Operand2 harus digunakan register CL


2.3 Rangkuman Teori Penunjang

1. Gerbang NOT
Operator NOT akan menginver suatu nilai seperti yang terlihat pada Tabel Kebenaran
Operator NOT

A Á

0 1

1 0

2. Gerbang AND
Operator AND akan menghasilkan nilai 0 bila salah satu operandnya bernilai 0 dan
hanya akan bernilai 1 bila kedua operandnya bernilai 1.

A B A AND B

0 0 0

0 1 0

1 0 0

1 1 1

3. Gerbang OR
Operator logika OR akan menghasilkan nilai 0 bila kedua operandnya bernilai 0 dan
akan menghasilkan nilai
1 bila salah A B A OR B satu operandnya
bernilai 1.
0 0 0

0 1 1

1 0 1

1 1 1

4. Gerbang XOR
Operator XOR akan menghasilkan 0 untuk dua nilai yang sama nilainya dan satu untuk
berbeda.
A B A XOR B

0 0 0

0 1 1

1 0 1

1 1 0

5. TEST
Perintah Test digunakan untuk mengetahui nilai pada suatu bit, dengan syntax:

TEST Operand1,Operand2

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 0.
Operator SHL digunakan dengan syntax:

SHL Operand1,Operand2

7. 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 0.
Operator SHL digunakan dengan syntax:

SHL Operand1,Operand2
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 kedalam laporan praktikum

5. Kerjakan tugas akhir berdasarkan materi yang diberikan , tambahkan keterangan pada
perintah perintah yang diberikan pada mikrprosesor . kerjakan masing masing.

6. Hasil tugas akhir di screen shoot dan dilampirkan pada laporan praktikum.
BAB IV

HASIL DAN ANALISA

4.1 Hasil Pengujian

4.1.1 Operasi NOT

4.1.2 Operasi AND

4.1.3 Operasi OR
4.1.4 Operasi XOR

4.1.5 Operasi SHL

4.1.6 Operasi SHR


4.2 Analisa Pembahasan

Pada praktikum mikroprosesor yang kami lakukan pada hari selasa tanggal 10
november 2020 yang dilakukan secara online dengan menggunakan aplikasi microsoft
teams mempunyai judul yaitu Operasi Logika dan Manipulasi Bit, yang mempunyai
beberapa tujuan yaitu antara lain, pertama yaitu adalah memahami perintah dan proses
operasi logika pada mikroprosesor. Kedua yaitu adalah dapat melakukan operasi logika
NOT, AND, OR, dan XOR pada mikroprosesor. Ketiga yaitu adalah memahami
perintah dan proses operasi manipulasi bit pada mikroprosesor. Keempat yaitu adalah
dapat melakukan manipulasi bit geser kiri dan geser kanan. Adapun alat dan bahan yang
diperlukan dalam praktikum mikroprosesor kali ini adalah komputer dan aplikasi
Emu8086.

Selanjutnya, saya akan menjelaskan pengertian yang ada pada modul 3. Operasi
logika sendiri adalah suatu kombinasi variable biner seperti misalnya pada masukan dan
keluaran dari suatu rangkaian digital yang dapat ditunjukkan bahwa di dalam aljabar
Boolean. Operator logika juga merupakan operator yang digunakan di dalam operasi
yang hanya dapat menghasilkan nilai benar (true) dan salah (false). Operasi logika yang
akan bahas kali ini dalam modul 3 yaitu operasi logika NOT, AND, OR, dan XOR.
Operasi logika NOT sendiri adalah membalik sebuah variable biner, misalnya jika
masukannya adalah 0 maka keluarannya adalah 1 begitupun sebaliknya jika
masukannya adalah 1 maka keluarnnya adalah 0. Dalam bahasa C, nilai benar akan
direpresentasikan dengan menggunakan nilai selain nol. Namun, pada kenyataannya
para programmer C umumnya menggunakan nilai 1 untuk merepresentasikan nilai
benar. Adapun nilai salah akan direpresentasikan dengan nilai 0.

Pada program pertama yaitu operasi logika NOT menggunakan perintahnya move
al,3fh yaitu berfungsi jika kita memasukkan nilai 3f ke dalam al dan 3fh diubah ke biner
maka hasil yang didapatkan adalah 0011 1111. Pada perintah selanjutnya yaitu jika kita
memasukkan perintah not al maka hasil yang akan didapatkan menjadi 1100 0000 dan
dimana hasilnya itu kebalikan dari hasil sebelumnya. Berikutnya, jika kita melakukan
single step maka hasil nilai 3f akan masuk ke al setelah itu nilainya berubah menjadi
C0.
Operasi logika AND sendiri adalah menghubungkan paling sedikit dua masukan
variable dan dapat lebih variabel masukannnya mulai x0, x1 sampai xn dan satu variabel
keluaran y. Variabel keluaran akan berlogika 1 hanya jika semua masukannya x0, x1
sampai xn dalam keadaan 1. Operasi logika AND juga memiliki suatu karakteristik
yaitu dimana jika inputnya yang masuk salah satu adalah bernilai 0, maka hasil
outputnya pasti akan bernilai 0 dan jika kedua inputnya diberi nilai 1, maka hasil
outputnya akan bernilai 1 pula. Pada program kedua yaitu operasi logika AND
menggunakan perintah move al,3fh yaitu berfungsi jika kita memasukkan nilai 3f ke
dalam al dan 3fh diubah ke biner maka hasil yang didapatkan adalah 0011 1111. Pada
perintah selanjutnya yaitu Mov bl,1a yang berarti memasukkan nilai 1a ke bl dimana
jika dalam bentuk heksadesimal itu 5b sedangkan nilai binernya adalah 0101 1011.
Berikutnya, kita menggunakan perintah AND al,bl yang berarti menambahkan al dan bl
dimana jika salah satu operand bernilai nol maka hasilnya 0 maka bentuk heksadesimal
nya itu 1b dan dalam desimal adalah 0001 1011.

Operasi logika OR sendiri adalah menghubungkan paling sedikit dua masukan


variable dan dapat lebih variabel masukannnya mulai x0, x1 sampai xn dan satu variabel
keluaran y. Variabel keluaran akan berlogika 0 hanya jika semua masukannya x0, x1
sampai xn dalam keadaan 0. Operasi logika OR juga memiliki suatu karakteristik yaitu
dimana jika nilainya di dalam tabel kebenaran kedua nya adalah nol maka hasilnya 0
pula dan apabila ada salah satu yang bernilai 1 maka nilainya adalah 1. Pada program
ketiga yaitu operasi logika OR menggunakan perintah move al,3fh yaitu berfungsi jika
kita memasukkan nilai 3f ke dalam al dan 3fh diubah ke biner maka hasil yang
didapatkan adalah 0011 1111. Pada perintah selanjutnya yaitu Mov bl,1a yang berarti
memasukkan nilai 1a ke bl dimana jika dalam bentuk heksadesimal itu 5b sedangkan
nilai binernya adalah 0101 1011. Berikutnya, kita menggunakan perintah OR al,bl
dengan nilai dalam heksadesimal 7f dalam biner 0111 1111.

Operasi logika XOR sendiri merupakan singkatan dari Exclusive - OR adalah


menggabungkan gerbang logika standar bersama untuk membentuk fungsi gerbang
yang lebih kompleks yang bisa digunakan secara luas dalam membangun rangkaian
logika aritmatika, rangkaian deteksi kesalahan, dan komparator logika komputasi.
Operasi logika XOR juga memiliki suatu karakteristik yaitu dimana jika nilai kedua
nilai inputnya memiliki nilai yang sama misalnya 1, maka hasil outputnya akan bernilai
0 dan jika kedua nilai inputnya berbeda, maka hasil outputnya akan bernilai 1. Gerbang
dua input XOR (Exclusive - OR) pada dasarnya adalah penambah dua modulo, karena
memberikan jumlah dua bilangan biner dan sebagai hasilnya lebih kompleks dalam
desain daripada jenis dasar gerbang logika lainnya.

Operator SHL sendiri merupakan singkatan dari Shift Left (<<) adalah sebuah
operator yang digunakan untuk melakukan penggeseran bit ke arah kiri sebanyak nilai
yang didefinisikan. Operator SHL (<<) akan mengalikan suatu nilai dengan 2. Pada
program kelima yaitu operator SHL menggunakan perintah MOV CL,3 yang berarti
menggeser 3 bit ke kiri. Nilai dari 3fh itu adalah 0000 0000 0011 1111 dan ketika
digeser ke kiri 1x maka akan menjadi 0000 0000 0111 1110 dengan bentuk
heksadesimal adalah 007eh. Selanjutnya, saat digeser ke kiri 2x maka akan menjadi
0000 0000 1111 1100 dengan bentuk heksadesimal adalah 00fch. Berikutnya, saat
digeser ke kiri 3x maka akan menjadi 0000 0001 1111 1000 dengan bentuk
heksadesimal adalah 01f8h.

Operator SHR sendiri merupakan singkatan dari Shift Right (>>) adalah sebuah
operator yang digunakan untuk melakukan penggeseran bit ke arah kanan sebanyak
nilai yang didefinisikan. operator >> akan membagi suatu nilai dengan 2. Pada program
keenam yaitu operator SHR menggunakan perintah MOV CL,3 yang berarti menggeser
3 bit ke kanan. Nilai 3fh itu adalah 0000 0000 0011 1111 dan ketika digeser ke kanan
1x maka akan menjadi 0000 0000 0001 1111 dengan bentuk heksadesimal adalah 1fh.
Selanjutnya, saat digeser ke kanan 2x maka akan menjadi 0000 0000 0000 1111 dengan
betuk heksadesimal adalah 0fh. Berikutnya, saat digeser ke kanan 3x maka akan
menjadi 0000 0000 0000 0111 dengan bentuk heksadesimal adalah 07h.
4.3 Tugas Akhir

.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

1. Dapat memahami perintah dan proses operasi logika pada mikroprosesor yang terdiri dari
gerbang NOT, gerbang AND, gerbang OR dan gerbang XOR. Dapat memahami
perinta/instruksi seperti apa yang diberikan pada masing-masing gerbang logika dan tahu
bagaimana proses dari input hingga outputnya.

2. Dapat melakukan operasi logika. Paham bagaimana cara mengoperasikan logika NOT, logika
AND, logika OR dan logika XOR dengan benar.

3. Dapat memahami perintah dan proses operasi manipulasi bit pada mikroprosesor yang terdiri
dari SHL (Shift Left) dan SHR (Shift Right). Dapat memberikan perintah/instruksi untuk
melakukan SHL dan atau SHR serta tahu bagaimana cara mendapat output tersebut.

4. Dapat melakukan manipulasi bit geser kiri dan geser kanan. Paham bagaimana cara
melakukan manipulasi bit dari input sampai output sesuai dengen perintah/instruksi.
5.2 Saran

Untuk praktikum selanjutnya agar asisten laboratorium lebih meningkatkan cara


mengajar materi nya agar para praktikan dapat lebih memahami materi yang
disampaikan dengan baik dan benar serta dapat mengurangi error/galat pada aplikasi
Emu8086.
DAFTAR PUSTAKA

https://bundet.com/d/1113-manipulasi-bit-dengan-gerbang-logika
MODUL IV
PERCABANGAN DAN PERULANGAN PADA MIKROPROSESOR
Andhika Fitra Ramadhan (201811031) ; Cahyo Utomo (201811032) ; Mulia Djuang
(201811034) ; Eki Nur Afifah (201811043)
S1 Teknik Elektro , Institut Teknologi – PLN
djuang161099@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 Emu8086
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 register yang berbedabeda. Label pada bahasa pemrograman Assembly
merupakan sebuah penanda pada source code dimana label ini akan mencatat alamat
offset register saat label tersebut ditulis. Alamat offset register ini nantinya bisa diambil
nilainya dengan memanggil label tersebut. Meminta program mengeksekusi untuk
kembali ke alamat yang terisi pada label akan mengembalikan instruction pointer untuk
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 Pointer ke 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/flag apapun 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/ flag dimana isi flag akan
berubah nilainya dengan perintah CMP (Compare).

• JMP (Unconditional branch)

Perintah JMP ini digunakan untuk melompat menuju alamat label yang
ditunjukkan oleh perintah JMP. Adapun syntax-nya adalah:

JMP Label_Tujuan
Tujuannya dapat berupa label seperti yang digunakan pada syntax diatas.
Perintah JMP yang digunakan pada materi-materi sebelumnya biasanya dimaksudkan
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.

3.2.2. 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, bila operand1 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 tidak
Equal> bertanda
JLE <Jump If Less or Lompat, jika Operand1 <= Operand2 untuk bilangan
Equal> bertanda
JAE <Jump If Above or Lompat, jika Operand1 >= Operand2 untuk bilangan tidak
Equal> 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
KalLebih DB 'Bilangan A lebih kecil dari bilangan B $'
KalSama DB 'Bilangan A sama dengan bilangan B
$' KalKurang DB '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:
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 banyak dalam 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/
looping yang boleh terjadi. Setiap ditemui perintah LOOP, maka register CX akan
dikurangi dengan 1 terlebih dahulu, kemudian akan dilihat apakah CX sudah mencapai
0. Proses looping akan 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

Bahasa Assembly merupakan bahasa pemrograman yang tidak akan hilang oleh
tren zaman, bahasa ini akan tetap dipakai dan tidak akan tergantikan oleh bahasa
pemrograman lainnya. Bahasa assembly dapat digunakan dalam berbagai bidang seperti
hacking, keamanan, analisis malware, optimasi kecepatan algoritma dan lainnya.
Dengan mempelajari bahasa assembly dapat dipelajari cara kerja perangkat keras
komputer sehingga mempelajari bahasa ini penting. Buku ini membahas bahasa
pemrograman assembly dengan metode yang lebih memudahkan pembaca melalui
penggunaan flowchart. Dengan menggunakan flowchart pada setiap programnya
diharapkan dapat membuat pembaca lebih mudah mengerti cara kerja assembly dan
algoritma programnya.

a. Perintah Percabangan Bersyarat Dan Tidak Bersyarat

Pada sebuah loncatan tidak bersyarat, pelaksanaan program pada setiap saat
dimulai pada alamat tujuan loncat yang telah ditentukan pada perintah percabangan.
Pada sebuah loncatan bersyarat, pelaksanaan program pada alamat tujuan loncat yang
telah ditentukan dilaksanakan bila syarat loncat terpenuhi, bila syarat loncat tidak
terpenuhi maka pelaksanaan program dimulai pada perintah berikutnya dibawah
perintah percabangan. Berikut merupakan contoh pelaksanaan instruksi loncat dengan
syarat terpenuhi dan belum terpenuhi. Perintah Perintah Perinrah Perinrah Perinrah
Perinrah Perinrah Perinrah Instruksi loncat ke address 1 jika syarat terpenuhi Instruksi
loncat ke address 1 jika syarat terpenuhi Perinrah Perintah Pelaksanaan loncat dengan
syarat terpenuhi Pelaksanaan loncat syarat belum terpenuhi Pada perintah percabangan
bersyarat, syarat loncat yang diaplikasikan pada operasi instruksi loncat digunakan
untuk men-set flag. Berdasarkan kondisi atau status register flag inilah yang digunakan
untuk menentukan apakah syarat sudah terpenuhi atau syarat belum terpenuhi, jika
terpenuhi maka pelaksanaan 151 program dipindahkan ke alamat yang ditunjuk oleh PC
dan jika belum terpenuhi maka program akan dijalankan terus.

b. Penggunaan perintah percabangan bersyarat


Dalam penggunaan perintah percabangan bersyarat ini, ada 2 hal yang harus
jelas yaitu : 1. Bagaimana syarat loncat dapat diberikan pada loncatan bersyarat. 2. jika
ternyata ada maka diberikan alamat tujuan loncat pengalamatan.

Program loop merupakan suatu program yang berisi pengulangan langkah-


langkah yang diperlukan dalam menyelesaikan suatu tugas sebanyak mungkin sampai
tugas tersebut slesai dilaksanakan. Program loop dasar harus emncakup hal hal seperti
berikut: Suatu preset loop counter dengan jumlah loop yang harus dilakukan regester
dalam CPU maupun memory dapat digunakan sebagai penghitung loop Penghitung loop
dikurangi dengan 1 setiap kali satu putaran loop selesai dilakukan. Setiap selesai 1
putaran , nilai penghitung loop harus diperiksa. Jika penghitung loop tidak sama dengan
0, loop diulangi sampai penghitung loop sama dengan 0. Program Loop dengan jumlah
loop lebih kecil dari 256.

jika jumlah loop lebih kecil dari 256, register B dianggap sebagai penghitung
loop. Pada khir loop, instruksi DJNZ dapat dipakai untuk mengurangi register B dengan
1. Jika hasilnya tidak sama dengan 0, loncat ke lokasi yang ditunjuk dengan
menggunakan metode jump relative untuk melanjutkan pelaksanaan progarm.

Pada proses perulangan dengan perintah LOOP, registex CX memegang suatu


peranan khusus dimana register ini dijadikan sebagai counter/penghitung terhadap
banyaknya looping yang boleh terjadi. Setiap ditemui perintah LOOP, maka register CX
akan dikurangi dengan 1 terlebih dahulu, kemudian akan dilihat apakah CX sudah
mencapai 0. Proses looping akan selesai bila nilai pada register CX mencapai nol.
Seperti pada contoh diatas, maka interupsi 10h 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 sehinnga proses looping
tidak bisa berhenti.

Mencetak Beberapa Karakter

Berikut adalah kode untuk mencetak beberapa karakter dengan Loop

.MODEL SMALL
.CODE

ORG 100h

Proses :

MOV AH,02h

MOV DL,'A'

MOV CX,10

Ulang :

INT 21h

ADD DL,1

LOOP Ulang

INT 20h

END Proses

Bila program tersebut dijalankan, maka akan menghasilkan sebagai berikut.


Selanjutnya , kita akan mencetak karakter A-Z dengan perulangan disertai dengan
warna dan background .berikut adalah kode program nya

.MODEL SMALL

.CODE

ORG 100h

proses :

MOV AH,9h

MOV BL,96h

MOV CX,26

ulang :

INT 10h
ADD BL,1

LOOP ulang

MOV AH,2h

MOV DL,'A'

MOV CX,26

dua :

INT 21h

ADD DL,1

LOOP dua

INT 20h

END proses

Simpan dengan ekstensi *.ASM , compile dan tlink, kemudian jalankan file
tersebut, jika tidak terjadi kesalahan.
2.3 Rangkuman Teori Penunjang

Bahasa Assembly merupakan bahasa pemrograman yang tidak akan hilang oleh
tren zaman, bahasa ini akan tetap dipakai dan tidak akan tergantikan oleh bahasa
pemrograman lainnya. Bahasa assembly dapat digunakan dalam berbagai bidang seperti
hacking, keamanan, analisis malware, optimasi kecepatan algoritma dan lainnya.
Dengan mempelajari bahasa assembly dapat dipelajari cara kerja perangkat keras
komputer sehingga mempelajari bahasa ini penting. Buku ini membahas bahasa
pemrograman assembly dengan metode yang lebih memudahkan pembaca melalui
penggunaan flowchart . Dengan menggunakan flowchart pada setiap programnya
diharapkan dapat membuat pembaca lebih mudah mengerti cara kerja assembly dan
algoritma programnya.

a. Perintah Percabangan Bersyarat Dan Tidak Bersyarat

Pada sebuah loncatan tidak bersyarat, pelaksanaan program pada setiap saat dimulai
pada alamat tujuan loncat yang telah ditentukan pada perintah percabangan. Pada
sebuah loncatan bersyarat, pelaksanaan program pada alamat tujuan loncat yang telah
ditentukan dilaksanakan bila syarat loncat terpenuhi, bila syarat loncat tidak terpenuhi
maka pelaksanaan program dimulai pada perintah berikutnya dibawah perintah
percabangan.

b. Penggunaan perintah percabangan bersyarat

Dalam penggunaan perintah percabangan bersyarat ini, ada 2 hal yang harus
jelas yaitu : 1. Bagaimana syarat loncat dapat diberikan pada loncatan bersyarat. 2. jika
ternyata ada maka diberikan alamat tujuan loncat pengalamatan. Program loop
merupakan suatu program yang berisi pengulangan langkah-langkah yang diperlukan
dalam menyelesaikan suatu tugas sebanyak mungkin sampai tugas tersebut slesai
dilaksanakan.
BAB III
METODE PRAKTIKUM
3.1 Langkah Percobaan
1. Nyalakan komputer, kemudian jalankan Aplikasi emu8086

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 - 2 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 di-screen shot dan dilampirkan pada laporan praktikum.
BAB IV
HASIL DAN ANALISA

4.1 Hasil Pengujian

4.1.1 Program Percabangan

4.1.2 Program Perulangan


4.2 Analisa Pembahasan

Pada praktikum mikroprosesor yang kami lakukan pada hari selasa tanggal 1
desember 2020 yang dilakukan secara online dengan menggunakan aplikasi microsoft
teams mempunyai judul yaitu Percabangan dan Perulangan pada Mikroprosesor, yang
mempunyai beberapa tujuan yaitu antara lain, pertama yaitu adalah memahami perintah
dan proses operasi percabangan pada mikroprosesor. Kedua yaitu adalah dapat
melakukan operasi percabangan JMP, JE, JNE, JA, JB. Ketiga yaitu adalah memahami
perintah dan proses operasi perulangan pada mikroprosesor. Keempat yaitu adalah dapat
melakukan operasi perulangan LOOP. Adapun alat dan bahan yang diperlukan dalam
praktikum mikroprosesor kali ini adalah komputer dan aplikasi Emu8086.

Selanjutnya, saya akan menjelaskan pengertian yang ada pada modul 4. Percabangan
pada mikroprosesor menjadi bagian yang sangat penting karena dapat menyederhanakan
program dari mikroprosesor dan menambah fleksibilitas atau kegunaan (usability) dari
mikroprosesor. Percabangan pada mikroprosesor dilakukan dengan cara merubah
alamat dari Index Pointer (IP) ke alamat yang diinginkan. Hal ini menyebabkan
percabangan pada mikroprosesor disebut juga sebagai lompatan. Percabangan dalam
mikroprosesor dibagi menjadi dua jenis yaitu percabangan bersyarat (conditional
branch) dan percabangan tak bersyarat (unconditional branch). Percabangan tak
bersyarat (unconditional branch) sendiri adalah percabangan yang dilakukan tanpa
melihat isi dari penanda/flag apapun pada saat melakukan lompatan ke alamat yang
diberikan. Sedangkan Percabangan bersyarat (conditional branch) sendiri adalah
percabangan yang dilakukan jika sebuah kondisi tertentu dipenuhi.

Percabangan bersyarat dapat dilakukan dengan mempertimbangkan beberapa kondisi


penanda/ flag dimana isi flag akan berubah nilainya dengan perintah CMP (Compare),
sedangkan percabangan tak bersyarat pada aplikasi Emu 8086 dapat dilakukan dengan
menggunakan instruksi JMP. Selanjutnya, untuk perintah JMP ini digunakan untuk
melompat menuju alamat label yang ditunjukkan oleh perintah JMP. Pada modul
syntax-nya yaitu JMP Label_Tujuan. Tujuan nya bisa berupa label seperti yang
digunakan pada syntax tadi. Perintah JMP ini dikategorikan sebagai percabangan tak
bersyarat, karena perintah ini tidak menyeleksi keadaan apapun untuk melakukan suatu
lompatan. Setiap ditemui perintah ini maka lompatan pasti akan dilakukan. Lalu, untuk
perintah CMP (Compare), digunakan untuk membandingkan 2 buah operand, pada
modul syntax-nya yaitu 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.
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 yaitu JA, JG, JE, JNE, JB, JL, JBE, JLE, JAE dan JGE.
Pada praktikum ini terdapat dua operasi bilangan yang berbeda, yaitu operasi bilangan
bertanda dan bilangan tidak bertanda. Bilangan bertanda adalah bilangan yang akan
membedakan bilangan negatif dan positif (Contohnya 16 dan -16).

Sedangkan bilangan tidak bertanda adalah bilangan yang tidak akan membedakan
positif dan negatif, jadi angka -2 untuk operasi bilangan bertanda akan dianggap FFh
pada bilangan tidak bertanda. Perulangan pada mikroprosesor sangat diperlukan dan
menjadi bagian penting karena dengan perulangan akan meminimalisir proses penulisan
program dan meminimalisir pemakaian memori yang terlalu banyak dalam 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. Perulangan dengan LOOP, Perintah
LOOP sendiri digunakan untuk melakukan suatu proses yang berulang-ulang. Pada
modul syntax-nya dari perintah ini adalah yaitu LOOP Label_Tujuan. Saat melakukan
perulangan yang harus diingat adalah antara lain: Kapan / kondisi apa yang
menyebabkan perulangan itu akan berakhir, berapa banyak perulangan yang diinginkan
dan register apa saja yang terpengaruh pada saat perulangan dilakukan.

Pada praktikum kali ini terdapat 2 macam program yang dilakukan. Program pertama
adalah perintah percabangan. Pada program pertama menggunakan .model small yaitu
dimana .model berfungsi untuk memberitahu assembler bahwa data dan code digunakan
oleh program dan fungsi small disini adalah jika data dan code yang digunakan oleh
program kurang dari ukuran satu segment atau 64 kb. Selanjutnya adalah .code yang
berfungsi untuk memberitahu bahwa menggunakan segmennya untuk menyimpan
program yang dijalankan. Berikutnya adalah fungsi dari .org 100h yaitu adalah untuk
menentukan alamat program dalam memori. Dalam programnya terdapat BilA DB 67
dan BilB DB 66, yang dimana artinya BilA ini merupakan offset yang
diberi/mempunyai nilai 67 dan BilB ini merupakan offset yang diberi/mempunyai nilai
66. Selanjutnya KalLebih DB, yaitu dimana artinya adalah offset yang isinya “Bilangan
A lebih besar dari bilangan B”.

Kemudian KalSama DB, yaitu dimana artinya adalah offset yang isinya “Bilangan A
sama dengan bilangan B”. Berikutnya KalKurang DB, yaitu dimana artinya adalah
offset yang isinya “Bilangan A lebih kecil dari bilangan B”. Disini juga terdapat adanya
coding JMP proses yang dimana kata ini akan langsung lompat ke prosesnya. Pada
coding ini terdapat adanya kata DB yaitu define byte yang artinya berfungsi agar
karakternya terbaca atau data yang dimasukan ini bisa terbaca disini. DB disini
mendefiniskan variable yang ditampilkan. Pada bagian pemrosesan kode, bentuk
perintah yang awal-awal digunakan adalah BilA yang dimasukkan ke register AL,
kemudian perintah CMP AL,BilB, yang nantinya BilA yang nilainya sudah ada di
register AL dibandingkan dengan BilB. Berikutnya, ada JB AKecil, yang berarti Jump
If Below (jika BilA < BilB) dan loncat ke label AKecil.

Selanjutnya ada JE Sama, yang berarti Jump If Equal (jika BilA = BilB) dan loncat
ke label Sama. Setelah itu ada JA ABesar, ini berarti Jump If Above (jika BilA > BilB)
dan loncat ke label ABesar. Nantinya apabila BilA > BilB maka hasilnya akan
menjalankan perintah JA ABesar, seandainya BilA = BilB maka hasilnya akan
menjalankan perintah JE Sama dan bila BilA < BilB maka hasilnya akan menjalankan
perintah JB AKecil. Dalam program ini BilA lebih besar dari BilB maka akan
menjalankan perintah JA ABesar. Berikutnya akan jump ke label ABesar, yaitu ada
“LEA DX,KalKurang”, yang nantinya akan mengambil offset KalKurang setelah itu
akan dicetak sesuai perintah “MOV AH,09” dan “INT 21h”. Program ini bertujuan
untuk melihat perbandingan dari bilangan saja atau penggunaan percabangan ini
digunakan untuk membandingkan antara dua angka saja. Disini terdapat adanya LEA
yang mana fungsi LEA ini sama seperti MOV,OFF SET perintahnya yang dimana
memanggil karakter yang keterangan. LEA supaya ringkas atau LEA ini memanggil isi
dari memori nya.
Program kedua adalah program perulangan. Pada program kedua menggunakan
.model small yaitu dimana .model berfungsi untuk memberitahu assembler bahwa data
dan code digunakan oleh program dan fungsi small disini adalah jika data dan code
yang digunakan oleh program kurang dari ukuran satu segment atau 64 kb. Selanjutnya
adalah .code yang berfungsi untuk memberitahu bahwa menggunakan segmennya untuk
menyimpan program yang dijalankan. Berikutnya adalah fungsi dari .org 100h yaitu
adalah untuk menentukan alamat program dalam memori. Dalam codingan perulangan
ini terdapat adanya MOV CX,3. Disini menandakan 3 kali perulangan sama seperti
modul yang sebelum-sebelumnya yaitu register counter yang dimana berapa kali data
yang ingin ditampilkan atau mengatur bilangan. Tetapi pada modul ini berapa kali
melakukan perulangannya. Program pengulangannya itu adalah “ MOV AH 01,INT 21
dan pada codingan LOOP Ulang ; Lompat ke label 'Ulang' ”. INT 21H disini berfungsi
untuk menampilkan datanya dan LOOP ini untuk mengulang. Perintah MOV CX 3 itu
digunakan untuk pengulangan data yang diinginkan yaitu 3 kali perulangan. Setelah itu
pada akhir codingan INT 21 H yang dimana berfungsi untuk mengetahui programnya
itu selesai / berakhir karena perulangannya hanya sekali saja.
4.3 Tugas Akhir

.MODEL SMALL

ORG 100H

JMP PROSES

XX DB 10,10,13,' $'

X0 DB 10,13, 'PILIHAN MENU $'

X1 DB 10,13, '1. PENJUMLAHAN $'

X2 DB 10,13, '2. PENGURANGAN $'

X3 DB 10,13, '3. PERKALIAN $'

X4 DB 10,13, '4. PEMBAGIAN $'

X5 DB 10,13, '5. NOT$'

X6 DB 10,13, '6. AND$'

X7 DB 10,13, '7. OR$'

X8 DB 10,13, '8. XOR$'

X9 DB 10,13, '9. EXIT$'

X10 DB 10,13, 'MASUKKAN ANGKA PERTAMA (0-15) : $'

X11 DB 10,13, 'MASUKKAN ANGKA KEDUA (0-15) : $'

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,'MASUKKAN ANDA : $'

X21 DB 10,13, 'MASUKKAN ANGKA PERTAMA (000-999) : $'

X22 DB 10,13, 'MASUKKAN ANGKA PERTAMA (000-999) : $'

X23 DB 10,13, 'HASILNYA : $'

X24 DB 10,13, 'MASUKKAN ANGKA PERTAMA (00-99) : $'

X25 DB 10,13, 'MASUKKAN ANGKA PERTAMA (00-99) : $'

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

1. Pada operasi percabangan pada mikroprosesor dimodul ini menggunakan perintah


JMP dan CMP. Dimana Register JMP digunakan untuk melompat ke perintah yang
ditentukan oleh register JMP. Sedangkan CMP digunakan untuk membuat
perbandingan antara pernyataan satu dan pernyataan lainnya.
2. Dapat melakukan operasi percabangan JMP, JE, JNE, JA, JB. Masing-masing
memiliki perintah yang sesuai. Dimana JE merupakan JUMP EQUAL atau ketika
kedua nilai sama. JB (JUMP BELOW) ketika nilai A lebih kecil. JA (JUMP
ABOVE) ketika nilai A lebih besar daripada B. JMP operasi agar lompatan menuju
alamat table yang dituju.
3. Memahami perintah dan proses operasi perulangan pada mikroprosesor . perulangan
yang kita pelajari yaitu LOOP. Dimana Register LOOP yaitu suatu proses yang
digunakan untuk berulang ulang agar meminimalisir proses penulisan.
4. Dapat melakukan operasi perulangan LOOP. Dengan syntax LOOP Label_Tujuan
kita dapat mengetahui hasil dan program pada LOOP ini sesuai perintah.
5.2 Saran

Untuk praktikum selanjutnya agar asisten laboratorium lebih meningkatkan cara


mengajar materi nya agar para praktikan dapat lebih memahami materi yang
disampaikan dengan baik dan benar serta dapat mengurangi error/galat pada aplikasi
Emu8086.
DAFTAR PUSTAKA
http://webriky.blogspot.com/2014/09/pengulangan-loop-pada-bahasa-
assembly.html?m=1

https://text-id.123dok.com/document/ky655gr4z-perintah-percabangan-bersyarat-dan-
tidak-bersyarat-penggunaan-perintah-percabangan-bersyarat-perintah-loncat-dengan-
pengalamatan-langsung-mnemonik.html
MODUL V
PROSEDUR DAN STACK PADA MIKROPROSESOR
Andhika Fitra Ramadhan (201811031) ; Cahyo Utomo (201811032) ; Mulia Djuang
(201811034) ; Eki Nur Afifah (201811043)
S1 Teknik Elektro , Institut Teknologi – PLN
djuang161099@gmail.com
BAB I
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 prosedur


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

2.1.2.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.2.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
syntax:
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
syntax:
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
Stack

Sekilas Tentang Stack. Stack dapat diimplementasikan dengan menggunakan


konsep Linked List. Bentuk daristruct dari head untuk stack dapat digambarkan sebagai
berikut:Perbedaan mendasar antara stack dan Linked List adalah bahwa stack
memilikioperasi khusus untuk memanipulasi elemen dalam stack tersebut.
Operasi yangdimaksud dalam program C dapat diimplementasikan menjadi function.
Operasi yangdimaksud adalah:•push(): menambah elemen stack yang baru dibagian atas
stack.•pop(): menghapus elemen dari stack yang berada dibagian paling atas.•get():
membaca nilai elemen dari stack yang berada dibagian paling atas.•isEmpty():
memeriksa apakah stack kosong atau tidak.

Kegunaan Stack

Stack biasa digunakan dalam mengontrol operasi dalam sebuah sistem operasi.
Selain itu stack juga merupakan algoritma yang baik yang dapat digunakan untuk
membuat phaser (membaca urutan operasi dari sebuah persamaan matematika).
Aplikasi Stack

Salah satu aplikasi stack adalah dalam mengevaluasi dan menghitung


ekspresi aritmatik. Sebagai contoh, bila kita ingin mencari nilai dari suatu ekspresi
aritmatik sederhana yang melibatkan perkalian, penjumlahan, pengurangan dan
pembagian.Eksepresi aritmatik berikut ini dikenal dengan susunan ekspresi infix: 15 * (
( ( 3 - 2 ) * ( 4 + 10 ) ) / 7 ) membutuhkan penyimpanan hasil sebagian perhitungan.
Misalnya, jika bagian 3 – 2 pada ekspresi di atas dihitung, maka kita harus
menyimpan hasil pengurangan ituyaitu 1 terlebih dahulu, dan kemudian
menghitung ekspresi 4 + 10. Dalam hal inistack sangat ideal untuk digunakan. Sebelum
kita menyelesaikan permasalahan di atas, mari kita coba menyederhanakanekspresi infix
di atas menjadi dalam susunan ekspresi postfix. Ekspresi postfix adalah ekspresi yang
menempatkan operator setelah kedua operannya. Berikut ilustrasi dari ekspresi infix 4 +
10 yang diubah menjadi ekspresi postfix.
Oleh karena itu ekspresi aritmatik
15 * ( ( ( 3 - 2 ) * ( 4 + 10 ) ) / 7 )

dapat diubah menjadi ekspresi postfix sebagai berikut:


15 3 2 - 4 10 + * 7 / *

Algoritma Mengubah Ekspresi Infix menjadi Postfix

Proses konversi ekspresi infix menjadi bentuk postfix selalu dimulai dari sebelah
kiriekspresi aritmatik. 1. Jika yang ditemukan adalah operan, maka cetak atau
simpan2.Jika yang ditemukan adalah kurung buka maka abaikan.3.Jika yang ditemukan
adalah operator maka push ke dalam stack.4.Jika yang ditemukan adalah kurung tutup
maka pop stack, kemudian cetak atausimpan nilainya.5. Jika ekspresi telah diperiksa
semua tetapi ternyata stack belum kosong, pop semuadata dalam stack dan cetak atau
simpan nilai yang di pop.Perhatikan contoh berikut. Diketahui ekspresi infix berikut
ini:15 * ( ( ( 3 - 2 ) * ( 4 + 10 ) ) / 7 ). Dimulai dari sebelah kiri, maka yang kita
temukan pertama sekali adalah nilai 15(operan) maka aturan nomor 1 harus dijalankan,
yaitu nilai tersebut langsung dicetak.Dalam contoh ini kita tidak menyimpan
hasil konversi melainkan langsung mencetaknya ke layar monitor.

Algoritma Menghitung Nilai Ekspresi Postfix

Setelah ekspresi postfix kita peroleh, maka beberapa langkah selanjutnya perlu
jugadikerjakan untuk menghitung nilai dari ekspresi aritmatik tersebut. Ingat,
bahwasebelum menghitung nilai dari suatu ekspresi aritmatik maka ekspresi
infix harusdiubah terlebih dahulu menjadi bentuk ekspresi postfix. Berikut
algoritma untukmenghitung nilai ekspresi postfix:1. Jika yang ditemukan adalah
operan, maka push operan tersebut ke dalam stack.2.Jika yang ditemukan adalah
operator, pop stack dua kali dan hitung menggunakannilai yang di pop dan operator
yang dijumpai. Hasil perhitungan ini kemudian dipush kembali ke dalam stack.3. Jika
ekspresi telah diperiksa semua maka nilai yang di pop terakhir dari stackadalah
jawaban dari ekspresi aritmatik tersebut.Perhatikan contoh berikut. Jika telah diperoleh
ekspresi postfix berikut ini:15 3 2 - 4 10 + * 7 / *Dimulai dari sebelah kiri, maka
yang kita temukan pertama sekali adalah nilai 15(operan) maka aturan nomor 1 harus
dijalankan, yaitu push nilai tersebut ke dalam stack.
2.3 Rangkuman Teori Penunjang

Sekilas Tentang Stack. Stack dapat diimplementasikan dengan menggunakan konsep


Linked List. Bentuk daristruct dari head untuk stack dapat digambarkan sebagai
berikut:Perbedaan mendasar antara stack dan Linked List adalah bahwa stack
memilikioperasi khusus untuk memanipulasi elemen dalam stack tersebut.
Operasi yangdimaksud dalam program C dapat diimplementasikan menjadi function.
Operasi yangdimaksud adalah:•push(): menambah elemen stack yang baru dibagian atas
stack.•pop(): menghapus elemen dari stack yang berada dibagian paling atas.•get():
membaca nilai elemen dari stack yang berada dibagian paling atas.•isEmpty():
memeriksa apakah stack kosong atau tidak.

Salah satu aplikasi stack adalah dalam mengevaluasi dan menghitung


ekspresi aritmatik. Sebagai contoh, bila kita ingin mencari nilai dari suatu ekspresi
aritmatik sederhana yang melibatkan perkalian, penjumlahan, pengurangan dan
pembagian.Eksepresi aritmatik berikut ini dikenal dengan susunan ekspresi infix: 15 * (
( ( 3 - 2 ) * ( 4 + 10 ) ) / 7 ) membutuhkan penyimpanan hasil sebagian perhitungan.
Misalnya, jika bagian 3 – 2 pada ekspresi di atas dihitung, maka kita harus
menyimpan hasil pengurangan ituyaitu 1 terlebih dahulu, dan kemudian
menghitung ekspresi 4 + 10. Dalam hal inistack sangat ideal untuk digunakan. Sebelum
kita menyelesaikan permasalahan di atas, mari kita coba menyederhanakanekspresi infix
di atas menjadi dalam susunan ekspresi postfix. Ekspresi postfix adalahekspresi yang
menempatkan operator setelah kedua operannya. Berikut ilustrasi dari ekspresi infix 4 +
10 yang diubah menjadi ekspresi postfix.
BAB III

METODE PRAKTIKUM

3.1 Langkah Percobaan

1. Nyalakan komputer, kemudian jalankan Aplikasi emu8086

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 - 2 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 di-screen shot dan dilampirkan pada laporan praktikum.
BAB IV

HASIL DAN ANALISA

4.1 Hasil Pengujian

4.1.1 Program Prosedur

4.1.2 Program Stack


4.2 Analisa Pembahasan

Pada praktikum mikroprosesor yang kami lakukan pada hari selasa tanggal 8
desember 2020 yang dilakukan secara online dengan menggunakan aplikasi microsoft
teams mempunyai judul yaitu Prosedur dan Stack pada Mikroprosesor, yang
mempunyai beberapa tujuan yaitu antara lain, pertama yaitu adalah memahami perintah
dan proses operasi prosedur pada mikroprosesor. Kedua yaitu adalah dapat
mendekalarasikan prosedur menggunakan PROC dan menutup prosedur dengan ENDP.
Ketiga yaitu adalah dapat melakukan operasi pemanggilan prosedur dengan CALL dan
mengembalikan dengan ke program utama dengan RET. Keempat yaitu adalah
memahami perintah dan operasi stack pada mikroprosesor. Kelima yaitu adalah dapat
melakukan operasi stack dengan PUSH dan POP. Adapun alat dan bahan yang
diperlukan dalam praktikum mikroprosesor kali ini adalah komputer dan aplikasi
Emu8086.

Selanjutnya, saya akan menjelaskan pengertian yang ada pada modul 5. Prosedur
sendiri merupakan suatu alat bantu yang sangat berguna. Dengan menggunakan
prosedur, suatu program yang besar bisa diselesaikan dengan lebih mudah. Proses
pencarian kesalahanpun akan lebih mudah bila meggunakan prosedur. Prosedur
diidentifikasi dengan nama, diikuti dengan bagian baris tugas yang akan dikerjakan oleh
prosedur. Akhir dari prosedur ditunjukkan dengan pernyataan pengembalian. Prosedur
pada mikroprosesor juga adalah suatu program berpisah dalam blok sendiri yang
berfungsi sebagai sub program (program bagian) dan bekerja seperti kita menyisipkan
sebuah program. Prosedur juga biasanya bersifat suatu aktifitas yang mempunyai contoh
seperti mencari bilangan prima dari sekumpulan bilangan atau mencari bilangan genap
dari sekumpulan bilangan.

Untuk membuat prosedur bisa menggunakan syntax-nya yaitu seperti


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-nya yaitu CALL NamaP. Perbedaan label dengan nama prosedur
yaitu pada label, tipe data nilai yang dikirimkan balik (return value) terdapat pada nama
labelnya, sedangkan prosedur tidak memiliki return value. Karena nilai balik (return
value) berada di nama label tersebut, maka label tersebut dapat langsung digunakan
untuk mencetak hasilnya.

Pada prosedur, nama prosedur tidak bisa digunakan langsung tidak seperti pada
nama label, yang bisa langsung digunakan dari sebuah prosedur adalah parameternya
yang mengandung nilai balik (return value). Pada dasarnya, tidak ada perbedaan yang
signifikan antara label dan nama prosedur pada mikroprosesor, hanya dibedakan dari
nilai balik (return value). Jika suatu sub program tersebut memiliki nilai balik (return
value) maka sub program tersebut disebut label tetapi jika tidak mempunyai nilai balik
(return value) maka sub program tersebut disebut prosedur. Stack sendiri merupakan
'tumpukan'. Stack juga 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.

PUSH dalam mikroprosesor sendiri digunakan untuk memasukkan atau menyimpan


suatu register pada stack. sedangkan POP dalam mikroprosesor sendiri digunakan untuk
mengambil nilai (yang sudah kita simpan pada register) pada puncak stack (yang mana
puncak stack adalah nilai yang kita simpan paling terakhir di stack). Stack dalam
mikroprosesor juga adalah suatu set memori yang dicadangkan untuk menyimpan
sementara dari hasil intermediate atau register. Contoh penggunaan stack dalam
mikroprosesor adalah yaitu algoritma backtracking dan algoritma rekursif. Selain
operasi PUSH dan POP, terdapat beberapa jenis operasi yang lain yaitu IsFull yang
digunakan untuk mengetahui jika tumpukan (stack) sudah penuh atau full. Selanjutnya
ada IsEmpty yang digunakan untuk mengetahui jika tumpukan (stack) sudah kosong.
Berikutnya ada Clear yang digunakan untuk menghapus seluruh data atau
membersihkan data.

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 menggunakan syntax-nya yaitu seperti PUSH Reg16Bit. Perlu
dipahami bahwa ketika menggunakan prosedur, maka seringkali dalam isi program
prosedur akan merubah nilai-nilai dari general purpose register. Kita masih
membutuhkan nilai dari general purpose register dimana nilai tersebut ingin digunakan
nantinya dengan menggunakan stack sebagai penyimpan data general purpose register
tanpa membuat variabel baru untuk menyimpannya.

Pada praktikum kali ini terdapat 2 macam program yang dilakukan. Program pertama
adalah program prosedur. Pada program pertama menggunakan .model small yaitu
dimana .model berfungsi untuk memberitahu assembler bahwa data dan code digunakan
oleh program dan fungsi small disini adalah jika data dan code yang digunakan oleh
program kurang dari ukuran satu segment atau 64 kb. Selanjutnya adalah .code yang
berfungsi untuk memberitahu bahwa menggunakan segmennya untuk menyimpan
program yang dijalankan. Berikutnya adalah fungsi dari .org 100h yaitu adalah untuk
menentukan alamat program dalam memori. Pada bagian pemrosesan kode, bentuk
perintah yang awal-awal digunakan adalah CALL Cetak_KAR yang berfungsi sebagai
pemanggil Cetak_Kar.

Selanjutnya adalah perintah INT 20h yang berfungsi untuk mengakhiri program dan
menyerahkan kendali sepenuhnya kepada DOS. Berikutnya adalah perintah MOV
AH,02h yang berfungsi untuk nilai servis untuk mencetak karakter. Selanjutnya adalah
perintah INT 21h yang berfungsi untuk mencetak satu buah karakter pada layar.
Berikutnya adalah perintah RET yang berfungsi untuk mengembalikan Kontrol program
pada si pemanggil prosedur. Selanjutnya adalah perintah Cetak_Kar ENDP yang
berfungsi untuk END atau mengakhiri prosedur. Program kedua adalah program stack.
Pada program kedua menggunakan .model small yaitu dimana .model berfungsi untuk
memberitahu assembler bahwa data dan code digunakan oleh program dan fungsi small
disini adalah jika data dan code yang digunakan oleh program kurang dari ukuran satu
segment atau 64 kb.

Selanjutnya adalah .code yang berfungsi untuk memberitahu bahwa menggunakan


segmennya untuk menyimpan program yang dijalankan. Berikutnya adalah fungsi dari
.org 100h yaitu adalah untuk menentukan alamat program dalam memori. Selanjutnya
terdapat perintah JMP Proses yang artinya untuk melakukan loncat secara langsung dan
melanjutkan pada bagian pemrosesan. Pada bagian pemrosesan kode, bentuk perintah
yang awal-awal digunakan adalah MOV CX,24 yang berfungsi untuk mencetak karakter
sebanyak 24. Berikutnya adalah perintah MOV BX,BX yang berfungsi untuk
memastikan tidak adanya nilai dalam register. Kemudian adalah perintah ulang yang
berfungsi untuk melakukan proses perulangan. Perintah PUSH AX yaitu berfungsi
untuk menyimpan nilai AX pada stack dan PUSH DX yaitu berfungsi untuk menyimpan
nilai DX pada stack.

Sedangkan perintah POP DX yaitu berfungsi untuk ambil nilai pada puncak stack,
masukkan ke AX dan POP AX yaitu berfungsi untuk ambil nilai pada puncak stack,
masukkan ke DX. Output an yang akan terjadi pada program ini adalah akan mencetak
karakter sebanyak 24 kali dan karakter yang akan tercetak adalah “AKU SUKA
PRAKTIKUM MIKRO”. Dalam program spasi juga dianggap sebagai karakter
sehingga hasil output kalimat nya menjadi tidak lengkap.
4.3 Tugas Akhir

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

mov ah,09h

lea dx,kal0

int 21h

mov ah,09h

lea dx,kal1

int 21h

mov ah,0Ah

lea dx,Buffer

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

1. Prosedur adalah suatu alat pada mikroprosesor yang mana bekerja seperti kita
menyisipkan sebuah program. Prosedur diidentifikasi dengan nama, diikuti dengan
bagian baris tugas yang akan dikerjakan oleh prosedur. Akhir dari prosedur
ditunjukkan dengan pernyataan pengembalian.
2. [nama_prosedur] PROC adalah sebuah syntax yang digunakan untuk menjalankan
prosedur dan ENDP digunakan untuk mengakhiri prosedur.
3. Perintah "RET” (Return) digunakan untuk mengembalikan Kontrol program pada si
pemanggil prosedur. Sedangkan untuk memanggil atau menjalankan prosedur
digunakan operasi CALL.
4. Stack adalah bagian memory yang digunakan untuk menyimpan nilai dari suatu
register untuk sementara. Operasi stack menggunakan prinsip LIFO (Last In First
Out). Artinya data terakhir yang disimpan akan dikeluarkan terlebih dahulu.
5. PUSH dalam mikroprosesor sendiri digunakan untuk memasukkan atau menyimpan
suatu register pada stack. sedangkan POP dalam mikroprosesor sendiri digunakan
untuk mengambil nilai (yang sudah kita simpan pada register) pada puncak stack
(yang mana puncak stack adalah nilai yang kita simpan paling terakhir di stack).
5.2 Saran

Saran saya dari praktikum kali ini yaitu lebih diberi penjelasan mendetail tentang
masing-masing fungsi dari codingan yang digunakan kemudian mungkin bisa diulang
kembali teori pada modul ini serta dapat mengurangi error/galat pada aplikasi Emu8086.
DAFTAR PUSTAKA

https://docplayer.info/32206791-Stack-pointer-ke-node-pertama-dari-stack-bagian-
deklarasi-di-atas-kita-asumsikan-disimpan-menjadi-sebuah-header-file-dengan-nama-
stack.html

Anda mungkin juga menyukai