Bahasa Assembly
A
PENDAHULUAN
Modul ajar ini bertujuan untuk memudahkan mahasiswa mengenal bahasa pemrograman Tingkat Rendah, selain pemograman tingkat tinggi seperti Bahasa C, Pascal dll,, serta mampu mengoperasikan, memprogram dan mengaplikasikan bahasa Assembly dalam sistem elektronika. Walaupun bahasa tingkat tinggi terus berkembang dengan segala fasilitas dan kemudahannya, peranan bahasa pemrograman tingkat rendah tetap tidak dapatdigantikan. Bahasa assembly mempunyai keunggulan yang tidak mungkin diikuti oleh bahasa tingkat apapun dalam hal kecepatan, ukuran file yang kecil serta kemudahan dalam manipulasi sistem komputer. Modul Ajar ini disusun berdasarkan pengalaman dari penulis sendiri dalam menggunakan bahasa assembler. Oleh karenanya buku ini disusun dengan harapan bagi anda yang tidak tahu sedikitpun tentang assembly dapat belajar sehingga assembler akan tampak sama mudahnya dengan bahasa tingkat tinggi. Untuk Mahasiswa program studi Teknik Elektronika, mata kuliah Bahasa Assembly merupakan mata kuliah dasar dalam pemograman untuk bias melangkah ke mata kuliah pemograman dan mikroprosessor, dan mata kuliah Bahasa Assembly ini lebih dititik beratkan pada pembuatan flowchart supaya dapat memecahkan masalah , dan juga memperkenalkan instruksi-instruksi yang ada pada mikroprosessor 8085. Dalam Bahasa assembly ini diperkenalkan Bahasa assembly milik mikroprosessor
8085
karena
dalam
prakteknya
mahasiswa
diajarkan
mikroprosessor 8085. 1
Bahasa Assembly
B -
TUJUAN KHUSUS
Mahasiswa mengetahui Perbedaan konsep antara Organisasi Komputer dan Arsitektur komputer.
-
Mahasiswa dapat memahami tentang komponen komputer, struktur komputer dan fungsi Komputer.
-
Mahasiswa mengetahui Cara pemograman.
-
Mahasiswa cara membuat Algoritma dan Flowchart
-
Mahasiswa dapat memahami tentang Bahasa Pemograman
-
Mahasiswa mengetahui Mode Pengalamatan.
-
Mahasiswa mengetahui Instruksi-instruksi yang digunakan dalam mikroprosessor 8085.
-
Mahasiswa dapat memahami tentang cara-cara penulisan program.
-
Mahasiswa mengetahui beberapa macam Golongan Instruksi
-
Mahasiswa mengetahui Instruksi Aritmatika dan Logika.
-
Mahasiswa mengetahui Instruksi Transfer data
-
Mahasiswa mengetahui Instruksi Percabangan
-
Mahasiswa mengetahui Instruksi Compare, Rotate dsb
2
Bahasa Assembly
Pokok Bahasan Adapun pembahasan yang akan disajikan dalam modul ajar ini adalah sebagai berikut: 1. Pendahuluan 2. Dasar –dasar Organisasi Komputer 3. Dasar Pemograman 4. Instruksi Dasar 8085 5. Instruksi Input dan Output 6. Instruksi Jump 7. Pemograman Lanjutan
3
Bahasa Assembly
C
DASAR-DASAR ORGANISASI KOMPUTER
I.1. Pengantar. Program Bahasa Assembly atau Assembler adalah suatu Program yang mengambil Input (Program Sumber) yang dikodekan dalam Mnemonic atau Symbol Bahasa mesin dan di konversikan ke dalam Program Bahasa mesin Hexadesimal (Object Program). Alasan Utama Software tidak ditulis dalam bahasa Mesin Hexadesimal secara langsung karena sewaktu-waktu sebuah program yang akan dimodifikasi, tidak sulit dalam merelokasi pengalamatan. Penemuan Mikroprosesor pada tahun 1970-an merupakan perkembangan yang menentukan dari dunia Elektronika yang mengagumkan. Beberapa hal yang menyebabkan kepopuleran Mikroprosesor yaitu : •
Ukurannya kecil
•
Daya yang dibutuhkan rendah
•
Harganya murah
Mikroprosesor dapat didefinisikan sebagai Rangkaian terpadu tunggal yang mengandung ribuan gerbang digital yang dapat melakukan Operasi Aritmatika, Logika, dan Kontrol dari Komputer. Komputer berasal dari kata to compute yang artinya menghitung. Jadi computer adalah suatu peralatan elektronik yang digunakan untuk perhitungan, tetapi karena perkembangan teknologi computer saat ini begitu pesat, computer tidak lagi hanya berperan
4
Bahasa Assembly
sebagai mesin hitung tetapi sudah mempunyai berbagai fungsi untuk mempermudah dan membantu pekerjaan manusia. Komputer mempunyai Elemen-elemen fungsional sebagai berikut : •
Unit Kontrol dan Aritmatika
•
Unit Memory Instruksi
•
Unit Memory Data
•
Unit Input/Output
Unit Aritmatika dan Kontrol memroses data dengan operasi aritmatika dan logika. Bagian aritmatika mempunyai kemampuan operasi aritmatika yang built-in dalam bentuk perangkat keras yang dapat melakukan fungsi tersebut. Bagian Kontrol mengandung rangkaian yang memungkinkan instruksi yang diproses dapat cepat dikerjakan secara berurutan. Isi dari memori yang berupa instruksi dan data dapat diletakkan secara kombinasi ataupun dipisah. Program yang berisi instruksi urutan-urutan perintah harus ditulis dan disimpan dalam memori sebelum computer dijalankan. Data dapat disimpan baik sebelum ataupun sesudah computer running. Unit Input/Outpun adalah bagian penghubung computer dengan dunia luar (Pheriperal), yang memungkinkan computer untuk berkomunikasi secara real time. Piranti ini umumnya lambat bila dibandingkan dengan waktu proses internal computer dan format data yang dikomunikasikan bias serial ataupun parallel.
1.2 Komputer Sebelum mempelajari organisasi komputer lebih jauh ada baiknya kita mengetahui apa itu komputer? Komputer adalah suatu sistem pemrosesan yang 5
Bahasa Assembly
didalamnya terdapat unit masukan, unit keluaran, unit pemroses data dan juga unit penyimpanan data. Sistem komputer secara keseluruhan dapat dilihat pada gambar 1.1.
Output
Input
Pemroses
Penyimpa
Gambar 1.1 Sistem komputer
Struktur adalah cara komponen - komponen komputer saling terkait dan berhubungan. Sedangkan fungsi adalah operasi masing - masing komponen sebagai bagian dari struktur. Dalam modul ini akan dijelaskan melalui pendekatan top-down (dari sistem paling kompleks menuju sistem yang lebih sederhana) sehingga diharapkan akan lebih jelas dan efektif Operasi-operasi yang dilakukan komputer diantaranya operasi aritmetika, operasi logika, operasi penggeseran dan operasi pemindahan, yang sebenarnya adalah implementasi mesin komputer terhadap perintah kita. Ada pekerjaan besar sehubungan dengan interkoneksi manusia dan komputer. Seperti kita ketahui, komputer tidak bisa memahami bahasa kita dan juga sebaliknya, untuk itu diadakan manipulasi dan transformasi data agar terjadi kesesuaian antara komputer dan manusia sebagai penggunanya. 6
Bahasa Assembly
1.3 Organisasi Komputer Organisasi Komputer adalah bagian yang terkait erat dengan unit - unit operasional dan interkoneksi antar komponen penyusun sistem komputer dalam merealisasikan aspek arsitekturalnya. Contoh aspek organisasional adalah rincian dan teknologi hardware, perangkat antarmuka dan peripheral, teknologi dan sistem memori, sinyal - sinyal kontrol. Ada baiknya dipahami aspek arsitekturalnya karena kedua hal ini sangat terkait. Arsitektur Komputer lebih cenderung pada kajian atribut - atribut sistem komputer yang terkait dengan seorang programmer. Contohnya, set instruksi, aritmetilka yang digunakan, teknik pengalamatan, mekanisme I/0. Sebagai contoh, apakah suatu komputer perlu memiliki instruksi pengalamatan pada memori merupakan masalah rancangan arsitektural. Apakah instruksi pengalamatan tersebut akan diimplementasikan secara langsung ataukah melalui mekanisme cache adalah kajian organisasional.
INTERFACE EXTERNAL
UNIT MASUKAN KELUARAN
UNIT MEMORY INSTRUKSI
UNIT ARITMATIKA & KONTROL
UNIT MEMORY DATA
Gambar 1.2. Elemen Fungsional Utama dari Komputer.
7
Bahasa Assembly
1.4 Hirarki Komputer Komputer merupakan suatu sistem kompleks, yang tersusun atas subsistem-subsistem yang saling berkaitan. Untuk menjelaskan struktur suatu komputer, kunci utamanya adalah mengetahui hirarki sistem paling kompleks sampai pada sistem elementer paling sederhana. Komputer adalah suatu peralatan yang bersifat modular, tersusun atas modul - modul subsistem yang memiliki fungsi dan karakteristik tertentu tetapi saling mendukung dalam mewujudkan fungsi komputer secara keseluruhan. Struktur adalah cara komponen - komponen komputer saling terkait dan berhubungan. Sedangkan fungsi adalah operasi masing - masing komponen sebagai bagian dari struktur. Dalam modul ini akan dijelaskan melalui pendekatan top-down (dari sistem paling kompleks menuju sistem yang lebih sederhana) sehingga diharapkan akan lebih jelas dan efektif
1.5 Struktur Komputer Komputer adalah sebuah sistem yang berinteraksi dengan cara tertentu dengan dunia luar. Interaksi dengan dunia luar dilakukan melalui perangkat peripheral dan saluran komunikasi. Perhatikan gambar 1.3, terdapat empat struktur utama: ¾ Central Processing Unit (CPU), berfungsi sebagai pengontrol operasi komputer dan pusat pengolahan fungsi - fungsi komputer. Kesepakatan, CPU cukup disebut sebagai processor (prosesor) saja. ¾ Memori Utama, berfungsi sebagai penyimpan data. ¾ I/0, berfungsi memindahkan data ke lingkungan luar atau perangkat lainnya.
8
Bahasa Assembly
¾ System Interconnection, merupakan sistem yang menghubungkan CPU, memori utama dan I/0. Komponen yang paling menarik namun paling kompleks adalah CPU. Computer
Peripherals
Central Processing Unit
Computer
Main Memory
Systems Interconnection
Input Output Communication lines
Gambar 1.3 Struktur utama computer
Struktur CPU terlihat pada gambar 1.4, dengan struktur utamanya adalah: ¾ Control Unit, berfungsi untuk mengontrol operasi CPU dan mengontrol komputer secara keseluruhan. ¾ Arithmetic And Logic Unit (ALU), berfungsi untuk membentuk fungsi - fungsi pengolahan data komputer. ¾ Register, berfungsi sebagai penyimpan internal bagi CPU. ¾ CPU Interconnection, berfungsi menghubungkan seluruh bagian dari CPU.
9
Bahasa Assembly
CPU
Computer
System Bus
Arithmetic and Login Unit
Registers
I/O CPU
Internal CPU Interconnection
Memory
Control Unit
Gambar 1.4 Struktur CPU
1.6 Fungsi Komputer Fungsi dasar sistem komputer adalah sederhana seperti terlihat pada gambar 1.5. Pada prinsipnya terdapat empat buah fungsi operasi, yaitu ¾ Pemindahan Data ¾ Penyimpanan Data ¾ Pengolahan Data ¾ Kontrol Data Storage Facility
Data Movement Apparatus
Control Mechanism
Data Processing Facility
Gambar 1.5 Fungsi Komputer
10
Bahasa Assembly
Komputer harus dapat memproses data. Representasi data di sini bermacam-macam, akan tetapi nantinya data harus disesuaikan dengan mesin pemrosesnya. Dalam pengolahan data, komputer memerlukan unit penyimpanan sehingga diperlukan suatu mekanisme penyimpanan data. Walaupun hasil komputer digunakan saat itu, setidaknya komputer memerlukan media penyimpanan untuk data prosesnya. Dalam interaksi dengan dunia luar sebagai fungsi pemindahan data diperlukan antarmuka (interface), proses ini dilakukan oleh unit Input/Output (I/0) dan perangkatnya disebut peripheral. Saat interaksi dengan perpindahan data yang jauh atau dari remote device, komputer melakukan proses komunikasi data. 1.7. Aritmatika dan Kontrol. Bagian Aritmatika dan Kontrol dari computer biasanya disebut sebagai Central Processing Unit (CPU). Mungkin istilah ini muncul ketika awal-awal computer mainframe yang besar di mana bagian computer masih terpusat. Fungsi Utama CPU adalah : •
Mengambil atau menjemput instruksi dari memori dan menerjemahkannya (decode) kemudian mengeksekusi perintah yang sudah diterjemahkan tersebut.
•
Mentransfer informasi ke dan dari memori data atau unit masukan-keluaran (I/O) yang dibutuhkan pada eksekusi suatu instruksi.
•
Menanggapi sinyal control dari luar, yang dikenal sebagai interrupt yang mungkin dapat menginterupsi operasi yang normal dan mungkin dapat menyebabkan urutan-urutan program atau instruksi yang baru yang harus dilakukan oleh computer. 11
Bahasa Assembly
Dalam melakukan fungsi-fungsi tersebut maka CPU dilengkapi dengan : 1. Pada bagian Aritmatika : •
ALU (Arithmetic Logic Unit)
•
Akumulator
2. Pada bagian Kontrol : •
Register Instruksi
•
Decoder Segala operasi aritmatika dan Logika dilakukan di dalam ALU. Operasi-
operasi yang dapat dilakukan ALU adalah : 1. Penjumlahan (Add), Penambahan Satu (Increment) 2. Pengurangan (Subtract), Pengurangan Satu (Decrement) 3. Logika OR, EX-OR, AND, dan NOT (Complement) 4. Perbandingan (Compare) 5. Pergeseran ke kiri atau ke kanan atu bit (Shift) 6. Berputar ke kiri atau ke kanan (Rotate). Pada Mikroprosessor 8085 mempunyai 10 buah register, dan register merupakan tempat penyimpanan data sementara. Register-register ini dibagi atas dua kelompok, yaitu : -
General Purpose Register (Register Serba Guna).
-
Special Purpose register (Register Khusus). Dimana dikatakan dengan Register Serba Guna (General Purpose
Register) karena pemakaian register ini bersifat umum. Susunan dari Registerregister ini aperti sebuah RAM kecil (8-bit atau 16-bit) di dalam CPU. Register ini dapat digunakan sebagai tempat penyimpanan hasil operasi mikroprosessor. 12
Bahasa Assembly
Register serba guna ini terdiri dari 6 buah register 8-bit yang disebut dengan regisr B, C, D, E, H, dan L. Untuk pengoperasian 16-bit register ini dapat digunakan berpasangan menjadi pasangan register BC, DE, HL. Kemudian dikatakan dengan Register Khusus (Sepecial Purpose Register) karena fungsinya yang sangat khusus, register ini terdiri dari 4 bagian yaitu : Akumulator, Register bendera, Program Counter (PC), Stack Pointer(SP). • Akumulator (Accumulator/Acc). Akumulator disebut juga dengan register A yang merupakan register yang amat penting, karena register ini berfungsi sebagai tempat penyimpanan hasil setiap operasi aritmatika maupun operasi logika dan juga sebagai tempat masukan ALU. Data Bus internal yang dihubungkan ke Acc ini merupakan dua arah (bidirectional) yang berartyi akumulator dapat mengirim dan menerima data. Di dalam penggunaan akumulator ini berpasangan dengan register Bendera (Flag). • Register Bendera (Flag Register, F) Register Bendera berfungsi sebagai indicator atau menyatakan kedaan dari hasil operasi ALU. Register ini terdiri dari 8-bit tetapi hanya 5-bit yang dipakai yaitu: Zero (Z), Sign (S), Parity (P), Carry (Cy) dan Auxilary Carry (AC). Susunan bit dari register Bendera digambarkan sebagai berikut :
D7
D6
D5
D4
D3
D2
D1
D0
S
Z
x
AC
x
P
x
Cy
X = tidak dipakai (don’t care) Gambar 1.6. Register Bendera (Flag)
13
Bahasa Assembly
Isi register bendera akan berubah sesuai dengan hasil operasi aritmatika-logika. -
Sign Bit (S) : S = 0 ; bila hasilnya positif S = 1 ; bila hasilnya negative
- Zero Bit (Z) : Z = 1 ; bila hasilnya sama denga 0 Z = 0 ; bila hasilnya tidak sama dengan 0 - Auxilary Carry Bit (AC) : AC = 1 ; Jika terjadi carry dari 4 bit rendah (low nible) ke 4 bit tinggi (high nible) dan Jika ada borrow dari high nible ke low nible. AC = 0 ; Jika sebaliknya. -
Parity Bit (P) : P = 1 ; bila hasil operasi berparity genap. P = 0 ; bila hasil operasi berparity ganjil.
- Carry Bit (Cy) : Cy = 1 ; bila hasil penjumlahan melebihi 8-bit, dan bila hasil pengurangan ada borrow. Cy = 0 ; bila tidak terjadi borrow atau carry. • Program Counter (PC) Pengeksekusian suatu program adalah pelaksanaan instruksi, dimana instruksi ini telah terlebih dahulu disimpan di dalam memori. Jadi untuk melaksanakan instruksi tersebut dibutuhkan suatu alamat yang menunjukkan lokasi penyimpanan instruksi tersebut di dalam memori. Alamat lokasi memori yang akan dituju ini diambil dari Program counter. Rogram counter ini merupakan register 16-bit, dengan demikian jangkauan alamatnya adalah 216 = 64 kByte. 14
Bahasa Assembly
• Stack Pointer (SP) Stack merupakan bagian dari memori yang dialokasikan untuk penyimpanan data dan alamat. Misalnya saat instruksi PUSH dan CALL. Alamat awal dari stack ini ditandai oleh Stack Pointer. Stack dapat diakses dengan menggunakan program. Penumpukan data pada stack ini mempunyai sifat LIFO (Last In First Out). Pemindahan data dari register CPU ke Stack dapat dilaksanakan dengan instruksi PUSH dan yang sebaliknya adalah POP. Stack Pointer (SP) merupakan register 16-bit dengan demikian jangkauan alamat adalah sebesar 216 = 64 kByte. 1.8. Media Penyimpan Memori Ada beberapa jenis media penyimpan memori yang sekarang banyak digunakan, misalnya : •
ROM (Read-Only Memory)
•
PROM (Programmable ROM)
•
EAROM (Elictrically Alterable ROM)
•
RAM (Random-Access Memory)
•
FPLA (Field Programmable Logic Array)
•
CCD memory (Charge-Coupled Device)
•
Dan masih banyak lagi.
Jenis penyimpan memory ada dua macam : •
Volatile (yang akan hilang begitu aliran listrik pada computer dimatikan) Contoh : RAM, flipflop
•
Nonvolatile (tidak akan hilang meskipun aliran listrik mati) Contoh : ROM, PROM, EPROM, magnetic-tape dsb. 15
Bahasa Assembly
Struktur Penyimpan Memori Kapasitas memory dari RAM atau ROM dinyatakan dengan jumlah bit yang dapat disimpan pada piranti tersebut . Biasanya, 1 Kilo bit memori adalah sama dengan 210, atau sama dengan 1024 bit. 4 Kilobit sama dengan 212, atau 4096 bit. Di pasaran, bermacam-macam chip penyimpan memori di mana masing-masing memiliki spesifikasi tersendiri. Yang popular dipakai misalnya EPROM buatan intel, dengan kode sebagai berikut : 2764 (8 bit output, kapasitas memori 8K) 2732 (8 bit output, kapasitas memori 4K) Di samping itu beberapa jenis memori ada yang memiliki input/output 4 bit. Karena kebanyakan mikroprosesor memiliki bus data 8 bit, maka untuk menentukan jumlah IC yang diperlukan dipakai rumus :
Kofigurasi system memori yang dibutuhkan Jumlah IC =
Ukuran IC memori yang ada
Jadi sebagai contoh suatu ROM dengan kapasitas 256 bytes, 4 bit output, akan dipakai sebagai penyimpan memori suatu system mikrokomputer 256 bytes, 8 bit. Maka jumlah IC memori yang dibutuhkan adalah : 256 x 8 Jumlah IC =
256 x 4
= 2 chip
16
Bahasa Assembly
Tugas dan Pertanyaan: 1. Sebutkan Alasan Utama kenapa Software tidak dituliskan dalam Bahasa Mesin Hexadesimal. 2. Sebutkan definisi dari Mikroprosessor. 3. Gambarkan Diagram Blok Elemen-elemen Fungsional Utama dari Komputer dan Jelaskan Fungsi setiap Blok. 4. Sebutkan Fungsi tama dari CPU. 5. Register pada Mikroprosessor 8085 dibagi dalam dua kelompok, sebutkan dan jelaskan. 6. Jenis memori yang tidak akan hilang data di dalam memori jika tegangan listriknya diputuskan disebut dengan apa dan sebutkan contoh-contohnya.
17
Bahasa Assembly
D
DASAR PEMOGRAMAN
2.1. Pengantar Algoritma Pemograman. Beberapa istilah yang perlu diketahui dalam dunia pemograman antara lain adalah : Program, Pemograman dan Bahasa Pemograman. Program adalah kumpulan instruksi/perintah yang disusun sebagai satu kesatuan prosedur yang berupa urutan langkah untuk menyelesaikan masalah yang diimplementasikan dengan menggunakan bahasa pemograman sehingga dapat dieksekusi oleh computer. Pemograman adalah proses untuk mengimplementasikan urutan langkah untuk menyelesaikan suatu masalah dengan menggunakan suatu bahasa pemograman. Bahasa Pemograman berfungsi sebagai media untuk menyusun dan memahami suatu program computer serta sebagai alat komunikasi antara programmer dengan computer. Bahasa Pemograman digolongkan menjadi beberapa tingkatan yaitu : •
Bahasa Tingkat Rendah (Low Level Language) Bahasa Tingkat Rendah merupakan bahasa pemograman yang berorientasi pada mesin. Disebut tingkat rendah karena bahasa ini lebih dekat ke bahasa mesin daripada bahasa manusia. Yang tergolong dalam bahasa tingkat rendah adalah bahasa Assembly.
•
Bahasa Tingkat Tinggi (High Level Language) Bahasa Tingkat Tinggi lebih dekat ke bahasa manusia dari pada bahasa mesin. Bahasa tingkat tinggi emrupakan bahasa pemograman yang meiliki 18
Bahasa Assembly
aturan-aturan gramatikal dalam penulisan ekspresi atau pernyataan dengan standar yang mudah dipahami oleh manusia. Yang tergolong bahasa tingkat tinggi antara lain : BASIC, Fortran, COBOL, Pascal, Prolog, C, dll. Ada sebagian para pakar yang menyebutkan bahasa C sebagai bahasa tingkat menengah (Middle Level Language), karena dianggap bahasa C adalah bahasa tingkat tinggi yang mempunyai kelebihan hampir menyamai bahasa assembly karena kelengkapan fungsinya dalam mengakses perangkat keras. 2.2. Algorithma. Algoritma bnerasal dari kata algoris dan ritmis, yang pertama kali diungkapkan oleh Abu Ja’far Mohammed Ibn Musa al Khowarismi (825 M) dalam buku Al-Jabr Wa-al Muqabla. Dalam bidang pemograman Algoritma didefinisikan sebagai suatu metode khusus yang tepat dan terdiri dari serangkaian langkah yang terstruktur dan dituliskan secara sistematis yang akan dikerjakan untuk menyelesaikan suatu masalah dengan bantuan computer. Algoritma merupakan pola piker terstruktur yang berisi tahap-tahap penyelesaian masalah yang dapat disajikan dengan teknik tulisan maupun dengan gambar. Penyajian algoritma dalam bentuk tulisan biasanya menggunakan metode Structure English atau Pseudo Code (kode semu). Penyajiann algoritma dalam bentuk gambar biasanya menggunakan flowchart (diagram alir). Sebelum membuat sebuah program, programmer harus mendefinisikan masalah yang ada untuk menghasilkan program yang bagus, dimana bahasa mikroprosessor, bahasa mesin dan hexadecimal Op-code harus diinstruksikan sebelumnya. Sebagai contoh suatu bagian dari instruksi untuk penjumlahan dan pengurangan, pada Instruksi set mikroprosessor 8085 tidak mengetahui instruksi 19
Bahasa Assembly
aritmatika yang lain (perkalian atau pembagian), sehingga harus didefinisikan terlebih dahulu bagaimana membuat perkalian dengan instruksi yang ada yaitu penjumlahan dan pengurangan. Sebenarnya operasi perkalian tidak cocok dalam struktur proses bilangan biner, jadi utnuk proses perkalian harus diubah oleh programmer ke dalam proses penjumlahan. Contoh : 5
x
4
=
Factor 1 Factor 2
20 Hasil
5 + 5 + 5 + 5 = 20 Berarti masalah perkalian dapat diselesaikan dengan menjumlah bilangan factor 1 sebanyak Factor 2. Sebelum memulai membuat Flowchart dan Program, perlu membuat terlebih dahulu dalam bentuk Algoritma, sebagai contoh untuk program perkalian yaitu 5 dikalikan dengan 4, urutan langkahnya adalah : -
Isi Register A dengan data 00 (untuk mengclearkan isi Akumulator)
-
Isi Register B dengan data 5 (Factor 1)
-
Isi Register C dengan data 4 (Factor 2)
-
Jumlahkan Register B dengan Register A, dan isikan hasilnya ke register A.
-
Kurangi 1 dari data Register C.
-
Periksa, apakah Register C = 0 ; Jika tidak kembali lompat ke langkah keempat.
-
Jika Register C = 0, maka program selesai/stop dan kembali ke program utama.
20
Bahasa Assembly
Dari langkah-langkah pada algoritma ini, dapat dibuat langsung ke sebuah program dengan format bahasa tertentu atau membuat flowchart terlebih dahulu. 2. 3. Flowchart. Untuk membuat program yang lebih sistematik maka disarankan untuk menggunakan flowchart, baru kemudian diubah menjadi bahasa assembly. Ada banyak macam flowchart, sebagai contoh flowhcar blok yang menujukkan prosedur proses kasar, atau flowcart yang cukup rinci yang berhubungan dengan satu instruksi. Flowchart juga dibagi atas 3 tipe dasar (1) Tipe langsung (straight type) (2) Tipe cabang (branch type) (3) Tipe loop Seperti tampak pada gambar 2.1. START
START
PROSES
PROSES
SETTING
CABANG
PROSES BERULANG
PROSES
NO
START
PROSES YES PROSES
PROSES
PROSES
(a) Langsung
(b)Cabang
PRAKIRAAN KONDISI
PROSES LAIN
(c) Loop
Gambar 2.1. Tipe Dasar Flowchart
21
Bahasa Assembly
Tipe langsung adalah tipe yang paling sederhana, yaitu urutan proses selalu mulai dari atas ke bawah. Pada tipe cabang, aliran proses berubah berdasarkan perubahan kondisi. Perubahan kondisi tersebut dapat dicek menggunakan register flag F. Tipe loop digunakan untuk proses yang berulang. Tipe ini merupakan tipe yang sangat popular dalam pemograman. Terdapat 2 (dua) jenis flowchart yang perlu diketahui yaitu : •
Sistem Flowchart.
•
Program Flowchart.
Sistem flowchart Sistem flowchart merupakan diagram alir yang menggambarkan suatu sitem peralatan computer yang digunakan dalam proses pengolahan data serta hubungan antar peralatan tersebut. Sistem Flowchart tidak digunakan untuk menggambarkan urutan langkah untuk memecahkan masalah, tetapi hanya untuk menggambarkan prosedur dalam system yang dibentuk. Simbol-simbol yang digunakan dalam system Flowchart antara lain :
Sequential Access Storage
Display
Manual Input
Input/Output
Punched Paper Tape
Direct Acces Storage Magnetic Disc
22
Bahasa Assembly
Process
Multi Document
Storage Data
Manual Operation
Proses Sortir
Proses Merge
Card
Internal Storage
Gambar 2.2. Simbol-simbol Sistem Flowchart
Contoh penggunaan Sistem Flowchart :
Keyboard
CPU
Disket
Monitor
Gambar 2.3. Contoh Penerapan Sistem Flowchart
23
Bahasa Assembly
Program Flowchart Program Flowchart merupakan diagram alir yang menggambarkan urutan logika dari suatu prosedur pemecahan masalah. Untuk membuat program flowchart telah tersedia symbol-simbol standard yaitu :
Process
Input/Output
Loop FOR…NEXT Kondisi
Konektor pada halaman yang
Predefined Process
Terminator : awal/akhir program
Konektor pada halaman lain
Arah data
Gambar 2.4. Simbol-simbol Program Flowchart
Beberapa Contoh Penggunaan Program Flowchart : 1. Buatlah sebuah Flowchart untuk menghitung Luas.
24
Bahasa Assembly
2. Buatlah Flowchart untuk menentukan Nilai 6 orang mahasiswa dengan skala nilai sebagai berikut : A = 81 – 100 B = 66 – 80 C = 56 – 64 D = 40 – 54 E = 0 – 39 Jawab : 1. Start
Input alas,tinggi
Luas = alas*tinggi/2
Output Luas
Stop
25
Bahasa Assembly
2.
Start
Baca Data Mhs (X(i) i=1 6)
i = 1,6
X(i) >=81 Y
X(i) >=66 Y
NX(i) = “A”
N
N
NX(i) = “B”
N
X(i) >=56
N
Y
Y NX(i) = “C”
N
X(i) >=40
NX(i) = “D”
NX(i) = “E”
i=6? Y Cetak (NX(i), i=1,6)
Stop
26
Bahasa Assembly
Tugas dan Pertanyaan : 1. Apa yang dimaksud dengan : a. Program. b. Pemograman c. Algorithma 2. Sebutkan berapa tingkatan dalam Bahasa Pemograman dan jelaskan. 3. Buatlah sebuah Algoritma untuk perkalian sebuah bilangan 8 dengan bilangan 7 dan buat flowchartnya. 4. Sebutkan berapa macam type dasar Flowchart dan jelaskan. 5. Sebutkan perbedaan Sistem Flowchart dengan Program Flowchart. 6. Buatlah Flowchart untuk mendapatkan Nilai Rata-rata Mahasiswa dalam satu kelas dengan jumlah mahasiswa 24 orang, dan untuk mendapatkan Nilai Maximum serta Nilai Minimum. 7. Dalam
ruangan Jurusan Teknik Elektro memiliki 3 (tiga) AC Split,
dimana ketiga AC tersebut Nyala secara Otomatis tergantung pada suhu dalam ruangan. Jika suhu nya antara 20oC – 25oC maka AC 1 yang Nyala, dan lainnya OFF, Jika Suhunya diatas 25oC dan dibawah 30oC maka dua AC yang akan Nyala yaitu AC 1 dan AC 2, dan Jika Suhunya diatas 30oC maka ketiga AC tersebut akan Menyala (ON), kemudian jika di dalam ruangan tersebut tidak ada orang maka AC tidak menyala walaupun suhunya tinggi. Buatlah Flowchart untuk mengontrol AC dalam ruangan tersebut.
27
E
Bahasa Assembly
INSTRUKSI DASAR 8085
Agar suatu mikrokomputer dapat bekerja maka harus diberikan instruksi, dimana instruksi ini merupakan perintah-perintah yang akan dilaksanakan oleh mikroprosessor. Instruksi ini terdiri dari kode operasi (Op-Code) dan alamat atau data yang diperlukan. Kode Operasi (Op-Code) pada CPU 8085 terdiri dari 8-bit, yang berarti terdapat 256 (28) instruksi yang berbeda tetapi yang diperkenalkan pada umum hanya 246 instruksi. Bentuk format dari instruksi umumnya terdiri dari Op-Code dan Operand. Op-Code adalah singkatan dari Operation Code yang menyatakan instruksi yang akan dilaksanakan, sedangkan Operand adalah data yang digunakan oleh Op-Code yang berupa data atau alamat. Format dari bentuk perintah yang digunakan pada CPU 8085 ada 3 jenis yaitu 1 byte, 2 byte, 3 byte yang ditunjukkan pada gambar berikut. Byte 1
Byte 2
Byte 3
Kode Operasi (Op-Code)
Data byte rendah (low order data) atau byte rendah alamat (low order address)
Data byte tinggi (high order data) Atau Byte tinggi alamat (high order address)
Gambar 3.1. Bentuk Format dari Perintah CPU 8085
Berdasarkan fungsinya instruksi CPU 8085 dapat dibedakan atas 5 jenis, yaitu : •
Instruksi Pemindahan Data (Data Transfer)
•
Instruksi Pemrosesan Data (Data Processing)
•
Instruksi Kendali (Control) 28
Bahasa Assembly
•
Instruksi Masukan-Keluaran (Input-Output)
•
Instruksi Lompat dan Cabang (Jump and Branch)
3.1. Mode Pengalamantan Pengalamatan pada mikroprosesor 8085 dibagi atas: Pengalamatan Implied (Implied addressing), pengalamatan seketika (immediate addressing), pengalamatan langsung (direct addressing), pengalamatan tidak langsung (indirect addressing), dan pengalamatan register (register addressing). 3.1.1. Pengalamatan Implied Penglamatan jenis ini adalh instruksi yang hanya terdiri dari kode operasi (op-code) yaitu 8-bit. Instruksi pengalamatan paling sederhana ini adalah operasi yang
men-set atau
meng-clear register bendera (Reg. Flag),
menambah/mengurangi register Internal (A, B, C, D, E, H, L, SP), atau mentrasfer isi dari suatu register ke register yang lain. Contoh : INR A ADD B
3C; 80;
Naikkan suatu isi ACC. Jumlahkan isi ACC dengan isi register B
3.1.2. Pengalamatan Seketika (Immediate Addressing) Pengalamatan seketika adalah instruksi yang operandnya adalah data langsung. Untuk penstranferan data Mikroprosessor 8085 mempunyai dua bentuk dasar dari instruksi pengalamatan seketika ini yaitu: -
Bentuk MVI (Move Immediate); Bentuk ini digunakan untuk mentransfer data 8-bit ke suatu register. Contoh : MVI A, 05
-
3E-05 ; Data 05 diberikan ke Acc.
Bentuk LXI (Load Immediate); Bentuk ini digunakan untuk membebani pasangan register dengan data 16-bit. Setiap Instruksi LXI terdiri dari 3 29
Bahasa Assembly
byte, yaitu byte pertama berisi Op-Code, byte kedua dan ketiga berisi data immediate 16 bit. Contoh : LXI H, 7894
21-94-78 ; Reg. HL = 7894
3.1.3. Pengalamatan Langsung (Direct Addressing) Pengalamatan langsung adalah pengalamatan yang langsung menuju lokasi memori. Instruksi ini terdiri dari kode operasi yang diikuti oleh alamat dari lokasi yang dituju. Mikroprosessor 8085 mempunyai dua bentuk instruksi pengalamatan langsung yaitu : Instruksi membebani yang menyimpan Accumulator, instruksi membebani yang menyimpan isi pasangan register HL. Contoh: Assembly
Machine
Comment
LDA a16
3A-ll-hh
Reg. A diisi dengan isi alamat a16
STA
a16
32-ll-hh
Isi Reg. A disimpan pada alamat a16
LHLD a16
2A-ll-hh
HL dibebani dengan data dari isi memory a16 + 1.
SHLD a16
22-ll-hh
Isi pasangan Reg. HL disimpan pada alamat a16 dan a16 +1.
Catatan :
a16 = alamat 16-bit , ll = alamat low byte hh = alamat high byte
3.1.4. Pengalamatan Tidak Langsung (Indirect Addressing) Pengalamatan tidak langsung adalah pengalamatan suatu lokasi memori dimana pengalamatan dilakukan melalui register. Pengalamatan tidak langsung pada 8085 dilakukan melalui register M dan dengan instruksi STAX dan LDAX.
30
Bahasa Assembly
Register M adalah memori dimana alamatnya terdapat pada pasangan register HL. Contoh : Assembly
Machine
LDAX B
02
Comment ;Bebani Reg. A dengan isi alamat yang alamatnya terdapat pada Reg. BC
LDAX D
0A
;Bebani Reg. A dengan isi alamat yang alamatnya terdapat pada Reg. DE
STAX B
12
;Simpan isi Reg. A pada lokasi memory yang alamatnya terdapat pada Reg. BC
STAX D
1A
;Simpan isi Reg. A pada lokasi memory yang alamatnya terdapat pada Reg. DE
MVI M, 05
36-05
;Bebani memory dimana alamatnya pada HL dengan data 05
Contoh berikut ini mengilustrasikan bagaimana pasangan Register dibebani dengan alamat memory dan kemudian dengan menggunakan instruksi LDAX B Akkumulator dibebani dengan data dari lokasi memory 1000(H), dan selanjutnya data tersebut disimpan kembali pada alamat 1200(H) dengan instruksi STAX D. Contoh : Assembly
Machine
Comment
LXI B, 1000 (H)
01-00-10
;
alamat 1000(H)
BC
LXI D, 1200 (H)
11-00-12
;
alamat 1200(H)
DE
LDAX B
0A
;
isi alamat 1000(H)
ACC. 31
Bahasa Assembly
STAX D
12
;
isi Akkumulator
alamat 1200
3.1.5. Pengalamatan Register Pengalamatan ini merupakan pemindahan/pembacaan data antara register. Pengalamatan register ini merupakan pengalamatan yang paling umum digunakan. Pengalamatan register ini mempunyai panjang 8-bit. -
Instruksi Data Transfer Antara Register : Kelompok ini terdiri dari 63 Instruksi yang berbeda. Instruksi ini disebut
dengan pemindahan (MOV = Move). Format dasar dari instruksi MOV digambarkan seperti dibawah ini : MOV rd, rs
rd = Register tujuan rs = Register asal
Daftar yang lengkap dari instruksi MOV diperlihatkan pada daftar Instruksi set 8085. Perhatikan bahwa beberapa dari instruksi ini menggunakan pengalamatan indirect seperti pengalamatan Register. Contoh
berikut
menunjukkan
bagaimana
suatu
bilangan
pada
Accumulator dipindahkan ke Register D dan E. Instruksi mula-mula mengcopy isi Accumulator ke Register D dan kemudian mengcopy isi Register D ke Register E. Contoh : Assembly
Machine
Comment
MOV D, A
57
;
Isi Acc. Dicopy ke Reg. D
MOV E, D
5A
;
Isi Acc. Dicopy ke Reg. E
32
Bahasa Assembly
3.2. Operasi Tranfer Data Stack Mikroprosessor 8085A mempunyai sifat penumpukan data dengan system LIFO (Last In First Out). Stack digunakan untuk menyimpan alamat kembali (return) dari subroutine dan juga penyimpanan data untuk sementara waktu. Agar pemogram mengetahui lokasi Stack penyimpanan data maka perlu alamat Stack tersebut ditandai terlebih dahulu. Penandaan ini dilaksanakan dengan mengisi SP (Stack Pointer). Instruksi yang berhubungan dengan Stack ini adalah PUSH, POP, XTHL. POP membaca data dari Stack, dan XTHL adalah mempertukarkan ini Register HL dengan isi Stack yang ditunjuk oleh SP. Assembly
Machine
PUSH PSW
F5
Comment ; Isi Reg. A dan Flag disimpan pada stack
PUSH B
C5
; Isi pasangan Reg. BC disimpan pada stack
PUSH D
D5
; Isi pasangan Reg. DE disimpan pada stack
PUSH H
E5
; Isi pasangan Reg. HL disimpan pada stack
POP PSW
F1
; data pada stack diambil kembali dan dimasukkan ke Reg. A dan Flag.
POP B
C1
; data pada stack diambil kembali dan dimasukkan ke Reg. BC
POP D
D1
; data pada stack diambil kembali dan dimasukkan ke Reg. DE 33
Bahasa Assembly
POP H
E1
; data pada stack diambil kembali dan dimasukkan ke Reg. HL
XTHL
E3
; isi Reg. HL saling dipertukarkan dengan data yang terdapat pada stack.
3.2.1. Operasi PUSH Instruksi PUSH merupakan instruksi untuk menyimpan data pada Stack. Instruksi set ini terdiri dari instruksi PUSH, POP, XTHL. Operasi dari PUSH ini ditunjukkan paada gambar 3.2. berikut: PUSH D setelah
sebelum D SP
12
34 900 3
E
D
SP
12
34
E
900 1
9001
B6
9001
34
9002
05
9002
12
9003
0F
9003
0F
9004
08
9004
08
Memory Stack
Gambar 3.2. Operasi PUSH
34
Bahasa Assembly
Anggap bahwa isi SP adalah 9003(H) dan pasangan register DE berisi data 1234(H). Instruksi PUSH membuat isi SP dikurangi satu (SP-1 = 9002) dan 12(H) dari Reg. D disimpan pada memori 9002. Kemudian isi SP dikurangi satu lagi (SP-2=9001) dan kemudian data 34(H) dari Reg. E disimpan pada memory 9001, sedangkan isi alamat 9003 sampai 9004 dan isi register tetap. 3.2.2. Operasi POP Instruksi POP adalah instruksi yang membaca data kembali dari Stack, seperti ditunjukkan pada gambar 3.3. berikut ini : POP D
setelah
sebelum D
SP
66
87 900 1
E
D
SP
12
34
E
900 3
9001
34
9001
34
9002
12
9002
12
9003
0F
9003
0F
9004
08
9004
08
Memory Stack
Gambar 3.3. Operasi POP
35
Bahasa Assembly
Langkah-langkah operasi POP D menghasilkan sebagai berikut: Anggap bahwa isi SP tidak berubah dari saat instruksi PUSH (SP=9001). Data dari Stack alamat 9001 diambil kembali dan dimasukkan ke Register E dan setelah itu isi SP ditambah satu (SP+1=9002(H)), kemudian isi alamat 9002(H) dimasukkan ke register D selanjutnya isi SP ditambah satu lagi (SP+2=9003(H)). 3.2.3.Operasi Exchange HL dengan Data Stack (XTHL): Instruksi ini meng-exchange isi pasangan Register HL dengan data yang ada pada stack. Contoh : Data 1000 (H) di push pada stack dan HL berisi 2000 (H), maka setelah instruksi XTHL akan mengakibatkan kedua harga ini diexchage, sehingga HL berisi 1000 (H) dan stack berisi 2000 (H). 3.3. Miscelleneous Data Transfer Instruction. Instruksi Miscelleneous adalah instruksi yang tidak termasuk kepada kelompok diatas. Instruksi-instruksi ini seperti yang terdapat pada table. Assembly
Machine
IN
DB p8
p8
Comment ; Baca data yang ada pada Port p8 dan simpan di Acc.
OUT p8
D3 p8
; Keluarkan isi Acc ke Port beralamat p8
SPHL
F9
; Isi pasangan Reg. HL diberikan pada Stack Pointer (SP)
XCHG
EB
; HL dan DE saling dipertukarkan
36
Bahasa Assembly
3.3.1. Instruksi IN dan OUT Instruksi IN dan OUT berfungsi untuk berhubungan dengan peralatan input/output. Instruksi IN dan OUT diikuti dengan alamat input output yang akan dituju. Pada saat mikroprosessor melaksanakan instruksi IN atau OUT saluran alamat byte rendah dan byte tinggi sama yaitu berisiskan alamat input/output yang dituju, jadi untuk mendekodekan alamat input/output dapat diambil dari saluran alamat tinggi atau alamat rendah. Jadi lokasi alamat input/output yang dapat diakses maksimum 256. Instruksi OUT 20H menyebabkan isi akkumulatordikeluarkan ke port (Bandar) yang beralamat 20H dan instruksi IN 21H menyebabkan data pada port yang beralamat 21H masuk pada akkumulator. 3.3.2. Instruksi SPHL Instruksi ini berguna untuk membebani Stack Pointer dengan isi pasangan register HL. Instruksi SPHL ini hanya 1 byte (Op-Code saja). Instruksi ini sering digunakan untuk menandai Stack Pointer untuk menggantikan instruksi LXI SP. Misalnya sebelum instruksi SPHL ini isi Stack Pointer (SP) adalah 0008 (H) dan pasangan register HL berisi 7008 (H). Setelah instruksi ini dikerjakan microprocessor maka Stack Pointer akan berisi 7008 (H). 3.3.3. Instruksi XCHG Instruksi ini berfungsi untuk meng-exchange isi pasangan register HL dengan pasangan register DE. Anggap sebelum instruksi XCHG isi pasangan register HL = 5643 (H), DE = 7613 (H), maka setelah instruksi XCHG dikerjakan mikroprosessor maka isi pasangan register HL = 7613 (H) dan DE = 5643 (H).
37
Bahasa Assembly
Contoh : Assembly
Machine
Comment
LXI D, 1200 (H)
11-00-12
; Tanda untuk alamat 1200 (H)
LXI H, 1000 (H)
21-00-10
; Tanda untuk alamat 1000 (H)
MOV A, M
7E
;
Data
dari
alamat
1000
(H)
dimasukkan ke Accumulator. XCHG
EB
;
Tanda
untuk
alamat
saling
dipertukarkan. MOV B, M
46
; Isi alamat 1200 (H) dimasukkan ke register B
MOV M, A
77
; Isi alamt 1000 (H) dimasukkan ke alamat 1200 (H).
XCHG
EB
; Tanda dipertukarkan kembali.
MOV M, B
70
; Isi alamat 1200 (H) yang pertama dimasukkan ke alamat memori.
38
Bahasa Assembly
Tugas dan Pertanyaan : 1. Apa yang dimaksud dengan Op-Code dan Operand 2. Sebutkan 5 jenis instruksi pada Mikroprosessor 8085 menurut fungsinya. 3. Sebutkan dan jelaskan Mode Pengalamatan pada Mikroprosessor 8085 serta berikan contohnya. 4. Isilah alamat, Op-Code dan comment pada table berikut sesuai dengan Instruksi pada Mnemonic.
Address
Op-Code
Mnemonic LXI H, 7800 LXI B, 7801 MVI M, FF MOV A, M STAX B SHLD 7802 RST 1
Comment
Setelah program di atas dilaksanakan (execute) isi dari : Reg. A = _______Reg. B = ______ Reg. L = _______ Isi alamat dari : 7800 (H) =
7801 (H) =
7802 (H) =
7803 (H) =
5. Buatlah sebuah Program Perkalian untuk mengalikan dua buah bilangan yaitu 07 dikalikan dengan 06, dan hasil perkaliannya disimpan pada Register D, dan alamat nya dimulai dari alamt 9000.
39
Bahasa Assembly
F
PEMOGRAMAN LANJUTAN
Operasi-operasi aritmatika dan logika pada mikroprosessor sama seperti operasi pada system digital biasa. Operasi aritmatika yang dapat dikerjakan oleh mikroprosessor 8085 adalah Penjumlahan, Pengurangan dan operasi logika adalah Invers, AND, OR, EX-OR, Instruksi Banding dan instruksi Geser serta Putar. 4.1.
Instruksi Pemrosesan Data (Data Processing) Instruksi pemrosesan data merupakan instruksi aritmatika dan logika.
Seluruh operasi dari instruksi akan mempengaruhi isi dari Bendera (Flag). Instruksi aritmatika terdiri dari : 4.1.1. Instruksi Penjumlahan (ADD) Instruksi Penjumlahan dapat dibedakan lagi atas : • Penjumlahan 8-bit Instruksi penjumlahan bilangan biner 8-bit ini merupakan penjumlahan isi register A dengan isi register yang lain atau suatu bilangan konstanta. Tabel 1. Instruksi Penjumlahan 8-bit tanpa carry Assembly
Kode-mesin
Fungsi
ADI d8
C6 – d8
;
Acc = Acc + d8
ADD r
op – code
;
Acc = Acc + (Reg)
40
Bahasa Assembly
Contoh : 85(H)
1000 0101(2)
Reg.C= 83
83(H)
1000 0111(2)
Acc = Acc + C
08(H)
1 0000 1000(2)
MVI A,85
;
Acc
MVI C,83
;
ADD C
;
RST
= 85
;
Dari hasil operasi di atas maka : Acc = 08 dan bit register flag akan berisi : S=0, H=0, P=0, Cy=1. Isi register 0 tetap 83. •
Instruksi Penjumlahan dengan carry
Penjumlahan data 8-bit dengan carry adalah penjumlahan Akkumulator dengan data atau isi register dan ditambahkan dengan carry sebelum operasi dilaksanakan. Bentuk formatnya adalah sebagai berikut : Tabel 2. Instruksi Penjumlahan 8-bit dengan carry. Assembli
Kode-mesin
ACI d8
CE-d8
ADC r
op-code
Fungsi ; Acc = Acc + d8 + Cy ; Acc = Acc + Reg.r + Cy
Contoh : MVI A, 89
;
Acc = 89
MVI C, 83
;
Reg.C = 83
ADI 83
;
Acc + 83
ADC C
;
Acc = Acc + c
RST 1
; Dari hasil operasi diatas maka : cc=90 dan bit register flag akan berisi:
S=1, z=0, H=1, P=1, Cy=0. Isi register C tetap 83. 41
Bahasa Assembly
•
Instruksi Penjumlahan dengan 16-bit
Instruksi penjumlahan 16-bit adalah penjumlahan isi pasangan register L dengan pasangan register lain, dimana dalam pemerosesan isi pasangan register tersebut melalui Akkumulator. Instruksi ini adalah DAD (Double ADD). Tabel 3. Instruksi Penjumlahan 16-bit Assembli
Kode-mesin
DAD rp
op-code
Fungsi ; (HL) = (HL) + rp
Contoh : LXI H,8456
8456(H)
LXI B,8742
8743(H)
DAD B
Cy-1 OB99
RST 1 Setelah operasi diatas isi Register HL=OB99(H)dan BC=2743 (tetap) dan Cy=1 •
Instruksi Penambahan satu (Increment)
Instruksi penambahan satu ada dua buah, yaitu penambahan isi register 8bit dengan satu dan penambahan isi pasangan register dengan satu, tetapi penambahan satu untuk pasangan register tidak mempengaruhi isi bendera, dengan bentuk formasi sebagai berikut: Tabel 4. Instruksi Penambahan Satu Assembli
Kode-mesin
Fungsi
INR r
op-code
; Reg. r
= Reg.r + 1
INX rp
op-code
; Reg. rp
= Reg.rp + 1
42
Bahasa Assembly
4.1.2. Instruksi Pengurangan (SUB) Instruksi Pengurangan dibedakan atas : -
Instruksi Pengurangan dengan satu (Decremen)
Instruksi ini menyebabkan suatu register atau pasangan register berkurang satu. Tabel 5. Instruksi Pengurangan Satu Assembli
Kode-mesin
DCR r
op – code
; Reg. r = Reg.r - 1
DCX rp
op – code
; Reg. rp = Reg. rp - 1
-
Fungsi
Instruksi Pengurangan data 8 - bit
Instruksi pengurangan data 8-bit adalah pengurangan isi akkumulator dengan data 8-bit atau isi register dengan bentuk format sebagai berikut : Tabel 6. Instruksi pengurangan 8-bit tanpa borrow. Assembli
Kode-mesin
Fungsi
SUI d8
op-code
; Acc = Acc - d8
SUB r
op-code
; Acc = Acc - Reg.r
Contoh : MVI A,84
84(H)
1000 0100(2)
MVI B,27
27(H)
0010 0111(2)
SUB B
5D(H)
0101 1191(2)
RST 1 Setelah program diatas dieksekusi maka Acc=5D(H), B=27(H), Flag: S=0, Z=0, H=1, Cy=0.
43
Bahasa Assembly
- Instruksi Pengurangan data 8-bit dengan borrow Tabel 7. Instruksi pengurangan 8-bit dengan borrow. Assembli
Kode-mesin
Fungsi
SBI d8
op-code
; Acc = Acc - d8 - Cy
SBB r
op-code
; Acc = Acc - Reg.r – Cy
MVI A,57
57(H)
0101 0111(2)
SUI 58
58(H)
0101 1000(2)
Contoh :
Cy=1 FF(H)
1111 1111
SBB B
27(H)
0010 0111
RST 1
D7(H)
1101 0111(2)
MVI B,27
Setelah program diatas dieksekusi maka Acc=D7(H), B=27(H), Flag : S=1, Z=0, H=0, Cy=0, P=1. 4.1.3. Instruksi Pendesimalan (DAA) Instruksi ini berfungsi untuk menambahkan 06, 60, 66 terhadap isi akkumulator jika hasil penjumlahan lebih besar dari 9. Penambahan 06, 60 atau 66 pada akkumulator berdasarkan isi dari Register Bendera. Contoh: MVI A, 84
84(H)
1000 0100(2)
MVI B,27
27(H)
0010 0111(2)
ADD B
AB(H)
1010 1011(2)
DAA
66
0110 0110(2)
RST 1
Cy=1
11
0001 0001(2) 44
Bahasa Assembly
Penjumlahan diatas adalah penjumlahan Desimal. Setelah program diatas dieksekusi maka Acc=11(H), B=27(H), Flag: S=0, Z=0, H=1, Cy=1. 4.1.4.
Instruksi Banding (Compare) Instruksi Banding merupakan instruksi pengurangan isiAkkumulator
dengan suatu data 8-bit atau isi suatu register, tetapi isi dari akkumulator tetap yang berubah hanya register bendera. Tabel 8. Instruksi Pembandingan Assemli
Kode-mesin
Fungsi
CPI d8
FE-d8
;
Flag = Acc – d8
CPM r
op-code
;
Flag = Acc – Reg. r
Contoh : 1. MVI A, 87
2. MVI A, 78
3. MVI A, 67
MVI A, 27
CPI 78
MVI C, 80
CMP B
RST 1
CMP C
RST 1
RST 1
Contoh 1 merupakan pembandingan isi Akumulator dengan isi Register B, Proses pembandingan ini dilakukan dengan cara pengurangan isi Acc terhadap isi reg. B tetapi isi Acc tidak berubah. Setelah program diatas dieksekusi maka Acc = 87(H), B=27(H), Flag P = 1, S = 0, Z = 0, H = = 0, Cy = 0. Program contoh 2 akan menghasilkan Flag : Cy = 0, Z = 1. Program contoh 3 akan menghasilkan Flag : Cy = 1, Z = 0.
45
Bahasa Assembly
4.1.5.
Instruksi Operasi Logika Instruksi-instruksi logika ini melaksanakan operasi logika antara
Akkumulator dengan suatu data 8-bit atau dengan isi suatu register dimana instruksi ini terdiri dari operasi logika AND (^), logika OR (v), dan ExclusiveOR. •
Instruksi Logika AND. Instruksi Logika AND ini akan menghasilkan output seperti table
kebenaran gerbang logika AND, jadi instruksi ini padat mewakili fungsi gerbang logika AND biasa. Tabel 9. Instruksi Logika AND Assembli
Kode-mesin
Fungsi
ANI d8
E6-d8
;
Acc = Acc ^ d8
ANA r
op-code
;
Acc = Acc ^ Reg. r
Contoh : MVI A, 84
84(H)
MVI B, 27
27(H)
ANA B
04(H)
1000 0100(2) ^
0010 0111(2)
^
0000 0100(2)
RST 1 •
Instruksi Logika OR.
Tabel 10. Instruksi Logika OR Assembli
Kode-mesin
Fungsi
ORI d8
F6-d8
;
Acc = Acc v d8
ORA r
op-code
;
Acc = Acc v Reg. r
46
Bahasa Assembly
Contoh : MVI A, 84
84(H)
MVI B, 27
27(H)
ORA B
A7(H)
1000 0100(2) v
0010 0111(2)
v
1010 0111(2)
RST 1 •
Instruksi Logika Ex-OR
Tabel 11. Instruksi Logika Ex - OR Assembli
Kode-mesin
Fungsi
XRI d8
EE-d8
;
Acc = Acc v d8
XRA r
op-code
;
Acc = Acc v Reg. r
Contoh : MVI A, 84
84(H)
MVI B, 27
27(H)
XRA B
A3(H)
1000 0100(2) v
0010 0111(2)
v
1010 0011(2)
RST 1 •
Instruksi Komplement (Complement) Instruksi Complement ini ada dua buah yaitu CMC dan CMA,
dimana CMC berfungsi untuk mengkomplemenkan isi bit carry dari register bendera dan CMA berfungsi untuk mengkomplemenkan isi dari register A. 4.1.6.
Instruksi Geser (Shift) dan Putar (rotate). Instruksi ini berfungsi untuk menggeser isi dari Register A kea rah
kanan atau kiri seperti digambarkan pada gambar 4.1 berikut :
47
Bahasa Assembly
Cy
Akkumulator RLC
Cy
Akkumulator
RRC
RAL
RAR
Akkumulator
Cy
Akkumulator
Cy Cy
Akkumulator
gambar 4.1. Fungsi Instruksi Geser dan Putar Contoh 1 :
Contoh 2 :
STC
; Set Carry Cy = 1
STC
; Set Carry Cy = 1
CMC
: Complement Carry Cy = 0
MVI A, 82 ;A=82(H) Cy=1
MVI A, 82
; A = 82(H)
Cy = 0
RRC ; A = 41(H)
RLC
; A = 05(H)
Cy = 1
RST 1
Cy = 0
RST 1 48
Bahasa Assembly
Contoh 3 :
Contoh 4 :
STC
STC ; Set Carry Cy = 1
; Set Carry Cy = 1
MVI A, 82 RAL
; A = 82(H)
; A = 05(H)
Cy = 1
Cy = 1
RAR ; A = C1(H) Cy = 0
RST 1 4.1.7.
MVI A, 82 ;A=82(H) Cy=1
RST 1 Instruksi Kontrol CPU 8085 mempunyai beberapa instruksi control yang menentukan
arah suatu program, mengambil keputusan dan memodifikasi arah program sesuai dengan hasil pengambilan keputusan. Instruksi ini terdiri dari : 1.
Instruksi Lompat (JUMP) Instruksi ini terbagi atas dua jenis, yaitu mutlak lompat (unconditional
jump) dan lompat bersyarat (conditional jump). Adapun bentuk format dari instruksi ini seperti pada table 12. Tabel 12. Instruksi Lompat Assembli
Kode-Mesin
Fungsi
JMP a16
C3-ll-hh
; Lompat ke alamat a 16
JZ
a16
CA-ll hh
; Lompat jika ZERO
JNZ a16
C2-ll-hh
; Lompat jika tidak ZERO
JC
a16
DA-ll-hh
; Lompat jika ada Carry
JNC a16
D2-ll-hh
; Lompat jika tidak ada Carry
JM
a16
FA-ll-hh
; Lompat jika minus
JP
a16
F2-ll-hh
; Lompat jika Positif
JPE a16
EA-ll-hh
; Lompat jika Parity Genap
JPO a16
E2-ll-hh
; Lompat jika Parity Ganjil
49
Bahasa Assembly
2.
Instruksi Cabang dan Kembali (CALL, RET) Instruksi CALL membuat suatu program melaksanakan suatu program
subrutin yang alamat awalnya setelah kode operasi dari instruksi CALL tersebut, dan akan kembali lagi ke program utama jika instruksi kembali RET (return) dijumpai. Instruksi ini terdiri dari dua jenis yaitu instruksi bersyarat dan tidak bersyarat. Syarat dari instruksi ini dilihat dari kondisi isi register Bendera. Setelah instruksi ini dikerjakan isi register bendera tidak berubah. Tabel 13. Instruksi Cabang Assembli
Kode-Mesin
Fungsi
CALL a16
CE-ll-hh
; CALL Sub Rutin pada alamat a 16
CC
a16
DC-ll hh
; CALL Sub Rutin jika ada Carry
CNC a16
D4-ll-hh
; CALL Sub Rutin jika tidak ada Carry
CZ
a16
CC-ll-hh
; CALL jika zero
CNZ a16
C4-ll-hh
; CALL jika tidak zero
CM a16
FC-ll-hh
; CALL jika minus
CP
a16
F4-ll-hh
; CALL jika Positif
CPE a16
EC-ll-hh
; CALL jika Parity Genap
CPO a16
E4-ll-hh
; CALL jika Parity Ganjil
Tabel 14. Instruksi Kembali Assembli
Kode-Mesin
Fungsi
RET
C9
; Kembali ke Program Utama
RC
D8
; Kembali jika ada Carry
RNC
D0
; Kembali jika tidak ada Carry
RZ
C8
; Kembali jika hasil 0
RNZ
C0
; Kembali jika hasil tidak 0
RM
F0
; Kembali jika Akkumulator negatif
RP
FB
; Kembali jika Akkumulator Positif
RPE
E0
; Kembali jika Acc berparity Genap
RPO
EB
; Kembali jika Acc berparity Ganjil 50
Bahasa Assembly
TABEL INSTRUKSI SET 8085
Mnemonic ACI d8 ADC B ADC C ADC D ADC E ADC H ADC L ADC M ADC A ADD B ADD C ADD D ADD E ADD H ADD L ADD M ADD A ADI d8 ANA B ANA C ANA D ANA E ANA H ANA L ANA M ANA A ANI d8 CALL a16 CC a16 CM a16 CNC a16 CNZ a16 CP a16 CPE a16 CPO a16 CZ a16 CMA CMC CMP B
op- code CE-d8 88 89 8A 8B 8C 8D 8E 8F 80 81 82 83 84 85 86 87 C6-D8 A0 A1 A2 A3 A4 A5 A6 A7 E6-D8 CD-ll-hh DC-ll-hh FC-ll-hh D4-ll-hh C4-ll-hh F4-ll-hh EC-ll-hh E4-ll-hh CC-ll-hh 2F 3F B8
Bytes 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 2 3 3 3 3 3 3 3 3 3 1 1 1
Clocks 7 4 4 4 4 4 4 7 4 4 4 4 4 4 4 7 4 7 4 4 4 4 4 4 7 4 7 18 9/18 9/18 9/18 9/18 9/18 9/18 9/18 9/18 4 4 4
Function A = A + d8 + Cy A = A + B + Cy A = A + C + Cy A = A + D + Cy A = A + E + Cy A = A + H + Cy A = A + L + Cy A = A + M + Cy A = A + A + Cy A=A+B A=A+C A=A+D A=A+E A=A+H A=A+L A=A+M A=A+A A = A + d8 A=A^B A=A^C A=A^D A=A^E A=A^H A=A^L A=A^M A=A^A A = A ^ d8 Call Sub Rutin Call Sub Rutin if Cy = 1 Call Sub Rutin if S = 1 Call Sub Rutin if Cy = 0 Call Sub Rutin if Z = 0 Call Sub Rutin if S = 0 Call Sub Rutin if P = 1 Call Sub Rutin if P = 0 Call Sub Rutin if Z = 1 A=A Cy = Cy Flags = A - B
51
Bahasa Assembly Mnemonic
op- code
Bytes
Clocks
Function
CMP C
B9
1
4
Flags = A = C
CMP D CMP E
BA BB
1 1
4 4
Flags = A - D Flags = A - E
CMP H CMP L
BC BD
1 1
4 4
Flags = A - H Flags = A - L
CMP M
BE
1
7
Flags = A - M
CMP A CPI d8
BF FE-d8
1 2
4 7
Flags = A = A Flags = A - d8
DAA DAD B
27 9
1 1
4 10
Decimal Adjust HL = HL + BC
DAD D
19
1
10
HL = HL + DE
DAD H DAD SP
29 39
1 1
10 10
HL = HL + HL HL = HL + SP
DCR B
5
1
4
B=B-1
DCR C DCR D
0D 15
1 1
4 4
C=C-1 D=D-1
DCR E DCR H
1D 25
1 1
4 4
E=E-1 H=H-1
DCR L
2D
1
4
L=L-1
DCR M DCR A
35 3D
1 1
10 4
M=M-1 A=A-1
DCX B DCX D
0B 1B
1 1
6 6
BC = BC - 1 DE = DE - 1
DCX H
2B
1
6
HL = HL - 1
DCX SP DI
3B F3
1 1
6 4
SP = SP - 1 Disable Interupt
EI
FB
1
4
Enable Interupt
IN d8 INR B
DB-d8 4
2 1
4 4
A = (Port d8) B=B+1
INR C INR D
0C 14
1 1
4 4
C=C+1 D=D+1
INR E
1C
1
4
E=E+1
INR H INR L
24 2C
1 1
10 4
H=H+1 L=L+1
INR M INR A
34 3C
1 1
4 4
M=M+1 A=A+1
INX B
3
1
6
BC = BC + 1
INX D INX H
13 23
1 1
6 6
DE = DE + 1 HL = HL + 1
INX SP
33
1
6
SP = SP + 1
52
Bahasa Assembly Mnemonic
op- code
Bytes
Clocks
Function
a16
DA-ll-hh
3
7/10
Jump if Cy = 1
JM a16 JMP a16
FA-ll-hh C3-ll-hh
3 3
7/10 7/10
Jump if S = 1 Jump
JNC a16 JNZ a16
D2-ll-hh C2-ll-hh
3 3
7/10 7/10
Jump if Cy = 0 Jump if Z = 0
JC
JP
a16
F2-ll-hh
3
7/10
Jump if S = 0
JPE a16 JPO a16
EA-ll-hh E2-ll-hh
3 3
7/10 7/10
Jump if P = 1 Jump if P = 0
JZ
a16
CA-ll-hh
3
7/10
Jump if Z = 1
LDA a16 LDAX B
3A-ll-hh 0A
3 1
13 7
A = (a16) A = ((BC))
LDAX D LHLD a16
1A 2A-ll-hh
1 3
7 16
A = ((DE)) HL = (a16)
LXI B, d16
01-ll-hh
3
10
BC = d16
LXI D,d16 LXI H,d16
11-ll-hh 21-ll-hh
3 3
10 10
DE = d16 HL = d16
LXI SP,d16
31-ll-hh
3
10
SP = d16
MOV B, B MOV B, C
40 41
1 1
4 4
B=B B=C
MOV B, D
42
1
4
B=D
MOV B, E MOV B, H
3 44
1 1
4 4
B=E B=H
MOV B, L MOV B, M
45 46
1 1
4 7
B=L B=M
MOV B, A
47
1
4
B=A
MOV C, B MOV C, C
48 49
1 1
4 4
C=B C=C
MOV C, D
4A
1
4
C=D
MOV C, E MOV C, H
4B 4C
1 1
4 4
C=E C=H
MOV C, L MOV C, M
4D 4E
1 1
4 7
C=L C=M
MOV C, A
4F
1
4
C=A
MOV D, B MOV D, C
50 51
1 1
4 4
D=B D=C
MOV D, D
52
1
4
D=D
MOV D, E MOV D, H
53 54
1 1
4 4
D=E D=H
MOV D, L MOV D, M
55 56
1 1
4 7
D=L D=M
MOV D, A
57
1
4
D=A
53
Bahasa Assembly
Mnemonic
op- code
Bytes
Clocks
Function
MOV E, B
58
1
4
E=B
MOV E, C MOV E, D
59 5A
1 1
4 4
E=C E=D
MOV E, E MOV E, H
5B 5C
1 1
4 4
E=E E=H
MOV E, L
5D
1
4
E=L
MOV E, M MOV E, A
5E 5F
1 1
7 4
E=M E=A
MOV H, B MOV H, C
60 61
1 1
4 4
H=B H=C
MOV H, D
62
1
4
H=D
MOV H, E MOV H, H
63 64
1 1
4 4
H=E H=H
MOV H, L
65
1
4
H=L
MOV H, M MOV H, A
66 67
1 1
7 4
H=M H=A
MOV L, B MOV L, C
68 69
1 1
4 4
L=B L=C
MOV L, D
6A
1
4
L=D
MOV L, E MOV L, H
6B 6C
1 1
4 4
L=E L=H
MOV L, L MOV L, M
6D 6E
1 1
4 7
L=L L=M
MOV L, A
6F
1
4
L=A
MOV M, B MOV M, C
70 71
1 1
7 7
M=B M=C
MOV M, D
72
1
7
M=D
MOV M, E MOV M, H
73 74
1 1
7 7
M=E M=H
MOV M, L MOV M, M
75 76
1 1
7 7
M=L M=M
MOV M, A
77
1
7
M=A
MOV A, B MOV A, C
78 79
1 1
4 4
A=B A=C
MOV A, D MOV A, E
7A 7B
1 1
4 4
A=D A=E
MOV A, H
7C
1
4
A=H
MOV A, L MOV A, M
7D 7E
1 1
4 7
A=L A=M
MOV A, A
7F
1
4
A=A
54
Bahasa Assembly Mnemonic
op- code
Bytes
Clocks
Function
MVI B, d8
06-d8
2
7
B = d8
MVI C, d8 MVI D, d8
0E-d8 16-d8
2 2
7 7
C = d8 D = d8
MVI E, d8 MVI H, d8
1E-d8 26-d8
2 2
7 7
E = d8 H = d8
MVI L, d8
2E-d8
2
7
L = d8
MVI M, d8 MVI A, d8
36-d8 3E-d8
2 2
7 7
M = d8 A = d8
NOP
00
1
4
No Operation
ORA B ORA C
B0 B1
1 1
4 4
A=AvB A=AvC
ORA D ORA E
B2 B3
1 1
4 4
A=AvD A=AvE
ORA H
B4
1
4
A=AvH
ORA L ORA M
B5 B6
1 1
4 7
A=AvL A=AvM
B7
1
4
A=AvA
F6-d8 D3-d8
2 2
7 10
A = A v d8 PORT d8 = A
PCHL
E9
1
6
PC = HL
POP B POP D
C1 D1
1 1
10 10
BC = (STACK) DE = (STACK)
POP H POP PSW
E1 F1
1 1
10 10
HL = (STACK) AF = (STACK)
PUSH B
C5
1
10
(STACK) = (BC)
PUSH D PUSH H
D5 E5
1 1
10 10
(STACK) = (DE) (STACK) = (HL)
PUSH PSW
F5
1
10
(STACK) = (AF)
RAL RAR
17 1F
1 1
4 4
Rotate a left trough Carry Rotate a right trough Carry
RC RET
D8 C9
1 1
6/12 10
Return if Cy = 1 Return
RIM
20
1
4
Read Interrupts
RLC RM
7 F8
1 1
4 6/12
Rotate a left without Carry Return if S = 1
ORA A ORI d8 OUT d8
RNC
D0
1
6/12
Return if Cy = 0
RNZ RP
C0 F0
1 1
6/12 6/12
Return if Z = 0 Return if S = 0
RPE RPO
E8 E0
1 1
6/12 6/12
Return if P = 1 Return if p = 0
RRC
0F
1
4
Rotate a right without Carry
55
Bahasa Assembly Mnemonic RST 0 RST 1 RST 2 RST 3 RST 4 RST 5 RST 6 RST 7 RZ SBB B SBB C SBB D SBB E SBB H SBB L SBB M SBB A SBI d8 SHLD a16 SIM SPHL STA a16 STAX B STAX D STC SUB B SUB C SUB D SUB E SUB H SUB L SUB M SUB A SUI d8 XCHG XRA B XRA C XRA D XRA E XRA H XRA L XRA M XRA A XRI d8 XTHL
op- code
Bytes
Clocks
Function
C7 CF D7 DF E7 EF F7 FF C8 98 99 9A 9B 9C 9D 9E 9F DE-d8 22-ll-hh 30 F9 32-ll-hh 2 12 37 90 91 92 93 94 95 96 97 D6-d8 EB A8 A9 AA AB AC AD AE AF EE E3
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 3 1 1 3 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1
12 12 12 12 12 12 12 12 6/12 4 4 4 4 4 4 7 4 4 13 4 6 13 7 7 4 4 4 4 4 4 4 4 4 7 4 4 4 4 4 4 4 7 4 7 16
CALL 0000(H) CALL 0008(H) CALL 0010(H) CALL 0018(H) CALL 0020(H) CALL 0028(H) CALL 0030(H) CALL 0038(H) return if Z = 1 A = A - B - Cy A = A - C - Cy A = A - D - Cy A = A - E - Cy A = A - H - Cy A = A - L - Cy A = A - M - Cy A = A - A - Cy A = A - d8 - Cy (a16) = (HL) Set Interrupts SP = HL (a16) = (A) ((BC)) = (A) ((DE)) = (A) Cy = 1 A=A-B A=A-C A=A-D A=A-E A=A-H A=A-L A=A-M A=A-A A = A - d8 HL -------- DE A=A v B A=A v C A=A v D A=A v E A=A v H A=A v L A=A v M A=A v A A = A v d8 HL --------- STACK
56
Bahasa Assembly
Keterangan : --------- = saling dipertukarkan (
)
= Isi dari suatu alamat
( ( rp ) ) = Isi alamat dimana alamatnya terdapat pada pasangan register rp d8
= Data 8-bit
d16
= Data 16-bit
a16
= Alamat 16-bit
ll
= Alamat atau Data low byte
hh
= Alamat atau Data high byte
v
= Logika OR
^
= Logika AND
v
= Logika EX-OR
57
Bahasa Assembly
DAFTAR PUSTAKA
Andrew S. Tanenbaum, Structured Computer Organization, Prentice Hall: 1999. Kuswadi, Son, Bahasa Komputer (Bahasa Assembly), PENS-ITS dan JICA: Surabaya, 1993. Pardede, Morlan, Mikroprosessor dan Interface, Teknik Elektro Politeknik Medan, USU: Medan, 1998 Syarif, Iwan. Dan Riyanto Sigit, Bahasa Komputer I, PENS-ITS: Surabaya, 1999. William Stalling, Computer Organization & Architecture, Prentice Hall: 2000.
58