Anda di halaman 1dari 97

MODUL I

Pengantar Mikroprosesor dan Bahasa Pemrograman Assembly


(Interupsi dan Input/Output)

Maulana Rakha Rasendriya (201811136) ; Aulia Nurul Huda Nasution (201811103)

S1 Teknik Elektro, Institut Teknologi – PLN

rakha15412@gmail.com

BAB I
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

2.1.1 PENGERTIAN MIKROPROSESOR

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

Pada awal tahun 1980 teknologi VLSI (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. 

2.1.2 KOMPONEN MIKROPROSESOR (8086)


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

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).
2.1.2.1 Control System
Control System berfungsi mengatur aliran data bus dan alamat bus, menghasilkan sinyal
dalam mikroprosesor untuk melaksanakan instruksi yang diberikan. Control unit juga mengatur
masuk keluarnya data dan koneksi antar blok pada system mikroprosesor.

2.1.2.2 Arithmetic Logic Unit (ALU)


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

 Conditional Flags
Flag-flag ini merepresentasikan hasil dari instruksi proses aritmatika sebagai berikut :
- Carry flag (CF)– Mengindikasikan apakah ada data berlebih dari hasil operasi aritmatika
- Auxiliary flag (AF)− Mengindikasikan adanya data berlebih dari data rendah (4-bit
pertama) ke data tinggi (4-bit kedua) pada register
- Parity flag (PF)− Menset (nilai 1), jika instruksi menghasilkan sebuah angka genap
- Zero flag (ZF) − Menset (nilai 1), jika hasil instruksi adalah 0.
- Sign flag (SF) − Menset (nilai 1), jika hasilnya adalah negatif dan bernilai 0 jika positif
- Overflow flag (OF) – Bernilai 1 ketika kapasitas system terlampaui.
 Control Flags
Control flags mengatur operasi dari Execution Unit. Berikut penjelasannya :
- Trap flag (TF) – Jika di set ke 1 maka program akan berjalan step-by-step
- Interrupt flag (IF)− mengabaikan interupsi yang terjadi jika bit ini 0.
- Direction flag (DF) – Digunakan untuk operasi string. Jika bernilai 1 memori akan diakses
dari tertinggi ke terendah.
2.1.2.3 General purpose register
Terdapat 8 general purpose registers, yaitu AH, AL, BH, BL, CH, CL, DH, and DL.
Secara individu register ini dapat digunakan untuk menyimpan data 8-bit dan dapat digabungkan
untuk menyimpan data 16-bit. Gabungan dari AH dan AL disebut AX, BH dan BL adalah BX,
begitu pula dengan CX dan DX.

AX register – Digunakan sebagai register akumulator. Digunakan untuk menyimpan hasil


dari operasi aritmatika.
BX register – Digunakan sebagai register dasar, yaitu sebagai memori penyimpanan
alamat dasar dari area memori dalam sebuah segmen data.
CX register – Digunakan sebagai register counter, yaitu untuk melakukan instruksi
perulangan sejumlah yang dimasukkan pada CX.
DX register – Digunakan untuk menyimpan alamat port I/O untuk instruksi I/O.
2.1.2.4 Pointer dan Indeks register
Merupakan 16-bit register yang menyimpan alamat dari mulainya suatu segmen.
- Register SP (Stack Pointer, 16 bit) Fungsi: Digunakan untuk operasi stack seperti
menyimpan alamat return saat memanggil subroutine. SP merupakan register yang
secara implisit digunakan oleh perintah PUSH dan POP yaitu menyimpan dan
mengambil kembali dari stack.
- Register BP (Base Pointer, 16 bit)Fungsi: Sebagai penunjuk base dalam stack yang
disediakan untuk penyimpanan data. BP juga digunakan si dengan bahasa pemrograman
misalnya Assembler dan C.
- Register IP (Instruction Pointer, 16 bit)Fungsi: Register yang berpasangan dengan CS
sebagai register utama untuk menunjukkan baris perintah program. Pada saat program
dijalankan, IP akan langsung menunjuk pada awal program. Code Segment dan
Instruction Pointer berfungsi sebagai program counter ditulis dengan format CS:IP.
Secara umum, kode mesin diletakkan di Code Segment, semua data diletakkan di
Data Segment, dan operasi PUSH dan POP dilakukan di Stack Segment.
- Register SI dan DI (Source Index dan Destination index, 16 bit)Fungsi: Menyimpan nilai-
nilai offset dalam segment data memori pada saat bersangkutan.
-
2.1.2.5 Instruction queue
BIU memiliki instruction queue. BIU memiliki 6 bytes instruksi selanjutnya yang
disimpan dalam instruction queue. Maka saat EU menjalankan suatu instruksi, sudah
terdapat instruksi berikutnya pada instruction queue hasilnya proses eksekusi menjadi
lebih cepat. Mengambil instuksi setelahnya dalam kondisi instuksi sebelumnya masih
berjalan disebut pipelining.
2.1.2.6 Segment register
BIU memiliki 4 segment buses, yaitu CS, DS, SS & ES. Segment buses menyimpan
alamat dari instruksi dan data pada memori yang digunakan oleh prosesor untuk
mengakses lokasi memori. Ia juga memiliki sati pointer register (IP), yang menyimpan
alamat dari instruksi berikutnya yang akan dieksekusi oleh EU.
- Code Segment (CS) – Digunakan untuk menyimpan alamat lokasi program executable
ditempatkan.
- Data Segment (DS) − 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.
2.1.3 Bentuk IC Mikroprosesor 8086

AD0-AD15 : Address/Data bus


A16-A19 : High order address bus
S2, S1, S0 : Status pins
BHE’/S7 : Bus High Enable/Status
RD’ : This is used for read operation
READY : This is the acknowledgement from the memory or slow device that they
have completed the data transfer.
INTR : Interrupt Request.
NMI : Non maskable interrupt
INTA : Interrupt acknowledge
MN/MX’ : Minimum/Maximum
RQ’/GT1′, RQ’/GT0′ : Request/Grant
LOCK’ : Its an active low pin
TEST’ : This examined by a ‘WAIT’ instruction
CLK : Clock Input
RESET : This pin requires the microprocessor to terminate its present activity
immediately.
DT/R : Data Transmit/Receive
DEN : Data enable
HOLD/HOLDA : HOLD indicates that another master has been requesting a local bus
ALE : Address Latch Enable
2.1.4 Pemrograman Bahasa Asembly
Bahasa rakitan atau lebih sering dikenal dengan bahasa Assembly adalah bahasa
pemograman tingkat rendah yang dipakai untuk memprogram perangkat keras seperti
mikroprosesor dan mikrokontroler. Bahasa ini merupakan bahasa pemrograman yang berisi
instruksi-instruksi yang diterjemahkan oleh decoder menjadi bahasa mesin yang dimengerti oleh
komputer.

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

Kolom Editor

2.1.5 Pengertian Interupsi (Interrupt)

Interupsi adalah suatu permintaan khusus kepada mikroposesor untuk melakukan sesuatu.
Bila terjadi interupsi, maka komputer akan menghentikan dahulu apa yang sedang dikerjakannya
dan melakukan apa yang diminta oleh yang menginterupsi.

Interupt dibagi menjadi 2 yaitu interrupt BIOS dan DOS :


- Interupt 00h - 1Fh (0 - 31) adalah interrupt BIOS dan standar di semua komputer baik yang
menggunakan sistem operasi DOS atau bukan. Lokasi Interupt Vector Table-nya ada di alamat
absolut 0000h-007Fh.

- Interupt 20h - FFh (32 - 255) adalah interrupt DOS. Interrupt ini hanya ada pada komputer
yang menggunakan sistem operasi DOS dan Interupt Handler-nya diload ke memori oleh DOS
pada saat DOS digunakan. Lokasi Interupt Vector Tablenya ada di alamat absolut 07Fh-3FFh.

2.1.6 Input dan Output pada Mikroprosesor

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

Selanjutnya seiring dengan topik-topik praktikum akan dipelajari tipe-tipe Input/output


yang dapat diberikan/dikeluarkan oleh mikroprosesor. Tipe-tipe yang dimaksud diatur oleh
interupsi yang diberikan dan isi dari register-register pada mikroprosesor.

Tabel 1.1. BIOS Interrupt


Tabel 1.2. DOS Interrupt

Program 1. Mencetak Huruf ‘A’ ke Layar


.MODEL SMALL header
.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 karakter
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

