Mikroprosesor - 8086 Set Instruksi
Mikroprosesor 8086 mendukung 8 jenis instruksi -
- Instruksi Transfer Data
- Instruksi Aritmatika
- Instruksi Manipulasi Bit
- Instruksi String
- Instruksi Transfer Eksekusi Program (Instruksi Cabang & Loop)
- Instruksi Kontrol Prosesor
- Instruksi Kontrol Iterasi
- Instruksi Interupsi
Mari kita sekarang membahas set instruksi ini secara rinci.
Instruksi Transfer Data
Instruksi ini digunakan untuk mentransfer data dari operan sumber ke operan tujuan. Berikut adalah daftar instruksi di bawah grup ini -
Instruksi untuk mentransfer kata
MOV - Digunakan untuk menyalin byte atau kata dari sumber yang disediakan ke tujuan yang diberikan.
PPUSH - Digunakan untuk meletakkan kata di bagian atas tumpukan.
POP - Digunakan untuk mendapatkan kata dari atas tumpukan ke lokasi yang disediakan.
PUSHA - Digunakan untuk meletakkan semua register ke dalam stack.
POPA - Digunakan untuk mendapatkan kata-kata dari tumpukan ke semua register.
XCHG - Digunakan untuk bertukar data dari dua lokasi.
XLAT - Digunakan untuk menerjemahkan byte dalam AL menggunakan tabel di memori.
Petunjuk untuk transfer port input dan output
IN - Digunakan untuk membaca byte atau word dari port yang disediakan ke akumulator.
OUT - Digunakan untuk mengirimkan byte atau word dari akumulator ke port yang disediakan.
Instruksi untuk mentransfer alamat
LEA - Digunakan untuk memuat alamat operan ke register yang disediakan.
LDS - Digunakan untuk memuat register DS dan register lain yang disediakan dari memori
LES - Digunakan untuk memuat register ES dan register lain yang disediakan dari memori.
Instruksi untuk mentransfer register bendera
LAHF - Digunakan untuk memuat AH dengan byte rendah dari register flag.
SAHF - Digunakan untuk menyimpan register AH ke byte rendah dari register flag.
PUSHF - Digunakan untuk menyalin register bendera di bagian atas tumpukan.
POPF - Digunakan untuk menyalin kata di bagian atas tumpukan ke register bendera.
Instruksi Aritmatika
Instruksi ini digunakan untuk melakukan operasi aritmatika seperti penjumlahan, pengurangan, perkalian, pembagian, dll.
Berikut adalah daftar instruksi di bawah grup ini -
Instruksi untuk melakukan penjumlahan
ADD - Digunakan untuk menambahkan byte ke byte / kata ke kata yang disediakan.
ADC - Digunakan untuk menambahkan barang bawaan.
INC - Digunakan untuk menambah byte / kata yang disediakan sebesar 1.
AAA - Digunakan untuk mengatur ASCII setelah penambahan.
DAA - Digunakan untuk mengatur desimal setelah operasi penambahan / pengurangan.
Instruksi untuk melakukan pengurangan
SUB - Digunakan untuk mengurangi byte dari byte / kata dari kata.
SBB - Digunakan untuk melakukan pengurangan dengan meminjam.
DEC - Digunakan untuk mengurangi byte / kata yang disediakan sebesar 1.
NPG - Digunakan untuk meniadakan setiap bit dari byte / kata yang disediakan dan menambahkan komplemen 1/2.
CMP - Digunakan untuk membandingkan 2 byte / kata yang disediakan.
AAS - Digunakan untuk menyesuaikan kode ASCII setelah pengurangan.
DAS - Digunakan untuk mengatur desimal setelah pengurangan.
Instruksi untuk melakukan perkalian
MUL - Digunakan untuk mengalikan byte unsigned dengan byte / kata demi kata.
IMUL - Digunakan untuk mengalikan byte yang ditandatangani dengan byte / kata demi kata.
AAM - Digunakan untuk menyesuaikan kode ASCII setelah perkalian.
Instruksi untuk melakukan divisi
DIV - Digunakan untuk membagi kata unsigned dengan byte atau unsigned double kata demi kata.
IDIV - Digunakan untuk membagi kata yang ditandatangani dengan byte atau ditandatangani kata ganda demi kata.
AAD - Digunakan untuk menyesuaikan kode ASCII setelah pembagian.
CBW - Digunakan untuk mengisi byte atas kata dengan salinan bit tanda dari byte bawah.
CWD - Digunakan untuk mengisi kata atas dari kata ganda dengan tanda bit pada kata yang lebih rendah.
Instruksi Manipulasi Bit
Instruksi ini digunakan untuk melakukan operasi di mana bit data terlibat, yaitu operasi seperti logika, shift, dll.
Berikut adalah daftar instruksi di bawah grup ini -
Instruksi untuk melakukan operasi logis
NOT - Digunakan untuk membalik setiap bit atau kata.
AND - Digunakan untuk menambahkan setiap bit dalam byte / kata dengan bit yang sesuai dalam byte / kata lain.
OR - Digunakan untuk mengalikan setiap bit dalam satu byte / kata dengan bit yang sesuai dalam byte / kata lain.
XOR - Digunakan untuk melakukan operasi Exclusive-OR pada setiap bit dalam satu byte / kata dengan bit yang sesuai dalam byte / kata lain.
TEST - Digunakan untuk menambahkan operan untuk memperbarui bendera, tanpa mempengaruhi operan.
Instruksi untuk melakukan operasi shift
SHL/SAL - Digunakan untuk menggeser bit dari byte / word ke kiri dan meletakkan nol (S) di LSB.
SHR - Digunakan untuk menggeser bit byte / word ke arah kanan dan menempatkan nol (S) di MSB.
SAR - Digunakan untuk menggeser bit byte / word ke arah kanan dan menyalin MSB lama ke MSB baru.
Instruksi untuk melakukan operasi rotasi
ROL - Digunakan untuk memutar bit byte / word ke arah kiri, yaitu MSB ke LSB dan untuk Membawa Bendera [CF].
ROR - Digunakan untuk memutar bit byte / word ke arah kanan, yaitu LSB ke MSB dan untuk Membawa Bendera [CF].
RCR - Digunakan untuk memutar bit byte / word ke arah kanan, yaitu LSB ke CF dan CF ke MSB.
RCL - Digunakan untuk memutar bit byte / word ke arah kiri, yaitu MSB ke CF dan CF ke LSB.
Instruksi String
String adalah sekelompok byte / kata dan memorinya selalu dialokasikan dalam urutan yang berurutan.
Berikut adalah daftar instruksi di bawah grup ini -
REP - Digunakan untuk mengulang instruksi yang diberikan sampai CX ≠ 0.
REPE/REPZ - Digunakan untuk mengulang instruksi yang diberikan sampai CX = 0 atau bendera nol ZF = 1.
REPNE/REPNZ - Digunakan untuk mengulang instruksi yang diberikan sampai CX = 0 atau bendera nol ZF = 1.
MOVS/MOVSB/MOVSW - Digunakan untuk memindahkan byte / kata dari satu string ke string lainnya.
COMS/COMPSB/COMPSW - Digunakan untuk membandingkan dua string byte / kata.
INS/INSB/INSW - Digunakan sebagai string input / byte / kata dari port I / O ke lokasi memori yang disediakan.
OUTS/OUTSB/OUTSW - Digunakan sebagai string / byte / kata keluaran dari lokasi memori yang disediakan ke port I / O.
SCAS/SCASB/SCASW - Digunakan untuk memindai string dan membandingkan byte-nya dengan byte di AL atau kata string dengan kata di AX.
LODS/LODSB/LODSW - Digunakan untuk menyimpan string byte ke AL atau kata string ke AX.
Instruksi Transfer Eksekusi Program (Instruksi Cabang dan Loop)
Instruksi ini digunakan untuk mentransfer / mencabangkan instruksi selama eksekusi. Ini termasuk instruksi berikut -
Instruksi untuk mentransfer instruksi selama eksekusi tanpa syarat apapun -
CALL - Digunakan untuk memanggil prosedur dan menyimpan alamat pengirimnya ke stack.
RET - Digunakan untuk kembali dari prosedur ke program utama.
JMP - Digunakan untuk melompat ke alamat yang diberikan untuk melanjutkan ke instruksi berikutnya.
Instruksi untuk mentransfer instruksi selama eksekusi dengan beberapa kondisi -
JA/JNBE - Digunakan untuk melompat jika instruksi di atas / tidak di bawah / sama memuaskan.
JAE/JNB - Digunakan untuk melompat jika instruksi di atas / tidak di bawah memuaskan.
JBE/JNA - Digunakan untuk melompat jika instruksi di bawah / sama / tidak di atas memuaskan.
JC - Digunakan untuk melompat jika membawa bendera CF = 1
JE/JZ - Digunakan untuk melompat jika bendera sama / nol ZF = 1
JG/JNLE - Digunakan untuk melompat jika instruksi lebih besar / tidak kurang dari / sama memuaskan.
JGE/JNL - Digunakan untuk melompat jika lebih besar dari / sama / tidak kurang dari instruksi yang memuaskan.
JL/JNGE - Digunakan untuk melompat jika instruksi kurang dari / tidak lebih dari / sama memuaskan.
JLE/JNG - Digunakan untuk melompat jika kurang dari / sama / jika tidak lebih besar dari instruksi yang memuaskan.
JNC - Digunakan untuk melompat jika tidak ada bendera carry (CF = 0)
JNE/JNZ - Digunakan untuk melompat jika tidak sama / nol bendera ZF = 0
JNO - Digunakan untuk melompat jika tidak ada flag overflow OF = 0
JNP/JPO - Digunakan untuk melompat jika tidak paritas / paritas ganjil PF = 0
JNS - Digunakan untuk melompat jika tidak masuk SF = 0
JO - Digunakan untuk melompat jika bendera meluap OF = 1
JP/JPE - Digunakan untuk melompat jika paritas / paritas genap PF = 1
JS - Digunakan untuk melompat jika tanda bendera SF = 1
Instruksi Kontrol Prosesor
Instruksi ini digunakan untuk mengontrol tindakan prosesor dengan mengatur / mengatur ulang nilai bendera.
Berikut adalah instruksi di bawah grup ini -
STC - Digunakan untuk mengatur carry flag CF ke 1
CLC - Digunakan untuk menghapus / mengatur ulang bendera pembawa CF ke 0
CMC - Digunakan untuk menempatkan komplemen di negara bagian carry flag CF.
STD - Digunakan untuk mengatur arah flag DF ke 1
CLD - Digunakan untuk menghapus / mereset flag arah DF ke 0
STI - Digunakan untuk menyetel flag pengaktifan interupsi ke 1, yakni mengaktifkan input INTR.
CLI - Digunakan untuk menghapus flag pengaktifan interupsi ke 0, yaitu menonaktifkan input INTR.
Instruksi Kontrol Iterasi
Instruksi ini digunakan untuk menjalankan instruksi yang diberikan beberapa kali. Berikut adalah daftar instruksi di bawah grup ini -
LOOP - Digunakan untuk mengulang sekelompok instruksi sampai kondisi terpenuhi, yaitu CX = 0
LOOPE/LOOPZ - Digunakan untuk mengulang sekelompok instruksi sampai memenuhi ZF = 1 & CX = 0
LOOPNE/LOOPNZ - Digunakan untuk mengulang sekelompok instruksi sampai memenuhi ZF = 0 & CX = 0
JCXZ - Digunakan untuk melompat ke alamat yang diberikan jika CX = 0
Instruksi Interupsi
Instruksi ini digunakan untuk memanggil interupsi selama eksekusi program.
INT - Digunakan untuk menginterupsi program selama eksekusi dan layanan panggilan yang ditentukan.
INTO - Digunakan untuk menginterupsi program selama eksekusi jika OF = 1
IRET - Digunakan untuk kembali dari layanan interupsi ke program utama