Program adalah susunan atau urutan perintah-perintah sederhana yang diberikan kepada
komputer untuk memecahkan beberapa permasalahan.Jika sebuah program telah ditulis
dan dilakukan debuging, komputer akan dapat mengeksekusi program tersebut dengan
sangat cepat dan dengan cara yang sama setiap saat tanpa kesalahan.Kebanyakan orang
berpikir bahwa komputer adalah sebuah peralatanyang sangat komplek r sulit dipelajari,
don dapat berfikir melebihi manusia.Pernyataan ini terlolu berlebihan, karena komputer
hanya dapat bekerja jikaado perintah yang diberikan yang disebut program.Program
adalah susunan atau urutan perintah-perintah sederhana yang diberikan kepada komputer
untuk memecahkan beberapa permasalahan. Jikasebuah program telah ditulis dan
dilakukan debuging, komputer akan dapatmengeksekusi program tersebut dengan sangat
cepat dan dengan cara yangsama setiap saat tonpa kesalahan.Disinilah kehebatan
komputer, meskipun program tersusun dari perintah-perintah yang sang at sederhana,
hasil akhir sangat menakjubkan sebabkomputer dapat bekerja dengan kecepatan tinggi.
ntsruksi transfer data dapat menggunakan perintah LOAD atau MOVE,Instruksi
matematika sederhana menggunakan perintah ADD, SUBTRACT, MULTIPLY,
DEVIDE. Ada tiga tingkat level bahasa yang dapat digunakan untuk menulis program
pada sebuah mikrokomputer yaitu:~ Bahasa MESIN~ Bahasa ASSEMBLY~ Bahasa
Aras Tinggi (High LevelUntuk menjalcmkan program, sebuah mikrokomputer harus
memilikiprogram yang tersimpan dalam format biner pada suatu lokasi memori. Bahasa
mesin adalah bahasa dalam bentuk kode-kode biner sebagai sandi operasi (Operation
Code) dari sebuah mikroprosesor.Bahasa mesin adalah bahasa yang langsung
berhubungan dengan mikroprosesor yang ditulis dan dikembangkan dari set
instruksi.Tanpa bantuan set instruksi bahasa mesin sangat sulit dimengerti atau difahami.
Untuk dapat menulis bahasa mesin maka penguasaan set instruksi sebuah mikroprosesor
adalah wajib . programmer menuliskan program dalam bentuk bahasa assembly
kemudian menterjemahkan bahasa assembly yang ditulisnya menjadi bahasa mesin
sehingga dapat di load ke memori dan di run atau dijalankanPenterjemahan bahasa
assembly menjadi kode biner bahasa mesin dapat dilakukan secara manual atau
menggunakan program yang disebut dengan assemblerUntuk membuat proses
pemrograman menjadi lebih mudah,kebanyakan programmer menuliskan program dalam
bentuk bahasaassembly. Kemudian mereka menterjemahkan bahasa assembly yang
ditulisnya menjadi bahasa mesin sehingga dapat di load ke memori dan di runatau
dijalankan. Penterjemahan bahasa assembly menjadi kode biner bahasaMesin dapat
dilakukan secara manual atau menggunakan program yangdisebut dengan assembler.
Bahasa assembly menggunakan sejumlah mnemonik untuk merepresentasikan instruksi
–Instruksl.Mnemonik adalah singkatan dari suatu perintah atau instruksi sebagai piranti
untuk membantu ingatan. LOAD disingkat LD,ADD disingkat ADD,ADD With Carry
disingkat ADC,SUBTRACT disingkat SUB,SUBTRACT With Carry disingkat
SBC,COMPLEMENT disingkat CPL. Label adalah simbol atau kelompok simbol yang
digunakan untuk merepresentasikan alamat yang tidak diketahui secara spesifik pada
saat pernyataan-pernyataan ditulis.Label tidak dipersyaratkan dalam setiap pernyataan,
label dimasukkan bila diperlukan saja. Bagian operand dapat memuat nama Register,
alamat memori, alamat port, atau data immediate dari sebuah instruksi.Operand adalah
sasaran dari instruksi.Pada bagian operand terbagi menjadi dua bagian yaitu sumber data
yang disebut dengan Source dan tujuan data atau Destinasi.Bagian komentar biasanya
digunakan untuk memberi penjelasan singkat maksud atau sasaran dari instruksi
disebelah kirinya.Pada umumnya Source ada disebelah kanan dari Destinasi. Bagaimana
menterjemahkan program dalam bahasa assembly menjadi bahasa mesin yang siap
dieksekusi ke sistim mikroprosesor?Ada 2 Cara:Secara manual dengan menerjemahkan
setiap instruksi bahasa assembly menjadi bahasa mesin melalui set instruksi.Jika kita
sudah menulis program dalam bahasa assembly, pertonvocnnvobagoimana
menterjemahkan menjnadi bahasa mesin yang siap dieksekusi kesisfim mikroprosesor?
Ada dua jawaban atas pertanyaan ini. Pertama secaramanual dengan menerjemohkan
setiap instruksi bahasa assembly menjadibahasa mesin melalui set instruksi. Kemudian
kedua secora otomatis denganmenggunakan ASSEMBLER. Assembler adalah sebuah
program yang dapatdijalankan pado sebuah mikrokomputer atau pada sebuah
MicrocomputerDevelopment System.Secara otomatis dengan menggunakan sebuah
program yang dapat dijalankan pada sebuah mikrokomputer atau pada sebuah
Microcomputer Development System, sering disebut program ASSEMBLER. Cara lain
dalam menulis program pada mikrokomputer adalah dengan bahasa aras tinggi seperti
Bahasa C, bahasa Pascal, BASIC, FORTRAN,dan sebagainya.Secara umum bahasa aras
tinggi dapat dikelompokkan menjadi dua yaitu sebagai Compiler otau Interpreter.
Sesederhana apapun dari sebuah program dalam bahasa assembly memerlukan
penggunaan Computer Development System dan Program Development Tools.Sistim
tersebut biasanya memuat beberapa kilo byte RAM/RWM, Keyboard, Display, Floppy
Disk, Hard Disk, dan Emulator.Sesederhana apapun dari sebuah program dalam bahasa
assembly memerlukan penggunaan Computer Development System dan Program
Development Tools (contoh : MPF-7,Guru Mikro Soya, MidiCom). Sistim tersebut
biasanya memuat beberapa kilo byte RAM/RWM, Keyboard, Display, FloppyDisk,
Hard Disk, dan Emulator. Untuk mengembangkan program dalam Bahasa assembly
diperlukan tool sebagai berikut. Untuk mengembangkan program dalam bahasa
assembly diperlukan tool sebagai
berikut:Editor,Assembler,Linker,Locator,Debugger,Emulator. Sesederhana apapun dari
sebuah program dalam bahasa assemblymemerlukan penggunaan Computer
Development System dan ProgramDevelopment Tools (contoh : MPF-7,Guru Mikro
Soya, MidiCom). Sistim tersebutbiasanya memu at beberapa kilo byte RAM/RWM,
Keyboard, Display, Floppy Disk, Hard Disk, dan Emulator. Untuk mengembangkan
program dalam bahasaassembly diperlukan tool sebagai berikut. Editor adalah sebuah
program yang digunakan untuk mengetik atau mengedit program dalam bentuk
pernyataan-pernyataan.Contoh program editor : TV Demo, EDLlN, ALTER.Fungsi
utama program editor adalah untuk membantu programmer dalam membangun program
dalam bahasa assembly dalam bentuk format yang benar sehingga assembler dapat
menterjemahkannya menjadi bahasa mesin yang benar.Hasil atau bentuk program hasil
dari editor disebut Source Program. Assembler adalah program yang digunakan untuk
menterjemahkan mnemonik bahasa assembly menjadi kode biner yang benar untuk
setiap instruksinya.Assembler akan membaca File Source Program di disk dimana
source program tersebut disimpan setelah diedit menggunakan editor.Assembler
biasanya membaca file source program lebih dari sekali.Pertama, untuk menentukan
penggantian nama item data dan offset dari sebuah label, dan meletakkan informasi
tersebut dalam sebuah Symbol Table.Kedua, assembler membangkitkan kode biner (Op-
code) untuk setiap instruksi. Object File yang berisi kode biner untuk instruksi-instruksi
dan informasi tentang alamat instruksi.Assembler List File yang memuat pernyataan
bahasa assembly, kode biner untuk setiap instruksi, dan offset unluk setiap instruksi.File
yangkedua ini yang biasanya di cetak ke printer sebagai pegangan pada saat melakukan
testing dan troubleshooting. Lingker adalah program yang digunakan untuk
menggabungkan beberapa object file menjadi satu object file yang lebih besar.Biasanya
dalam membangun program yang sangat besar agar lebih efesient program tersebut
dipecah dan dibagi-bagi menjadi beberapa program yang lebih kecil yang disebut
dengan Modul.Setiap modul dapat ditulis, ditest, dan di debugged secara individual.Jika
semua modul-modul telah berfungsi dengan baik, selanjutnya dapat di linked menjadi
program dalam fungsinya yang besar.

Rangkuman :

Program adalah susunan atau urutan perintah-perintah sederhana yang diberikan kepada
komputer untuk memecahkan beberapa permasalahan.Jika sebuah program telah ditulis
dan dilakukan debuging, komputer akan dapat mengeksekusi program tersebut dengan
sangat cepat dan dengan cara yang sama setiap saat tanpa kesalahan.Kebanyakan orang
berpikir bahwa komputer adalah sebuah peralatanyang sangat komplek r sulit dipelajari,
don dapat berfikir melebihi manusia.Pernyataan ini terlolu berlebihan, karena komputer
hanya dapat bekerja jikaado perintah yang diberikan yang disebut program.Program
adalah susunan atau urutan perintah-perintah sederhana yang diberikan kepada komputer
untuk memecahkan beberapa permasalahan. Jikasebuah program telah ditulis dan
dilakukan debuging, komputer akan dapatmengeksekusi program tersebut dengan sangat
cepat dan dengan cara yangsama setiap saat tonpa kesalahan.Disinilah kehebatan
komputer, meskipun program tersusun dari perintah-perintah yang sang at sederhana,
hasil akhir sangat menakjubkan sebabkomputer dapat bekerja dengan kecepatan tinggi.
ntsruksi transfer data dapat menggunakan perintah LOAD atau MOVE,Instruksi
matematika sederhana menggunakan perintah ADD, SUBTRACT, MULTIPLY,
DEVIDE. Ada tiga tingkat level bahasa yang dapat digunakan untuk menulis program
pada sebuah mikrokomputer yaitu:~ Bahasa MESIN~ Bahasa ASSEMBLY~ Bahasa
Aras Tinggi (High LevelUntuk menjalcmkan program, sebuah mikrokomputer harus
memilikiprogram yang tersimpan dalam format biner pada suatu lokasi memori.
Assembler adalah sebuah program yang dapatdijalankan pado sebuah mikrokomputer
atau pada sebuah MicrocomputerDevelopment System.Secara otomatis dengan
menggunakan sebuah program yang dapat dijalankan pada sebuah mikrokomputer atau
pada sebuah Microcomputer Development System, sering disebut program
ASSEMBLER. Cara lain dalam menulis program pada mikrokomputer adalah dengan
bahasa aras tinggi seperti Bahasa C, bahasa Pascal, BASIC, FORTRAN,dan
sebagainya.Secara umum bahasa aras tinggi dapat dikelompokkan menjadi dua yaitu
sebagai Compiler otau Interpreter. Sesederhana apapun dari sebuah program dalam
bahasa assembly memerlukan penggunaan Computer Development System dan Program
Development Tools.Sistim tersebut biasanya memuat beberapa kilo byte RAM/RWM,
Keyboard, Display, Floppy Disk, Hard Disk, dan Emulator

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 1 ,2 dan 3 dimasukkan dalam laporan praktikum
5. Kerjakan tugas akhir berdasarkan materi yang diberikan. Tambahkan keterangan pada
perintah-perintah yang diberikan pada mikroprosesor. Kerjakan masing-masing.
6. Hasil tugas akhir discreen shot dan dilampirkan pada laporan praktikum.
BAB IV

HASIL DAN ANALISA

4.1 Hasil Pengujian

Program 1. Mencetak Huruf ‘A’ ke Layar


Program 2. Mencetak Karakter Beserta Atribut

Program 3.
Meminta Memasukkan dan Menampilkan Masukkan
4.2 Analisa Pembahasan

Pada pembahasan analisa kali ini untuk Praktikum Mikroprosesor Modul 1 berjudul
Pengantar Mikroprosesor dan Bahasa Pemograman Assembly (Interupsi dan Input/Output).
Sebagai dasarannya, kita perlu tau dulu apa itu bahasa pemograman Assembly. Bahasa Assembly
merupakan Bahasa pemograman tingkat rendah yang digunakan dalm pemograman komputer,
mikroprosesor, pengendali mikro dan perangkat lainnya yang dapat diprogram. Bahasa assembly
mengimplementasikan representasi atas kode mesin dalam bentuk symbol-simbol yang secara
relative lebih dapat dipahami oleh manusia. Ada pula kode ASCII (American Standard Code for
Information Interchange) yaitu suatu standar internasional dalam kode huruf dan symbol seperti
hex dan unicode tetapi ASCII lebih bersifat universal. Sebagai contoh kode 124 untuk karakter “|” .
Kode ASCII itu sendiri digunakan untuk mewakili karakter-karakter angka maupun huruf didalam
computer.

Praktikum dilakukan dengan menggunakan aplikasi Emu8086. EMU8086 merupakan


emulator untuk prosesor 8086 yang sudah dilengkapi dengan editor dan assembler yang bersifat
GUI (graphical user interface). Dengan EMU8086 internal register dapat diamati dari waktu ke
waktu akibat dari eksekusi suatu instruksi assembly. Dimulai dari empty workspace, maka kita
akan menuliskan coding yang akan kita simulasikan dan untuk mengetahui output dari coding yang
kita buat. Dalam

penulisan coding ada beberapa aturan yang harus kita ikuti dan untuk mendapatkan hasil yang
maksimal, Dalam penulisan program bagian atas merupakan bagian untuk melakukan bagian
identifikasi dan setting ( diluar tanda ; dan tulisan karakter berwarna hijau karena karakter warna
hijau merupakan tanda informasi program maupun informasi tiap-tiap instruksi).

Bagian awal tiap pengkodingan, terdapat .MODEL SMALL yang merupakan tanda
directive untuk memberi tahu kepada assembler bentuk memory yang kita gunakan dalam program
yang kita buat contohnya seperti tiny, small, medium, compact, large mauun huge. Bila yang
digunakan small, maka artinya data dan code yang digunakan oleh program kurang dari 1 segment
atau 64 kb. Selain itu ada .CODE yang merupakan directive untuk memberitau ke assembler bahwa
kita akan menggunakan code segmentnya disini, code segment digunakan untuk menyimpan
program yang nantinya akan dijalankan. Sedangkan .ORG 100h ini adalah perintah yang selalu
digunakan untuk memberitau assembler agar program ketika dijalankan ditaruh pada offset 100h
(255) bytes atau dengan kata lain kita menyediakan memori kosong 100h byte pada saat proram
dijalankan.

CPU 8086 mempunyai 8 general purpose register, dimana tiap register mempunyai
namanya sendiri- sendiri : AX-the accumulator register (dibagi menjadi AH/AL), BX-the base
address register (dibagi menjadi BH/BL), CX-the count register (dibagi menjadi DH/DL), SI-
source index register, DI-destination index register, BP base pointer, dan SP-stack pointer. Register
ditujuan untuk menyimpan angka (variabel). Karena register berada dalam CPU, mereka lebih
cepat dibandingkan dengan memory. Pengaksesan data dalam register biasanya tidak
membutuhkan waktu . Oleh karena itu kita harus menyimpan variabel dan register. Kumpulan
register sangat kecil dan hamper semua register mempunyai kegunaan yang khusus yang
penggunaanya dibatasi sebagaimana suatu variabel, tetapi register masih merupakan tempat yang
baik untuk menyimpan data sementara untuk suatu perhitungan. Walaupun mungkin menyimpan
data apapun dalam segmen register, tapi hal ini tidaklah dianjurkan . Segmen register mempunyai
tujuan yang sangat khusus, yaitu menunjuk blok memori yang dapat diakses.

Interupsi adalah suatu permintaan khusus kepada mikroprosesor untuk melakukan sesuatu.
Bila terjadi interupsi, maka komputer akan menghentikan dahulu apa yang sedang dikrjakannya
dan melakukan apa yang diminta oleh yang menginterupsinya. Interupsi dibagi menjadi 2 yaitu
interusi BIOS dan DOS. Interupsi 00h-1Fh (0-31) merupakan interupsi BIOS. Interupsi 20h-FFh
adalah interupsi DOS.

Praktikum dilakukan dengan menguji 3 contoh program yang tersedia pada modul. Mari
kita bahas satu persatu modul yang ada. Untuk program 1 ini bertujuan menampilkan huruf A ke
layar. Penggunaan mov AH diperuntukan untuk mencetak huruf. Karena yang dipakai adalah AH
02h, maka pasangan interupsinya adlaah INT 21h. Pengkodingannya cukup sederhana, karena
hanya untuk mencetak huruf A pada hasil running. Masuk keprogram 2 untuk mencetak karakter
beserta atribut. Penggunaan AH 09h untuk mencetak huruf dibarengi dengan interupsi nya yaitu
INT 10h. Terdapat BL 93h yang ditujukan untuk memberi warna background dan warna font
seperti yang ditampilkan pada hasil program. Kemudiah BH untuk nomor halaman hasi running,
namun apabila ada dua halaman makan hanya satu halaman yang akan terlihat pada layar komputer
kita. Disitu juga digunakan CX, dimana CX itu sendiri digunakan apabila kita ingin mencetak
karakter sebanyak yang kita mau. Pada program, CX 03h yang artinya nanti akan terjadi
pengulangan huruf A sebanyak tiga kali. Program 3 meminta memasukkan dan menampilkan
masukkan. Sesuai judul maka nanti hasil layar akan tertulis bahwa program meminta kita
menginput suatu karakter atau angka dan

menampilkan apa yang kita input tadi. Dari program 3 ini kita tau bahwa penempatan .CODE
kemudian ORG 100h tidak akan sama dengan .DATA baru kemudian ORG 100h. Program tidak
akan berjalan apabila seperti itu. Penggunaan huruf kapital maupun tidak kapital juga tidak
memengaruhi jalannya program sebagaimana telah saya buktikan pada lampiran diatas. Pada
program 3 ini agak berbeda dengan dua program sebelumnya karna program 3 ini menggunakan
format pengkodingan dari kode ASCII jadi lebih singkat apabila kita perhatikan pada program
sebelumnya.

4.3 Tugas Akhir

BAB V
PENUTUP

5.1 Kesimpulan

o Kita mampu memahami dan menjelaskan cara kerja mikroprosesor dan


menggunakan bahasa pemrograman Assembly untuk memprogram mikroprosesor
o Kita dapat memahami cara meminta masukan dari keyboard dan menampilkan pada
layar.

5.2 Saran
o Saya pribadi berharap agar penjelasan di dalam praktikum nya dan pemberian tugas
akhir nya seimbang,karena saya pribadi atau mungkin teman-teman yang lainnya
belum dapat memahami sepenuhnya

Daftar Pustaka : https://slideplayer.info/slide/2002220/

MODUL II

OPERASI ARITMATIKA PADA MIKROPROSESOR


Maulana Rakha Rasendriya (201811136) ; Aulia Nurul Huda Nasution (201811103)

S1 Teknik Elektro, Institut Teknologi – PLN

rakha15412@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


2.1.1 Berbagai Jenis Bilangan
Didalam pemrograman dengan bahasa assembler, bisa digunakan berbagai jenis bilangan
berdasarkan basisnya. Jenis bilangan yang bisa digunakan, yaitu: Bilangan biner(basis 2), octal
(basis 8) desimal (basis 10) dan hexadesimal (basis 16). Pemahaman terhadap jenis-jenis
bilangan ini adalah penting, karena akan sangat membantu kita dalam pemrograman yang
sesungguhnya. Penulisan penanda basis pada sebuah bilangan ditandai dengan angka dipojok
kanan bawah suatu bilangan, misalkan 10 adalah biner maka diulis 102, jika 10 adalah decimal
ditulis 1010 dan heksadesimal 1016. Tetapi untuk mendefisikan jenis bilangan pada Bahasa
Assembly, bilangan tersebut diakhiri dengan huruf B(Biner), O(Oktal), D(Desimal) dan
H(Hexadesimal).
Contoh MOV AX, 01010H. 0101 pada perintah tersebut merupakan bilangan Hexadesimal

2.1.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) = 71010

2.1.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.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.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.1.2 Operasi Pernambahan


2.1.2.1 ADD
Untuk menambah dalam bahasa assembler digunakan perintah ADD dan ADC serta INC. Perintah
ADD digunakan dengan syntax :

ADD Tujuan,Asal

Perintah ADD ini akan menambahkan nilai pada Tujuan dan Asal. Hasil yang didapat akan
ditaruh pada Tujuan, dalam bahasa pascal sama dengan instruksi Tujuan:=Tujuan + Asal. Sebagai
contohnya :

MOV AH,15h ; AH:=15h


MOV AL,4 ; AL:=4
ADD AH,AL ; AH:=AH+AL, jadi AH=19h

Perlu anda perhatikan bahwa pada perintah ADD ini antara Tujuan dan Asal harus mempunyai
daya tampung yang sama, misalnya register AH(8 bit) dan AL(8 bit), AX(16 bit) dan BX(16
bit). Mungkin ada yang bertanya-tanya, apa yang akan terjadi bila Tujuan tempat hasil
penjumlahan disimpan tidak mencukupi seperti pertambahan 1234h dengan F221h.

1234 h Biner --> 0001 0010 0011 0100


F221 h Biner --> 1111 0010 0010 0001
---------- + --------------------- +
10455 h 1 0000 0100 0101 0101

Pada pertambahan diatas dapat dilihat bahwa pertambahan bilangan 1234 dengan F221 akan
menghasilkan nilai 10455. Supaya lebih jelas dapat anda lihat pada pertambahan binernya
dihasilkan bit ke 17, padahal register terdiri atas 16 bit saja. Operasi pertambahan yang
demikian akan menjadikan carry flag menjadi satu, Contoh :

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


MOV BX,0F221h ; Nilai BX:=F221h dan carry=0
ADD AX,BX ; Nilai AX menjadi 0455h dan carry=1

2.1.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-flag
yang terpengaruh oleh perintah ADD dan ADC ini adalah CF,PF,AF,ZF,SF dan OF.
2.1.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.
Contoh Program 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.1.3 OPERASI PENGURANGAN


2.1.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,15 ; AX:=15
MOV BX,12 ; BX:=12
SUB AX,BX ; AX:=15-12=3
SUB AX,AX ; AX=0
Untuk menolkan suatu register bisa anda kurangkan dengan dirinya sendiri seperti SUB
AX,AX.

2.1.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:=Tujuan-Asal-CF).
2.1.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.
Contoh Program 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.1.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.

Contoh Program Perkalian


.MODEL SMALL
.CODE
ORG 100H
TDATA :
JMP PROSES ; Lompat ke Proses
A DW 01EFH ; Define word
B DW 02EFH ; Define word
HSLLO DW ? ; Membuat variable bebas
HSLHI DW ? ; Membuat variable bebas
PROSES:
MOV AX,A ; AX = 1EFH = 495D
MUL B ; Kalikan 1EFH*2EFH = 495D*751D = 371745D = 0005AC21H
MOV HSLLO,AX ; AX bernilai AC21 sehingga HSLLO=AC21
MOV HSLHI,DX ; DX bernilai 0005 sehingga HSLHI=000A
INT 20H ; Kembali ke DOS
END TDATA

2.1.5 PEMBAGIAN
Operasi pada pembagian pada dasarnya sama dengan perkalian. Untuk operasi pembagian
digunakan perintah DIV dengan syntax:
DIV Sumber
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.

Contoh Program Pembagian


.MODEL SMALL
.CODE
ORG 100h
TData :
JMP Proses ; Lompat ke Proses
A DW 01EFh
B DW 2
Hsl DW ?
Sisa DW ?
Proses:
SUB DX,DX ; Jadikan DX=0
MOV AX,A ; AX = 1EFH = 495D
DIV B ; Bagi 1EFH:2H
MOV Hsl,AX ; AX bernilai 00F7H = 247D sehingga Hsl=00F7
MOV Sisa,DX ; DX berisi 0001 sehingga Sisa=0001
INT 20h ; Kembali ke DOS
END Tdata

2.2 Teori Penunjang


Abstrak: Intel Corporation mulai memperkenalkan Mikroprosesor 8088 sekitar tahun 1978.
Mikroprosesor 8088/8086 memiliki 4 register, yaitu Counter Register CX, Accumulator Register
AX, Base Register BX, dan Data Register DX menggunakan perintah MOV (perpindahan), ADD
(penjumlahan), SUB (pengurangan), dan MUL (perkalian). Berdasarkan data tersebut, digunakan
metode manual dan ekskusi program untuk menganalisis set instruksi mikroprosesor 8086/8088.
Kedua metode diatas menghasilkan pengalamatan yang berbeda. Penelitian bertujuan untuk
memahami cara operasi aritmatika menggunakan mikroprosesor 8086/8088. Penelitian ini
dilakukan dengan menjelaskan suatu permasalahan dengan menggunakan metode manual dalam
pembuatan Op-Code serta eksekusi instruksi. Berdasarkan penelitian yang dilakukan, dihasilkan 2
metode yaitu bisa lewat perangkat lunak maupun secara manual agar lebih mudah dalam
pengaplikasiannya.
PENDAHULUAN
Pengalamatan mikroprosesor adalah bagian yang tidak terpisahkan dari ranah penelitian arsitektur
dan organisasi komputer (Fahri & Riadi, 2013). Pengalamatan ini juga membahas tentang
komponen penyusun sistem komputer antar interkoneksi serta tentang unit-unit operasional
sedangkan di arsitektur komputer akan membahas tentang atribut sistem komputer yang
berterkaitan dengan seorang programmer. (S & Wijaya, 2012). Penelitian ini diangkat untuk
meneliti peran operasi aritmatika menggunakan microprosessor 8086/8088. Peran sangat tidak
lepas dari kata prosesor yang biasa disebut dengan otaknya computer. Apabila suatu komponen PC
biasanya memiliki fungsi sebagai pentransmisi data,dan professornya memiliki fungsi untuk
menghitung dan menentukan segala aktifitas (S & Wijaya, 2012). Microprosesor telah menjadi
suatu mesin bagi microcomputer kompatibelnya serta IBM PC/XT merupkan pengertian dari
Prosesor Intel 8086/8088. Prosesor Intel 8088 memiliki perbedaan dari 8086, tapi bisa juga
memiliki kesamaan jika dilihat misalnya dari pemrogramannya Intel 8086/8088 yaitu prosesor
yang memiliki 16 bit, yang berarti data lintasannya serta registernya memiliki ukuran hampir sama
dengan prosesornya yaitu 16 bit (Mustawa, 2013).
Mikroprosesor menurut teknologi bisa dikumpulkan berdasarkan jumlah dari bit data,berdasarkan
kemampuan atau karakteristik mikroposesor serta struktur dan fungi dari mikroprosesor itu
sendiri.Memiliki jumlah bit data yang bisa do mulai dari 1 bit,4bit,8bit,lalu 16bit kemudian 32bit
selanjutnya 64 bit (Hambali, 2017). Jalur alamat mempunyai pin yang hampir sama dengan jalur
data, yang memiliki arti apabila pada saat-saat tertentu akan dipakai sebagai jalur alamat dan juga
bisa dilakukan pada waktu-waktu yang lain. 8088 diharapkan memiliki system yang relatif
ekonomis, serta banyak diikuti oleh para pengguna desain missal 8 bit. Sircuit Boards yang
memiliki jalur bus yang lumayan lebar bisa dikatakan masih mahal jika nanti diterbitkan. (Hendra
Gunawan, 2010). Prosessor biasanya mempunyai alamat bus sebanyak kira-kira 20 bit, memiliki
arti bahwa bisa mencapai alamat sampai 1.048.575 lokasi. Berdasarkan Heksadesimal, angka
seperti itu dikatakan 00000 hingga dengan FFFFF merupakan alamat fisik dari sebuah
microprosessor (Najah, Yaqin, Angreani, & Fauzan, 2019).. Jika 8086 serta 8088 memiliki alamat
bus yang terdiri dari 20 bit, maka secara otomatis penulisan fisik alamatnya yang ada 5 bit dari
Heksadesimal. (Panjaitan & Sagala, 2018). Berdasarkan latar belakang diatas akan diperlukan
penelitian tentang pengalamatan mikroprosesor 8086/8088 menggunakan operasi aritmatika.
METODE: Metode penelitian yang digunakan adalah metode manual dan eksekusi program.
Berikut metode manual dalam pembuatan Op-Code:
a. Tentukan perintah program nya yang akan di buat kode operasi. dibuat Contoh : MOV
AX,BX.
b. Pada Gambar 1 tabel set instruksi (lembar data Intel 8086/8088) kita lihat perintah
programnya. Kita ambil salah satu dari pilihan data sheet di tabel yang sejalur dengan
perintah program yang akan dibuat. Contoh program diatas menunjukkan bahwa program
tersebut menyalin data dari register BX ke AX.
c. Tuliskan kode instruksinya. Contoh: Register/Memory from/to Register yaitu 1000 10dw
mod reg r/m.
d. Variabel-variabel seperti d,w,mod dll kita ganti dengan angka biner yang cocok. Dibawah ini
pengertian dari masing–masing variabel tersebut.
i. d(direction) merupakan pernyataan arah perpindahan data, d bernilai 1 jika data
berpindah ke register, d bernilai 0 apabila data beralih dari register. contoh yang
tertera, kita bisa menginputkan 0 ataupun 1(satu). Apabila kita pilih 1, berarti data
tersebut berpindah ke register yakni AX.
ii. w(word) untuk menunjukkan operasi diatas termasuk 16 bit atau yang lain. Apabila
tergolong 16 bit maka w=1 dan jika bukan maka w=0. Mov AX, BX tergolong
word, jadi w=1 karena AX dan BX termasuk register 16 bit.
iii. mod(mode) disini merupakan lintas data. Mod: bernilai 11 karena membuktikan
operasii antar register.
iv. reg(register) yaitu menjelaskan register yang dipakai. sebab d bernilai 1/ d=1 maka
kita cari kode binernya dari register AX, yakni 000.
v. r/m(register/memory) merupakan perhitungan alamat fisik dari memori. Perintah
program diatas tidak ada tentang memori, jadi kita bebas memilih. Sebagai contoh
kia memilih r/m = 111, maka Kode binernya 100010 1111000111.
e. Setelah selesai semua, kemudian dilanjutkan ke pengkonversian biner ke heksadesimal.
Hasilnya 100010 1111000111 heksademilanya menjadi 8BC7. Jadi kode operasinya adalah
8BC7 (Ardi panjaitan & Sagala, 2018).

Sedangkan untuk eksekusi instruksi merujuk pada contoh dari ekspresi aritmatika berikut: AFD9h -
((40h+30h+2A6h)*5h) dituliskan dalam op-code seperti ini:
a. MOV AX 0040
b. MOV BX 0030
c. MOV BX 02A6
d. ADD AX BX
e. ADD AX CX
f. MOV BX 0005
g. MUL BX
h. MOV BX AX
i. MOV AX AFD9
j. SUB AX BX

Ekskusi op-code dan register flag akan menjadi seperti ini:


1. MOV AX, 0040 Instruksi MOV menulis ulang 0040H ke register AX Register AX =
0040H = 0000000001000000
2. MOV BX, 0030 Instruksi MOV menulis ulang 0030H ke register BX Register BX = 0030H
= 0000000000110000
3. MOV CX, 02A6 Instruksi MOV menulis ulang 02A6H ke register CX Register CX =
02A6H = 0000001010100110
4. ADD AX, BX Instruksi ADD menambahkan ke register AX & BX. Hasilnya ditambahkan
lagi ke register AX. AX + BX = 0000000001000000 + 0000000000110000 =
0000000001110000
0000000001000000
0000000000110000
__________________ +
0000000001110000
Register AX berubah menjadi = 0000000001110000
Flag Z = 0 Hasil penjumlahan tak 0(nol)
Flag C = 0 carry/sisa bit dari operasi
Flag A = 0 bit half carry operasi
Flag S = 0 penjumlahan positif
Flag P = 0 bit bernilai 1 = 3(bilangan ganjil)
Flag O = 0 operasi ini tak Overflow
5. ADD AX, CX Instruksi ADD menambahkan ke register AX dan CX. Hasilnya
ditambahkan lagi ke register AX. AX + CX = 0000000001000000 + 0000001010100110 =
0000001100010110
0000000001000000
0000001010100110
__________________ +
0000001100010110
Register AX = 0000001100010110
Flag Z = 0 Hasil penjumlahan tak 0(nol).
Flag C = 0 carry/sisa bit dari operasi
Flag A = bit half carry operasi
Flag S = 0 penjumlahan positif
Flag P = 0 bit bernilai 1 = 5(bilangan ganjil)
Flag O = 0 operasi ini tak Overflow
6. MOV BX, 0005 Instruksi MOV menulis ulang 0005H ke register BX 302 BRILIANT:
Jurnal Riset dan Konseptual Volume 4 Nomor 3, Agustus 2019 Register BX = 0005H =
0000000000000101
7. MUL BX Instruksi MUL mengalikan register BX dan AX. Hasilnya di muat ke register
DX-AX
BX * AX = 0000000000000101 * 0000001100010110 = 00000000000001111011011
Register DX = 0000000000000000 Register AX = 0000111101101110
Flag Z = 0 Hasil dari Penjumlahan Tidak 0.
Flag C = 1 MSB(most Significant bit) 16 bit = 1(satu)
Flag S = 0 Perkalian Positif
Flag P = 0 bit bernilai 1 = 9(bilangan ganjil)
Flag O = 0 operasi ini tak Overflow
8. MOV BX, AX Instruksi MOV mengalihkan data AX ke BX Register BX sekarang =
Register AX = 0000111101101110 = 0F6E
9. 9. MOV AX, AFD9 Instruksi MOV menulis ulang AFD9 ke register AX Isi AX =
1010111111011001
10. SUB AX, BX Instruksi SUB yaitu mengurangi register AX & BX. Hasilnya balikkan lagi
ke AX. AX– BX = 1010111111011001–0000111101101110= 1010000001101011

Rangkuman

Pengalamatan mikroprosesor adalah bagian yang tidak terpisahkan dari ranah penelitian arsitektur
dan organisasi computer. Pengalamatan ini juga membahas tentang komponen penyusun sistem
komputer antar interkoneksi serta tentang unit-unit operasional sedangkan di arsitektur komputer
akan membahas tentang atribut sistem komputer yang berterkaitan dengan seorang programmer.
Penelitian ini diangkat untuk meneliti peran operasi aritmatika menggunakan microprosessor
8086/8088. Peran sangat tidak lepas dari kata prosesor yang biasa disebut dengan otaknya
computer. Apabila suatu komponen PC biasanya memiliki fungsi sebagai pentransmisi data,dan
professornya memiliki fungsi untuk menghitung dan menentukan segala aktifitas.

Mikroprosesor menurut teknologi bisa dikumpulkan berdasarkan jumlah dari bit data,berdasarkan
kemampuan atau karakteristik mikroposesor serta struktur dan fungi dari mikroprosesor itu
sendiri.Memiliki jumlah bit data yang bisa do mulai dari 1 bit,4bit,8bit,lalu 16bit kemudian 32bit
selanjutnya 64 bit. Prosessor biasanya mempunyai alamat bus sebanyak kira-kira 20 bit, memiliki
arti bahwa bisa mencapai alamat sampai 1.048.575 lokasi. Berdasarkan Heksadesimal, angka
seperti itu dikatakan 00000 hingga dengan FFFFF merupakan alamat fisik dari sebuah
microprosessor. Jika 8086 serta 8088 memiliki alamat bus yang terdiri dari 20 bit, maka secara
otomatis penulisan fisik alamatnya yang ada 5 bit dari Heksadesimal. Berdasarkan latar belakang
diatas akan diperlukan penelitian tentang pengalamatan mikroprosesor 8086/8088 menggunakan
operasi aritmatika.

Metode penelitian yang digunakan adalah metode manual dan eksekusi program. Berikut metode
manual dalam pembuatan Op-Code: Tentukan perintah program nya yang akan di buat kode
operasi. dibuat Contoh : MOV AX,BX. Kita ambil salah satu dari pilihan data sheet di tabel yang
sejalur dengan perintah program yang akan dibuat. Tuliskan kode instruksinya. Contoh:
Register/Memory from/to Register yaitu 1000 10dw mod reg r/m. Variabel-variabel seperti
d,w,mod dll kita ganti dengan angka biner yang cocok. kemudian dilanjutkan ke pengkonversian
biner ke heksadesimal. Hasilnya 100010 1111000111 heksademilanya menjadi 8BC7. Jadi kode
operasinya adalah 8BC7 .

Hasil dari metode diatas yaitu kita dapat menemukan proses atau cara untuk eksekusi instruksi.
Kita juga bisa melihat contoh ekspresi aritmatika yang kemudian di tuliskan dalam bentuk Op
Code. Pada bagian ini diterangkan dahulu pengertian Op Code. Op Code diartikan menjelaskan
atau mendeskripsikan jenis operasi yang akan dikerjakan. . Kode Operasi tersebut berbentuk Biner.
Pada suatu Bidang, Op Code merupakan suatu bagian dari instruksi bahasa mesin dan menentukan
jenis operasi yang akan dilaksanakan. Selain itu, intruksi tersebut menentukan data yang akan
memproses, berupa Operand.

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 hasil program 3.2.4 ,3.4 ,3.5 dimasukkan ke dalam laporan praktikum
5. Kerjakan tugas akhir berdasarkan materi yang diberikan. Tambahkan keterangan pada
perintah-perintah yang diberikan pada mikroprosesor. Kerjakan masing-masing

BAB IV
HASIL DAN ANALISA
4.1 Hasil Pengujian
Program 1 Penambahan

Program 2 Pengurangan
Program 3 Perkalian

Program 4 Pembagian
4.2 Analisa Pembahasan
Setelah selesai membahas dasar – dasar dalam membuat perintah dengan Bahasa assembler dalam
emu8086, selanjutnya kita akan melakukan praktikum tentang operasi aritmatika dalam
mikroprosesor di modul kedua ini. Aritmatika adalah tentang penjumlahan, pengurangan,
perkalian, dan pembagian. Dalam program yang pertama akan di kerjakan yaitu tentang
penjumlahan. Penjumlahan dalam mikroprosesor ada tiga perintah, dan dalam program ini ketiga
perintah tersebut akan di masukkan sekaligus yang bekerja secara berurutan. Program ini, hanya
kita lihat dalam registernya saja karena kita tidak menampilkan nya dalam layar hitam, sehingga
untuk melihat prosesnya dengan menekan single run hingga sampai ke program terakhir. Program
pertama ini dimulai dari .mode small, .code, dan org 100h. Kemudian masuk ke dalam proses,
dimana pertama melakukan perintah Add AH, AL yang berarti AH menjadi tujuan dan AL akan di
tambahkan ke AH menjadi AH = AH + AL, dimana AH sendiri memiliki nilai 15h, itu dilihat dari
perintah sebelumnya mov AH, 15h dan AL bernilai 4 yang juga berasal dari perintah sebelumnya
mov AL, 4h. Dari register setelah kita mengsingle run hingga perintah mov AX, 1234h, perintah
Add AH, AL menghasilkan nilai 19h. Kemudian beralih ke perintah Add kedua yaitu Add AX, BX,
yang berarti AX = AX + BX. Dengan nilai masing – masing AX dan BX dengan perintah nya
adalah mov AX, 1234h bernilai 1234h, dan mov BX, 0F221h bernilai 0F221h, sehingga bila kedua
angka tesebut dijumlahkan dilihat dari register seteleh mengsingle run hingga mov AX, 1234h
yang kedua bernilai 0455h, sebenarnya nilai ini salah di bagian 0 karena seharusnya bernilai 16
tetapi karena nilai tersebut adalah 17 bit sementara batas dari penjumlahan ini adalah 16 bit
sehingga sisa 1 tersebut di pindahkan ke carry flag. Kemudian masuk ke perintah gabungan dari
ADC dan ADD, dimana yang dikerjakan pertama adalah perintah Add yaitu Add CX, DX yang
berarti CX = CX = DX karena CX merupakan tujuan, keduanya bernilai mov CX, 5678h = 5678h
dan mov DX, 0DEF0h = 0DEF0h sehingga bila dijumlahkan dan terlihat juga dalam register
menjadi 3568h pada CX. Tentunya nilai CX ini memiliki nilai 1 untuk carry flag karena dari hasil
penjumlahan tersebut melebihi dari 16 bit sehingga 1 bit nya disimpan di carry flag, yang mana
dengan penjumlahan dengan ADC, carry flag akan di pakai untuk menambahkan nilai tujuan.
Dimana setelah ADD CX, DX, kemudian menjumlahkan ADC AX, BX yang berarti AX = AX +
BX + CF, AX menjadi tujuan dan BX serta CF akan dijumlahkan dengan AX. Dengan nilai dari
keduanya yaitu mov AX, 1234 h = 1234h dan mov BX, 9ABCh = 9ABCh, serta CF bernilai 1 yang
merupakan kelebihan bit dari perintah ADD sebelumnya. Menjadikan nilai dari AX dalam register
adalah ACF1, dimana satu tersebut berasal dari carry flag, sehingga dalam carry flag tidak lagi
memiliki kelebihan angka. Setelah kedua perintah ADD dan ADC kemudian masuk ke perintah
ketiga yaitu INC yang hanya akan menambahkan nilai tujuan dengan 1, dalam program ini di
masukkan INC AL, yang mana AL akan di tambahkan dengan 1 menjadi AL = AL + 1. AL nya
sendiri memiliki nilai dari hasil penjumlahan ADC sebelumnya yaitu ACF1 sehingga nilai AL
menjadi ACF2 dalam register setelah mengsingle run program hingga akhir karena hanya
ditambahkan 1 dengan perintah INC. Program kedua membuat operasi pengurangan dengan ketiga
operasi nya yaitu SUB, SBB, dan DEC. sama saja fungsi ketiganya dengan ketiga operasi
penjumlahan diatas, namun operasi ini untuk pengurangan. Dalam program kedua proses dimulai
dengan sub AH, AL yang mana akan mengurangkan AH dengan AL karena AH adalah tujuan,
menjadi AH = AH – AL. dengan nilai keduanya adalah mov AH, 15h = 15h dan mov AL, 4h = 4h
menjadikan hasil dari pengurangan keduanya yang terlihat dalam register adalah 11h pada AH.
Begitu pula yang terjadi pada perintah sub kedua yaitu AX, BX namun hasil dari AX = AX – BX
ini memiliki kelebihan yang akan di simpan ke carry flag, karena nilai keduanya mov AX, 1234h =
1234h dan mov BX, F221h = F221h dan hasilnya adalah 2013h pada AX dan CF berisi 1.
Diteruskan ke perintah selanjutnya gabungan dari SUB dan SBB. Sub ketiga sub CX, DX pun
menghasilkan kelebihan bit yang kemudian di simpan di carry flag. Yang kemudian carry flag ini
dipakai oleh SBB yang akan mengurangi tujuan dengan carry flag dan nilai yang lain, dilihat dari
perintah sbb AX, BX yang mengurangi tujuan AX dengan BX dan CF atau dalam rumus menjadi
AX = AX - BX - CF. Dengan nilai ketiganya mov AX, 1234h = 1234h dan mov BX, 0001h =
0001h, serta carry flag bernilai 1 dari kelebihan hasil perintah SUB sebelumnya. Menjadikan hasil
dari sbb ini adalah 1232h dalam register AX. Setelah melalui SUB dan SBB kemudian masuk ke
perintah ketiga yaitu DEC yang akan mengurangkan tujuan hanya dengan 1. Dalam program yang
menjadi tujuan adalah AL, dilihat dari DEC AL, yang mana nilai AL sendiri berasal dari hasil
perintah SBB sebelumnya yaitu 1232h. menjadikan hasil dari pengurangan DEC AL adalah 1231
dalam register karena hanya dikurangi 1 saja. Kemudian beralih ke program perkalian dan
pembagian, masing – masing memakai perintah yang berbeda. MUL untuk perkalian dan DIV
untuk pembagian. Perkalian mengenal high dan low, high untuk 4 angka dari kanan dan low untuk
4 angka dari kiri. Sementara pembagian mengenal hasil dan sisa, dimana hasil pembagian
ditunjukkan dalam hasil dan apabila bersisa atau ada angka di belakang koma maka angka di taruh
dalam sisa. Pada program perkalian dan pembagian ini setelah memasukkan keseluruhan perintah,
pada saat di single run saat sampai di ‘jmp proses’ apabila kita mensingle run lagi maka perintah
akan lompat ke bagian proses karena itu merupakan kegunaan dari Jmp. Untuk perintah di bawah
‘Jmp proses’, seperti A DW 01EFH, B DW 02EFH, HSLLO DW ?, HSLLI DW ?, dan A DW
01EFh, B DW 2, Hsl DW ?, Sisa DW ? merupakan variable yang akan di pakai. A dan B menjadi
variable tetap karena diberikan nilai, pada perkalian A bernilai 1EFH dan B 2EFH dan pembagian
A = 1EFH dan B = 2. Sementara HSLLO dan HSLLI pada perkaliaan dan Hsl dan sisa pada
pembagian sebagai variable bebasnya karena nilai di dalam nya akan di isi oleh hasil perkalian
ataupun pembagian dari A dan B. pada proses perkalian awalnya nilai A di taruh ke AX dengan
mov AX, A kemudian langsung dikalikan dengan B dengan MUL B. hasilnya akan dibagi menjadi
dua bagian dengan tempat penyimpan yang berbeda mov HSLLO, AX untuk low pada AX dan
mov HSLLI, DX untuk high pada DX. Terlihat hasil perkalian A dan B(1EFH X 2EFH) pada saat
mensingle run hingga akhir, hasil dari high yang ada pada DX adalah 0005 dan low pada AX
adalah ACF1. Untuk proses pembagian, awalnya dengan menjadikan DX menjadi 0 terlebih dahulu
dengan SUB DX, DX yang berarti DX = DX – DX. Mov AX, A nilai dari A di masukkan ke AX
kemudian dibagi langsung dengan B dengan DIV B hasilnya ditaruh dalam AX untuk hasil dengan
mov hsl, AX dan sisa dalam DX dengan mov sisa, DX. Yang mana hasil pembagian A dengan B
( 1EFH : 2H ) dilihat dari register AX yaitu F7 untuk hasil dan pada DX yaitu 0001 untuk sisa.
Pada angka diperkalian dan pembagian dibelakang nya terdapat huruf H untuk menandakan bahwa
angka tersebut adalah Hexadesimal, untuk menandakan decimal sendiri kita dapat memakai huruf
D dibelakang angka tersebut. Untuk program kreasi, saya bersama kelompok saya berdiskusi
mengejakantugas tersebut dan didapat program seperti screen shot yang dilampirkan. Semua
program memakai cara program ketiga pada modul 1 untuk menginput dan program operasi
aritmatika. Pada program penambahan dan pengurangan kami membuat angka yang dapat di input
hanya 2 untuk A dan B nya. Sehingga untuk dapat menginput 2 angka tersebut dengan membuat
masing masing perintah dalam 1 kelompok tersebut semisal A. Jadi pada A dimasukkan mov
ah,01h, int 21h, mov bl,al, sub bl,30h untuk dapat menginput angka pertama, dan mov ah,01h, int
21h, mov bh,al, sub bh,30h untuk dapat menginput angka kedua, kemudian untuk B dilakukan hal
yang sama seperti pada A. Namun keduanya berbeda pada output nya, agar dapat menjadikan nya
penjumlahan maka dipakai add untuk operator dan pengurangan memakai sub. Untuk diperhatikan
pada pada program penjumlahan kami hanya dapat menjumlahkan masing – masing, dan tidak
dapat lebih dari 10 maksudnya semisal ada 35 + 56 yang seharusnya 91 namun yang keluar 8/
karena penjumlahan 5 + 6 = 11 sehingga menjadi error. Begitu juga pada pengurangan tidak dapat
mengurangkan angka pertama angka yang lebih kecil dengan angka kedua, seperti 84 – 46 yang
seharusnya 38 tetapi menjadi 4/ pada tampilannya. Dan untuk perkalian dan pembagian di program
kreasi tetap menggunakan mul untuk perkalian dan div untuk pembagiannya dimana ditambahkan
program input juga agar dapat memasukkan angka dan mendapatkan hasil dari perkalian atau
pembagian angka tersebut.
4.3 Tugas Akhir

Program Penambahan

Program Pengurangan
Program Pembagian

Program Perkalian
BAB V
PENUTUP

5.1 Kesimpulan
o Kita dapat mengetahui proses dan perintah dari operasi aritmatika di dalam
mikroprosesor
o Kita dapat mengerti dari proses menjalankan operasi
penambahan,pengurangan,perkalian dan juga pembagian.

5.2 Saran
o Saya pribadi berharap agar penjelasan di dalam praktikum nya dan pemberian tugas
akhir nya seimbang,karena saya pribadi atau mungkin teman-teman yang lainnya
belum dapat memahami sepenuhnya.
Daftar Pustaka :Sumber : file:///C:/Users/user/Downloads/342-1271-2-PB.pdf

MODUL III

Operasi Logika dan Manipulasi Bit

Maulana Rakha Rasendriya (201811136) ; Aulia Nurul Huda Nasution (201811103)

S1 Teknik Elektro, Institut Teknologi – PLN

rakha15412@gmail.com

BAB I

Pendahuluan

1.1 Tujuan :

1. Memahami perintah dan proses operasi logika pada mikroprosesor

2. Dapat melakukan operasi logika NOT, AND, OR dan XOR pada mikroprosesor

3. Memahami perintah dan proses operasi manipulasi bit pada mikroprosesor


4. Dapat melakukan manipulasi bit geser kiri dan geser kanan

1.2 Alat dan Bahan:

1. Komputer

2. Aplikasi Emu8086

BAB II
LANDASAN TEORI

2.1 Teori Modul :

Operasi Logika

Gerbang NOT

Operator NOT akan menginvers suatu nilai seperti yang terlihat pada table dibwah ini.

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 :3F

Biner : 0011 1111

_______________________ NOT

Hexadesimal :C0

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

Gerbang AND

Operator AND akan menghasilkan nilai nol bila salah satu operandnya bernilai nol. Dan
hanya akan bernilai satu bila kedua operandnya bernilai satu.

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

Gerbang OR

Operator logik OR akan menghasilkan nilai nol bila kedua operannya bernilai nol dan satu bila
salah satunya bernilai satu.
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

Gerbang XOR
Operator XOR akan menghasilkan nol untuk dua nilai yang sama nilainya dan satu untuk yang
berbeda.

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

Manipulasi Bit

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)

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

Operasi Logika

• Operasi manipulasi bit dan logika merupakan salah satu operasi yang paling sederhana
dalam bahasa mesin.

• Operasi bit dan logika pada umumnya dipergunakan untuk menyederhanakan akses ke port
– port maupun register – register.

• Misalnya untuk menghidupkan sebuah pin pada mikroprosesor maka cukup menghidupkan
bit yang bersangkutan tanpa perlu mengubah keseluruhan isi register port tersebut.

• Adapun operasi bit dan logika yang ada dalam bahasa mesin antara lain : NOT, AND, OR,
XOR, TEST, SHR, SHL.
NOT

• NOT dipergunakan untuk menghasilkan inverting dari bit-bit masukannya.

• Sintaknya dalam bahasa assembly yaitu :

NOT variabel

• Hasil dari operasi NOT akan disimpan di dalam register variabelnya sendiri.

AND

• AND merupakan operasi logika di mana keluaran akan bernilai 1 jika kedua masukannya
bernilai 1 juga

• Sintaksnya dalam bahasa assembly yaitu :

AND Tujuan, Sumber

• Data di register Tujuan akan di – AND dengan data pada register Sumber, untuk
selanjutnya hasilnya akan disimpan di Tujuan

OR

• OR merupakan operasi logika di mana keluaran akan bernilai 1 jika salah satu masukan
bernilai 1 juga.

• Sintaksnya dalam bahasa mesin yaitu :

OR Tujuan, Sumber

• Data di register Tujuan akan di – OR dengan data pada register Sumber, untuk selanjutnya
hasilnya akan disimpan di Tujuan

XOR
• XOR merupakan operasi logika di mana keluaran akan bernilai 1 jika kedua masukannya
berbeda nilainya dan bernilai 0 jika kedua masukannya sama nilainya.

• Sintaksnya dalam bahasa mesin yaitu :

XOR Tujuan, Sumber

• Data di register Tujuan akan di – OR dengan data pada register Sumber, untuk selanjutnya
hasilnya akan disimpan di Tujuan

TEST

• TEST merupakan operasi untuk mengetes suatu data, apakah sama atau tidak. Sama dalam
hal ini bisa diartikan memiliki pola bit yang sama.

• TEST tidak mengubah nilai pada operan-operannya, tapi mengubah nilai pada register flag.

• Bit-bit flag yang berubah yaitu : CF, OF, PF, ZF, SF, dan AF.

• Adapun sintaksnya sebagai berikut :

TEST Operan1, Operan2

PERGESERAN BIT

• Operasi penggeseran bit dalam bahasa mesin yaitu Shift Right(SHR), Shift Left(SHL),
Rotate Right(RR), dan Rotate Left(RL).

• Shift Right merupakan operasi bit di mana bit-bit data akan digeser ke kanan sebanyak yang
telah ditentukan pada Operan2.

• Bit-bit yang telah digeser akan diisi dengan nol.

• Shift Right merupakan cara lain untuk melakukan pembagian berbasis 2.

• Sedangkan SHL merupakan operasi kebalikan dari SHR. Shift Left merupakan cara lain
untuk melakukan perkalian berbasis 2
CONTOH SHL DAN SHR

.Model Small

.Code

ORG 100h

Proses:

MOV AX, 36h

MOV CL, 3

SHR AX, CL

MOV AX, 36h

MOV CL, 3

SHL AX, CL

INT 20h

End Proses

• Rotate Left (ROL) merupakan operasi bit di mana bit-bit datanya akan diputar ke kiri
sebanyak Operan2 kali.

• Operasi ini hampir sama dengan SHL, namun ROL tetap mempertahankan bit asli datanya.

• Rotate Right (ROR) merupakan operasi bit di mana bit-bit datanya akan diputar ke kanan
sebanyak Operan2 kali.

• Operasi ini hampir sama dengan SHR, namun ROR tetap mempertahankan bit asli datanya.

CONTOH ROL & ROR


.Model Small

.Code

ORG 100h

Proses:

MOV AX, 36h

MOV CL, 3

ROR AX, CL

MOV AX, 36h

MOV CL, 3

ROL AX, CL

INT 20h

End Proses

Rangkuman:

Operasi manipulasi bit dan logika merupakan salah satu operasi yang paling sederhana dalam
bahasa mesin. Operasi bit dan logika pada umumnya dipergunakan untuk menyederhanakan akses
ke port – port maupun register – register. Misalnya untuk menghidupkan sebuah pin pada
mikroprosesor maka cukup menghidupkan bit yang bersangkutan tanpa perlu mengubah
keseluruhan isi register port tersebut. Adapun operasi bit dan logika yang ada dalam bahasa mesin
antara lain : NOT, AND, OR, XOR, TEST, SHR, SHL. NOT digunakan untuk menghasilkan
inverting dari bit-bit masukannya,dan hasil dari operasi NOT akan disimpan di dalam register
variabelnya sendiri. AND merupakan operasi logika dimana keluaran akan bernilai 1 jika kedua
masukannya bernilai satu juga. OR merupakan operasi logika dimana keluaran akan bernilai 1 jika
salah satu masukan bernilai 1 juga. XOR merupakan operasi logika dimana keluaran akan bernilai
1 jika kedua masukannya berbeda nilainya dan bernilai 0 jika kedua masukannya sama nilainya.
TEST merupakan operasi untuk mengetes suatu data,apakah data tersebut sama atau tidak. Sama
dalam hal ini bisa diartikan memiliki pola bit yang sama. TEST tidak mengubah nilai pada operan-
operannya,tapi mengubah nilai pada register flag. Operasi penggeseran bit dalam bahasa mesin
yaitu Shift Right(SHR), Shift Left(SHL), Rotate Right(RR), dan Rotate Left(RL). Shift Right
merupakan operasi bit di mana bit-bit data akan digeser ke kanan sebanyak yang telah ditentukan
pada Operan2. Sedangkan SHL merupakan operasi kebalikan dari SHR. Shift Left merupakan cara
lain untuk melakukan perkalian berbasis 2. Rotate Left (ROL) merupakan operasi bit di mana bit-
bit datanya akan diputar ke kiri sebanyak Operan2 kali. Operasi ini hampir sama dengan SHL,
namun ROL tetap mempertahankan bit asli datanya. Operasi ini hampir sama dengan SHR, namun
ROR tetap mempertahankan bit asli datanya. Rotate Right (ROR) merupakan operasi bit di mana
bit-bit datanya akan diputar ke kanan sebanyak Operan2 kali.

BAB III

METODE PRAKTIKUM

3. 1 Langkah Percobaan

1. Nyalakan komputer, kemudian Buka aplikasi dan jalankan Aplikasi emulator 8086

2. Kemudian tulis dan jalankan program yang sudah dibuat pada aplikasi emulator

3. Kemudian screen shoot hasil program

4. Hasil screen shoot pada Program 1 - 6 dimasukkan dalam laporan praktikum


5. Kerjakan tugas akhir berdasarkan materi yang diberikan. Tambahkan keterangan pada
perintah-perintah yang diberikan pada mikroprosesor. Kerjakan masing-masing.

6. Hasil tugas akhir discreen shot dan dilampirkan pada laporan praktikum.

BAB IV

HASIL DAN ANALISA

4.1 Hasil pengujian

Operasi NOT
Operasi AND

Operasi OR
Operasi XOR

Operasi SHL
Operasi SHR

4.2 Analisa Pembahasan

Pada praktikum mikroprosesor kali ini,kita akan membahas mengenai modul yang berjudul Operasi
Logika dan Manipulasi Bit. Operasi Logika adalah operator kondisional dimana kedua variabel
dibandingkan,jika salah satu variabel bernilai benar,maka output kondisional tersebut bernilai
true,jika nilai kedua dari variabel bernilai salah,maka output dari kondisional tersebut bernilai false.
Kalau manipulasi bit yaitu Tindakan memanipulasi bit atau potongan data lain yang lebih pendek
dari sebuah kata secara algoritme. Lalu BIT itu sendiri adalah satuan unit data terkecil dalam
kompulasi digital yang pada dasarnya terdiri dari satu digit biner (bisa berupa nilai 0 atau 1).
Praktikum kali ini,kita diminta untuk membuat program atau coding aritmatika. Dimana
kita hanya sampai pada tampilan emulator 8086,alat untuk membuat program atau coding pada
praktikum kali ini kita memerlukan aplikasi yang bernama emulator 8086. Ada beberapa operasi
yang terdapat di modul III ini,yaitu antara lain ada operasi NOT,lalu ada operasi AND,selanjutnya
yaitu operasi OR,yang ke empat ialah operasi XOR,kemudian program operasi SHL atau yang
biasa disebut Shift Left dan yang terakhir yaitu program operasi SHR atau yang biasa disebut Shift
Right.

Operasi AND akan menghasilkan nilai nol apabila salah satu operand nya bernilai nol dan
akan bernilai satu apabila kedua operand nya bernilai satu. Operasi NOT akan menginvers suatu
nilai,operasi OR akan menghasilkan nilai NOL bila kedua operand nya bernilai NOL dan akan
menghasilkan satu apabila salah satunya bernilai satu. Operasi XOR pun akan menghasilkan nilai
nol untuk dua nilai yang sama nilainya dan akan menghasilkan angka satu jika nilai nya berbeda.
Selanjut nya operasi SHL akan menggeser operand satu ke kiri sebanyak operand operand secara
per bit. Lalu,bit kosong yang sudah tergeser disebelah kanan akan diberi nilai nol. Operand wajib
digunakan register CL bila ada pergeseran yang dilakukan lebih dari satu kali. Yang terakhir adalah
operasi SHR atau shift right,operasi shift right akan menggeser operand sat uke sebelah kanan
sebanyak operand operand per bit dan menambahkan nilai NOL pada bit yang geser seperti pada
operasi SHL atau shift left.

Tujuan dari praktikum kali ini ialah yang pertama kita mampu memahami perintah dan
proses operasi logika pada mikroprosesor. Yang kedua dapat melakukan operasi logika
NOT,AND,OR dan XOR pada mikroprosesor. Selanjutnya,kia mampu memahami perintah dan
proses operasi manipulasi bit pada mikroprosesor. Yang terakhir yaitu dapat melakukan manipulasi
bit geser kiri dan geser kanan.

Agar memudahkan percobaan dalam operasi bilangan,sebaiknya kita harus lebih dahulu tau
cara untuk mengenal angka berapa yang ditunjukan pada bilangan biner yaitu 0000 = 0, 0001=1,
0010=2, 0011=2, 0100=4, 0101=5, 0110=6, 0111=7, 1000=8, 1001=9, 1010=10, atau A, 1011=11
atau B, 1100=12 atau C, 1101=13 atau D, 1110=14 atau E, 1111=15 atau F. Yang dimana angka ini
telah ditetapkan dari acuan 24 2² 21 20.

Baris pertama terdapat semua program yang dimana awalannya sama saja,yaitu kita harus
menginisialisasi header,yaitu terdapat kata (.MODEL SMALL) diangkat sebagai header. Dimana
secara universal header dapat diartikan sebagai merupakan file yang dimana file tersebut berisi
deklarasi variabel,function,tipe data,dll. Pada mikroprosesor terdapat beberapa model yaitu ada
model small,tiny,medium compact,huge dan large.

Kemudian di program pertama ini menggunakan model small yang dimana pengertian
model small tersebut adalah jika data dan code yang digunakan oleh program kurang dari satu
segment atau 65kb. Selanjutnya,kita ke baris ke dua,pada baris ke dua terdapat (.CODE) yang
dimana merupakan assembler directives untuk memberi tahu pada assembler bahwa bagian
dibawah ini adalah instruksi program. ‘.code’ ini mempunyai fungsi untuk menginisialisasi
program-program setelahnya atau program dibawahnya.

Dibaris ketiga ada (ORG 100h). ORG adalah assembler directivies untuk menentukan
address dari program yang terdapat dalam memori. Kemudian,dapat disimpulkan ‘org 100h’ di
program yang pertama ini adalah address dari program atau awalan dari suatu program,sehingga
terbaca pada program ini awal program dimulai dari ORG 100h. Pengertian ORG adalah assembler
directivies untuk menentukan address dari program yang terdapat dalam memori.
4.3 Tugas Akhir
BAB V
PENUTUP

5.1 Kesimpulan

o Kita dapat memahami perintah dan proses operasi logika pada mikroprosesor
o Kita dapat melakukan operasi logika NOT, AND, OR dan XOR pada mikroprosesor
o Kita dapat memahami perintah dan proses operasi manipulasi bit pada mikroprosesor

5.2 Saran

o Saya pribadi berharap agar penjelasan di dalam praktikum nya dan pemberian tugas akhir
nya seimbang,karena saya pribadi atau mungkin teman-teman yang lainnya belum dapat
memahami sepenuhnya

Daftar Pustaka:

http://pdf.nsc.ac.id/16_02_16-Operasi%20Bit%20dan%20Logika-20150521.ppt#:~:text=Operasi
%20manipulasi%20bit%20dan%20logika,%E2%80%93%20port%20maupun%20register
%20%E2%80%93%20register.
MODUL IV

Percabangan dan Perulangan pada Mikroprosesor

Maulana Rakha Rasendriya (201811136) ; Aulia Nurul Huda Nasution (201811103)

S1 Teknik Elektro, Institut Teknologi – PLN

rakha15412@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

2.1.1 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
berbeda- beda. 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.

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

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

2.1.4 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
b nilainya sama dengan operand2.
e - CF akan 1, jika operand1 lebih kecil dari operand2 pada operasi bilangan tidak
r bertanda. Perlu anda ingat bahwa CMP tidak dapat membandingkan antar 2
t lokasi memory.
a
n
d
a
.
-Z
F

a
k
a
n

1
,
j
i
k
a

o
p
e
r
a
n
d
1
2.1.5 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 Equal> Lompat, jika operand1 <= Operand2 untuk bilangan tidak bertanda
JLE <Jump If Less or Equal> Lompat, jika Operand1 <= Operand2 untuk bilangan bertanda
JAE <Jump If Above or Equal> Lompat, jika Operand1 >= Operand2 untuk bilangan tidak bertanda
JGE <Jump If Greater or Equal> Lompat, jika Operand1 >= Operand2 untuk bilangan 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.

2.1.6 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 :
2.1.7 Kapan / kondisi apa yang menyebabkan perulangan itu akan berakhir
2.1.8 Berapa banyak perulangan yang diinginkan
2.1.9 Register apa saja yang terpengaruh pada saat perulangan dilakukan
2.1.7 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 Ulan


2.2 Teori Penunjang

Register program counter (PC) adalah register 16 bit ynag digunakan sebagai penghitung program,
yang berisi instruksi berikutnya akan dilaksanakan oleh CPU. Jika tegangan pada CPU kaki
RESET turun menjadi 0 dan kemudian naik menjadi 1, PC akan menjadi 0000H. Pelaksanaan
program kemudian akan dimulia dari address 0000H menurut pulsa clock yang dihasilkan oleh
sistem hardware. Setiap kali CPU selesai mengambil 1 byte untuk tiap – tiap instruksi dari
memory, secara otomatis PC akan ditambah dengan 1.

Jump bersyarat adalah jenis instruksi Jump yang bekerja melakukan lompatan atau
kontinyu/tidak melompat berdasarkan syarat yang diberikan. Mnemonik untuk lompatan bersyarat
ada tiga yaitu :

 Lompatan absolut bersyarat, Lompatan absolut bersyarat adalah lompatan yang langsung
menunjuk alamat sasaran dengan data alamat 16 bit.
 Lompatan relative barsyarat, Lompatan Relatif bersyarat adalah lompatan yang
penunjukan alamatnya bernilai relatif terhadap alamat posisi saat melompat.
 Lompatan Relatif Khusus terhadap register B, Lompatan Relatif Khusus terhadap
register B adalah lompatan yang penunjukan alamatnya bernilai relatif terhadap alamat
posisi saat melompat yaitu dengan perintah JRNZ XXXX, jika hasil decrement register B
tidak sama dengan 0 maka ke XXXX.

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

Setelah suatu program dilaksanakan sampai alamat tertentu, PC dapat diubah ke alamat
yang lain bilamana pemrogram tidak menghendaki program dilaksanakan pada alamat berikutnya.
Misalnya karena tidak adanya memori setelah alamat tersebut ataupun karena program tidak
disimpan pada daerah tersebut. Program kemudian meloncat ke alamat yang lain dan melanjutkan
pelaksanaan program. Pada bahasa rakitan berikut ini berati PC akan diubah ke 1828H setelah
instruksi tersebut dilaksanakan, pelaksanaan program selanjutnya dilaksanakan dari alamat 1828H.
LD PC, 1828H (instruksi ini tidak berlaku pada bahasa rakitan Z80). Sebenarnya dalam bahasa
rakitan jump (JP) digunakan untuk menyatakan perubahan dalam urutan pelaksanaan program.
Penghitung Program (PC) adalah register 16 bit yang penting dalam CPU. Jika tegangan
pada CPU kaki Reset (pin 26) turun menjadi nol dan kemudian naik menjadi satu (1) dengan
menekan tombol RS, PC akan menjadi 0000H. Pelaksanaan program kemudian akan dimulai dari
alamat 0000H menurut pulsa clock yang dihasilkan oleh sistem hardware. Setiap kali CPU selesai
mengambil satu byte untuk tiap-tiap instruksi dari memori secara otomatis PC akan ditambah
dengan 1. Rangkaian kontrol dalam CPU menentukan berapa byte yang tercakup dalam instruksi
tersebut setelah CPU mengambil byte pertama instruksi itu. Instruksi hanya akan dilaksanakan bila
PC telah ditambah dengan jumlah byte pada instruksi tersebut. Biasanya program diambil dari
memori dengan instruksi untuk pelaksanaan, dimulai dari alamat memori terendah.
Salah satu keunggulan komputer yang paling penting adalah bahwa komputer tersebut dapat
mengulangi langkah-langkah yang diperlukan dalam menyelesaikan suatu tugas sebanyak mungkin
sampai tugas yang bersangkutan selesai dilaksanakan. Hal ini didapat dengan mempergunakan
program loop. Loop merupakan suatu alat yang penting dalam merancang program.
Program loop dasar harus mencakup hal-hal dibawah ini:
 Suatu preset loop counter (penghitung loop) dengan jumlah loop yang harus dilakukan.
Biasanya, suatu register dalam CPU dapat dipakai sebagai penghitung loop. Tentu saja
memori dapat juga dipakai penghitung loop.
 Penghitung loop dikurang dengan 1 setiap kali satu putaran loop selesai dilakukan. Setiap
selesai satu putaran, nilai penghitung loop harus diperiksa. Jika penghitung tidak sama nol,
loop diulangi sampai penghitung loop sama dengan nol.

Rangkuman :
Register program counter (PC) adalah register 16 bit ynag digunakan sebagai penghitung program,
yang berisi instruksi berikutnya akan dilaksanakan oleh CPU. Jika tegangan pada CPU kaki
RESET turun menjadi 0 dan kemudian naik menjadi 1, PC akan menjadi 0000H. Pelaksanaan
program kemudian akan dimulia dari address 0000H menurut pulsa clock yang dihasilkan oleh
sistem hardware. Setiap kali CPU selesai mengambil 1 byte untuk tiap – tiap instruksi dari
memory, secara otomatis PC akan ditambah dengan 1. Penghitung Program (PC) adalah register 16
bit yang penting dalam CPU. Jika tegangan pada CPU kaki Reset (pin 26) turun menjadi nol dan
kemudian naik menjadi satu (1) dengan menekan tombol RS, PC akan menjadi 0000H.
Pelaksanaan program kemudian akan dimulai dari alamat 0000H menurut pulsa clock yang
dihasilkan oleh sistem hardware. Setiap kali CPU selesai mengambil satu byte untuk tiap-tiap
instruksi dari memori secara otomatis PC akan ditambah dengan 1. Rangkaian kontrol dalam CPU
menentukan berapa byte yang tercakup dalam instruksi tersebut setelah CPU mengambil byte
pertama instruksi itu. Instruksi hanya akan dilaksanakan bila PC telah ditambah dengan jumlah
byte pada instruksi tersebut. Biasanya program diambil dari memori dengan instruksi untuk
pelaksanaan, dimulai dari alamat memori terendah.
Program loop dasar harus mencakup hal-hal dibawah ini:
 Suatu preset loop counter (penghitung loop) dengan jumlah loop yang harus dilakukan.
Biasanya, suatu register dalam CPU dapat dipakai sebagai penghitung loop. Tentu saja
memori dapat juga dipakai penghitung loop.
 Penghitung loop dikurang dengan 1 setiap kali satu putaran loop selesai dilakukan. Setiap
selesai satu putaran, nilai penghitung loop harus diperiksa. Jika penghitung tidak sama nol,
loop diulangi sampai penghitung loop sama dengan nol.
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. 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

Program 1. Mendemokan perintah percabangan

Program 2. Mendemokan Perintah Perulangan


4.2 Analisa Pembahasan

Pada Praktikum kalo ini di laksanakan dengan online dimana dimana para praktikan akan
mempraktikumkan atau melakukan percobaan pada Modul IV dengan judul Percabangan dan
Perulangan pada Mikroprosesor. Dimana Modul ini mempunyai tujuan yaitu ,Memahami perintah
dan proses operasi percabangan pada mikroprosesor, Dapat melakukan operasi percabangan JMP,
JE, JNE, JA, JB, Memahami perintah dan proses operasi perulangan pada mikroprosesor, Dapat
melakukan operasi perulangan LOOP. Adapun perlengkapan yang dibuthkan yaitu Komputer dan
Aplikasi Emu8086.

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 dan 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. Lalu
ada pula perintah loop, yang dimana adalah mirip seperti perintah JMP, hanya saja perintah LOOP
adalah lompatan yang memerhatikan nilai register CX. Setelah suatu program dilaksanakan sampai
alamat tertentu, PC dapat diubah ke alamat yang lain bilamana pemrogram tidak menghendaki
program dilaksanakan pada alamat berikutnya. Misalnya karena tidak adanya memori setelah
alamat tersebut ataupun karena program tidak disimpan pada daerah tersebut.

Register program counter (PC) adalah register 16 bit ynag digunakan sebagai penghitung
program, yang berisi instruksi berikutnya akan dilaksanakan oleh CPU. Jump bersyarat adalah jenis
instruksi Jump yang bekerja melakukan lompatan atau kontinyu/tidak melompat berdasarkan syarat
yang diberikan. Mnemonik untuk lompatan bersyarat ada tiga yaitu : Lompatan absolut bersyarat,
Lompatan relative barsyarat dan Lompatan Relatif Khusus terhadap register B. Program loop
merupakan suatu program yang berisi pengulangan langkah-langkah yang diperlukan dalam
menyelesaikan suatu tugas sebanyak mungkin sampai tugas tersebut slesai dilaksanakan.
Percabangan pada mikroprosesor menjadi bagian yang sangat penting karena dapat
menyerdehanakan program layer gelap atau black screen dari mikroprosesor dan menambah
fleksibilitas atau kegunaan dari mikroprosesor. Perintah ini tidak menyeleksi keadaan apapun
untuk melakukan suatu lompatan. Setiap kita membaca atau step run, maka perintah dari JMP ini
akan lompat ke data berikutnya tanpa membaca data yang lainnya. Perintah JMP ini di kategorikan
atau diklasifikasikan sebagai unconditional branch. Lalu ada perintah CMP, dimana perintah ini
hanya mempengaruhi flag register. Perulangan pada mikroprosesor sangat diperlukan dan
menjadikan bagian terpenting karena perulangan akan meminimalisir proses penulisan program
dan meminimalisir pemakaian memori yang terlalu berlebih atau banyak dalam menulis program.
Lalu ada pula perintah loop, yang dimana adalah mirip seperti perintah JMP, hanya saja perintah
LOOP adalah lompatan yang memerhatikan nilai register CX. Pada proses perulangan dengan
perintah LOOP, register CX memegang peranan yang khusus dimana register ini dijadikan sebagai
Counter/penghitung terhadap banyaknya perulangan atau looping yang boleh terjadi pada
programnya. Setiap penemuan perintah LOOP, maka register CX akan dikurangi dengan satu (1)
terlebih dahulu, kemudian akan dilihat apakah register CX sudah mencapai 0 (nol). Proses looping
akan selesai bila nilai pada register CX mencapai 0 (nol).
4.3 Tugas Akhir
BAB V

PENUTUP

5.1 Kesimpulan

o Kita dapat memahami perintah dan proses operasi percabangan pada mikroprosesor
o Kita dapat melakukan operasi percabangan JMP, JE, JNE, JA, JB
o Kita dapat melakukan operasi perulangan LOOP

5.2 Saran

o Saya pribadi berharap agar penjelasan di dalam praktikum nya dan pemberian tugas
akhir nya seimbang,karena saya pribadi atau mungkin teman-teman yang lainnya
belum dapat memahami sepenuhnya.

Daftar Pustaka :

https://vhydgarfield.wordpress.com/2012/12/28/instruksi-percabangan-dan-program-
loop/
MODUL V

Prosedur dan Stack pada Mikroprosesor

Maulana Rakha Rasendriya (201811136) ; Aulia Nurul Huda Nasution (201811103)

S1 Teknik Elektro, Institut Teknologi – PLN

rakha15412@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


3. Komputer
4. Aplikasi Emu8086
BAB II
LANDASAN TEORI
4.1 Teori Modul

2.1.1 Pemahaman Prosedur

Prosedur merupakan suatu alat bantu yang sangat berguna. Dengan prosedur suatu
program yang besar bisa diselesaikan dengan lebih mudah. Proses pencarian kesalahanpun akan
lebih mudah bila digunakan prosedur. Prosedur diidentifikasi dengan nama, diikuti dengan
bagian baris tugas yang akan dikerjakan oleh prosedur. Akhir dari prosedur ditunjukkan dengan
pernyataan pengembalian.

2.1.2 Membuat dan memanggil prosesdur


Untuk membuat prosedur bisa menggunakan syntax seperti berikut

Nama_Prosedur PROC
{Program}
RET

Nama_Prosedur ENDP

"Nama_Prosedur" adalah nama dari prosedur yang kita definisikan sendiri. Untuk
memudahkan nama untuk prosedur bisa didefinisikan sesuai dengan fungsi dari prosedur tersebut.
Perintah "RET” (Return) digunakan untuk mengembalikan Kontrol program pada si pemanggil
prosedur. Sedangkan untuk memanggil atau menjalankan prosedur digunakan operasi
CALL, dengan syntax
CALL NamaP
2.1.3 Menggunakan Prosedur
Sebagai contoh dari pemakaian prosedur akan kita lihat pada contoh program mencetak
karakter dengan prosedur
Contoh Program 1. Mencetak karakter dengan Prosedur
.MODEL SMALL

.CODE
ORG 100h

Proses:
MOV AX, DX
CALL Cetak_Kar ; Panggil Cetak_Kar
MOV BX, AX

MOV AX, 10H


INT 20h

Cetak_Kar PROC NEAR


MOV AH,02h
MOV DL,'S'

INT 21h ; Cetak karakter

RET ; Kembali kepada si pemanggil


Cetak_Kar ENDP ; END Prosedur

END Proses

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

syntax Untuk mengambil keluar koin nilai pada tabung stack, digunakan perintah pop dengan
:
POP Reg16Bit

Perintah POP akan mengambil koin nilai pada stack yang paling atas dan dimasukkan pada
Reg16Bit.
POP CX ; Ambil nilai pada puncak stack, masukkan ke CX
POP BX ; Ambil nilai pada puncak stack, masukkan ke BX
POP AX ; Ambil nilai pada puncak stack, masukkan ke AX

2.1.6 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

1.1 Tujuan

    1. Memahami cara kerja stack dan prosedur pada mikroprosesor


    2. Memahami instruksi stack dan  prosedur
   3. Mampu membuat perangkat lunak dengan menggunakan instruksi-instruksi yang berhubungan
dengan proses stack dan prosedur

1.2  Peralatan Yang Digunakan

    1. 1 set PC atau laptop


    2. Perangkat lunak simulator sms32v50
    3. Buku Kerja

1.3 Teori Dasar

Stack

Stack artinya adalah "tumpukan". Stack adalah bagian memori yang digunakan untuk menyimpan
nilai dari suatu register pada alamat offset terakhir suatu segmen secara sementara. Stack dapat
pula didefinisikan sebagai sekelompok lokasi memori di dalam memori baca tulis yang digunakan
untuk menyimpan memori sementara selama proses eksekusi program. Lokasi awal memori stack
didefinisikan di dalam program utama dan alokasi stack ini biasanya berada pada peta memori baca
tulis bagian atas.

Prosedur (Subrutin)

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

Tabel 1 Contoh instruksi stack

Assembler Machine Code Explanation

Isi   register   BL   dikopi   ke   lokasi   memori  


PUSH BLE0 01 yang
ditunjukkan oleh register SP dan register SP
dikurangi
satu.
Isi lokasi memori yang ditunjuk oleh register SP
POP BL E1 01 dikopi
ke register BL dan isi register SP ditambah satu.

PUSHF EA Isi   register   SR   dikopi   ke   lokasi   memori   yang


ditunjukkan oleh register SP dan register SP
dikurangi
satu.
Isi lokasi memori yang ditunjuk oleh register SP
POPF EB dikopi
ke register SR dan isi register SP ditambah satu.

Tabel 2 Instruksi prosedur/subrutin


CALL 30 CA 30 Instruksi untuk memanggil prosedur di alamat 30.
Alamat berikutnya ditaruh di memori sesuai alamat
SP
dan IP bernilai 30.
RET CB Kembali dari prosedur. Lompat ke alamat sesuai SP
(pop dari stack)
SUBROUTINE Program-program aritmatik (penjumlahan, pengurangan,
perkalian, atau pembagian), keyboard, kontrol display, dll. sering kali digunakan
sebagai bagian dari suatu program yang besar dalam aplikasi praktis. Jika
programmer harus menuliskan kembali program-program kecil tersebut setiap
kali dibutuhkan, tentulah akan sangat panjang dan menjemukan. Untuk
menghemat memori dan mengurangi kesalahan subroutine sering digunakan
dalam program yang besar. Perintah CALL dan RET 29 digunakan untuk
memanggil atau menunjuk subroutine yang akan dipakai. Subroutine dapat
dilaksanakan tanpa syarat atau menurut status/keadaan flag. Perintah CALL
pada program utama digunakan untuk memanggil subroutine.
Memanggil suatu subroutine adalah langkah yang penting dalam suatu program.
Subroutine dalam suatu program dapat berbentuk saling bersarang (dalam satu
subroutine terdapat subroutine lain).
Biasanya, subroutine disediakan oleh pabrik pembuat mikroprosesor. Pemakai
hanya perlu mengetahui cara penggunaannya. Jika subroutine dibuat oleh
pemakai sendiri, hal-hal berikut ini perlu dipertimbangkan dalam merancang
subroutine : 1. Nama subroutine sebaiknya menggunakan istilah yang mudah
diingat. 2. Bagaimana mendapatkan data yang dibutuhkan dalam subroutine
sebelum menjalankannya. 3. Bagaimana menyatakan hasil pelaksanaan
subroutine itu. 4. Register mana yang akan berubah setelah pelaksanaannya. 5.
Berapa besar memori yang akan ditempati oleh subroutine dan berapa lama
waktu yang dibutuhkan oleh CPU untuk melaksanakan subroutine tersebut.
Hal-hal berikut ini harus diperhatikan bila suatu subroutine dipanggil oleh
program utama : 1. Data yang dibutuhkan oleh subroutine harus disimpan. 2.
Register-register yang tidak boleh berubah setelah pelaksanaan subroutine
tersebut harus disimpan dalam stack sebelum memanggil subroutine itu. 3. Hasil
yang diperoleh dari pelaksanaan subroutine akan diproses dengan metode yang
digambarkan dalam subroutine.
Rangkuman :

Stack artinya adalah "tumpukan". Stack adalah bagian memori yang digunakan untuk
menyimpan nilai dari suatu register pada alamat offset terakhir suatu segmen secara
sementara. Stack dapat pula didefinisikan sebagai sekelompok lokasi memori di dalam
memori baca tulis yang digunakan untuk menyimpan memori sementara selama proses
eksekusi program. Lokasi awal memori stack didefinisikan di dalam program utama dan
alokasi stack ini biasanya berada pada peta memori baca tulis bagian atas.
Prosedur atau subrutin adalah sebuah kelompok instruksi yang membentuk substack
(misalnya operasi penunda waktu) yang sering dikerjakan oleh program utama. Stack
dan subrutin menawarkan keuntungan yang fleksibel di dalam penulisan program.
Sebuah rencana pembuatan software yang besar biasanya dibagi dlaam substack yang
disebut modul. Awal sebuah modul subrutin, isi register program utama disimpan ke
dalam stack dan isi register dikembalikan sebelum kembali ke program utama. Instruksi
operasi pada assembler yang menggunakan stack adalah PUSH dan POP. Dalam proses
stack ini melibatkan register Stack Pointer (SP).

SUBROUTINE Program-program aritmatik (penjumlahan, pengurangan, perkalian, atau


pembagian), keyboard, kontrol display, dll. sering kali digunakan sebagai bagian dari
suatu program yang besar dalam aplikasi praktis. Jika programmer harus menuliskan
kembali program-program kecil tersebut setiap kali dibutuhkan, tentulah akan sangat
panjang dan menjemukan. Untuk menghemat memori dan mengurangi kesalahan
subroutine sering digunakan dalam program yang besar. Perintah CALL dan RET 29
digunakan untuk memanggil atau menunjuk subroutine yang akan dipakai. Subroutine
dapat dilaksanakan tanpa syarat atau menurut status/keadaan flag. Perintah CALL pada
program utama digunakan untuk memanggil subroutine.
Memanggil suatu subroutine adalah langkah yang penting dalam suatu program.
Subroutine dalam suatu program dapat berbentuk saling bersarang (dalam satu
subroutine terdapat subroutine lain).
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

Program 1. Mencetak karakter dengan Prosedur


Program 2 Mencetak kalimat dengan jumlah karakter tertentu
4.2 Analisa Pembahasan

Pada praktikum modul 5 ini,kita akan membahas tentang modul yang


berjudul Prosedur dan Stack Mikroprosesor. Di modul ini memiliki tujuan yaitu
antara lain memahami perintah dan proses operasi prosedur pada
mikroprosesor,selanjutnya ialah dapat mendekalarasikan prosedur menggunakan
PROC dan menutup prosedur dengan ENDP,selanjutnya yaitu dapat melakukan
operasi pemanggilan prosedur dengan CALL dan mengembalikan dengan ke
program utama dengan RET,kemudian yang selanjutnya yaitu terdapat perintah
dan operasi stack pada mikroprosesor dan yang terakhir adalah dapat melakukan
operasi stack dengan PUSH dan POP.

Alat yang kita pakai di praktikum kali ini yaitu ada laptop atau
computer,dan aplikasi emu8086.

Di modul ini menjelaskan ada beberapa pengertian ialah dimana


prosedur merupakan suatu alat bantu yang sangat berguna atau sangat
membantu. Dengan ada nya prosedur ini,suatu program yang besar bisa
diselesaikan menjadi lebih mudah. Prosedur diidentifikasi dengan nama,diikuti
dengan bagian baris tugas yang akan dikerjakan oleh prosedur itu. Akhir dari
prosedur itu ditunjukkan dengan adanya pernyataan pengembalian. Contoh nya
adalah untuk membuat prosedur bisa menggunakan syntax yaitu Nama_Prosedur
PROC,yang dimana Nama_Prosedur ialah nama dari prosedur yang kita
definisikan sendiri. Agar memudahkan nama untuk prosedur bisa kita
definisikan sesuai dengan fungsi dari prosedur itu tersebut.

Sedangkan,terdapat PROC pada Nama_Prosedur diakhir itu supaya


Nama_Prosedur sebagai prosedurnya,lalu terdapat program yang bis akita isi
dengan mov atau yang lainnya. Kemudian terdapat RET digunakan untuk
mengembalikan control program. Sedangkan,untuk menjalankan prosedur
digunakan operasi CALL yang dimana berfungsi untuk memanggil prosedur
dengan cara CALL nama.
Selanjutnya,terdapat pengertian dari stack. Stack adalah bagian dari
memory yang berfungsi untuk menyimpan nilai dari suatu register untuk
sementara. Operasi-operasi yang terdapat pada assembler yang langsung
menggunakan stack,misalnya pada perintah PUSH dan POP. PUSH digunakan
untuk memasukan nilai suatu register pada stack. Kemudian POP digunakan
sebagai mengembalikan nilai pada stack yang paling atas dan dimasukkan pada
register 16 bit. Pada stack ini,menggunakan stack yang dimana stack ini dapat
kita samakan sebagai sebuah tabung yang Panjang. Sedangkan nilai pada
register dapat dibayangkan berbentuk koin yang dapat dimasukkan dalam tabung
itu.

Operasi stack menggunakan prinsip LIFO (Last In First Out). Yang


artinya ialah data terakhir yang disimpan akan dikeluarkan terlebih dahulu.
Kemudian, ad acara menggunakan stack dan prosedur,yang pertama perlu
dipahami bahwa Ketika menggunakan prosedur,maka seringkali dalam isi
program prosedur akan merubah nilai-nilai dari general purpose register.

Di modul ini terdapat beberapa contoh dari penggunaan prosedur dan


stack pada mikroprosesor yaitu yang pertama stack frame yang digunakan untuk
nested subroutine. Kemudian selanjutnya adalah merubah nilai-nilai dari general
purpose register,lalu membuat system operasinya dengan sendiri.
4.3 Tugas Akhir
BAB V

PENUTUP

5.1 Kesimpulan
o Kita dapat memahami perintah dan proses operasi prosedur pada
mikroprosesor
o Kita dapat mendekalarasikan prosedur menggunakan PROC dan
menutup prosedur dengan ENDP
o Kita dapat melakukan operasi pemanggilan prosedur dengan CALL dan
mengembalikan dengan ke program utama dengan RET
5.2 Saran
o Saya pribadi berharap agar penjelasan didalam praktikum nya dan
pemberian tugas akhir nya seimbang,karena saya pribadi atau mungkin
teman-teman yang lainnya belum dapat memahami sepenuhnya.

Daftar Pustaka

o http://faridstifler.blogspot.com/2017/03/assembler-stack-dan-
prosedur.html
o http://staff.uny.ac.id/sites/default/files/pendidikan/drs-sumarna-msi-
meng/stack-dan-subroutine-mpf5.pdf

Anda mungkin juga menyukai