Instruksi Perpindahan Data Miscellaneous Tak perlu bingung dengan istilah miscellaneous : instruksi ini digunakan dalam program. Instiuksi transfer data yang dijelaskan pada bagian ini adalah XCHG, LAHF, SAHF, XLAT, IN, OUT, BSWAP, MOVSX, MOVZX, dan CMOV. Karena tidak digunakan sesering instruksi MOV, instruksi miscellaneous ini dikelompokkan tersendiri dan dijelaskan pada bagian ini. NEXT
XCHG Instruksi XCHG (exchange) menukar isi suatu register dengan isi register atau lokasi memori yang lain. Instruksi XCHG tidak dapat menukar register segmen atau memori-ke-memori data. Pertukaran ini dapat berukuran byte, word, atau doubleword (80386 ke atas), dan dapat menggunakan setiap mode pengalamatan seperti yang didiskusikan pada Bab 3, kecuali pengalamatan immediate. Tabel 4-16 mernperlihatkan beberapa contoh instruksi XCHG. LAHF dan SAHF Instruksi LAHF dan SAHF jarang digunakan karena instruksi tersebut dirancang sebagai instruksi penghubung. Instruksi ini memungkinkan perangkat lunak 8085 (mikroprosesor 8-bit awal) diterjemahkan ke dalam perangkat lunak 8086 dengan menggunakan sebuah program penerjemah. Karena perangkat lunak yang membutuhkan terjemahan telah berakhir beberapa tahun yang lalu, instruksi tersebut hanya mempunyai sedikit aplikasi saat ini. Instruksi LAHF mentransfer delapan bit paling kanan register flag ke dalam register AH. Instruksi SAHF mentransfer register AH ke dalam delapan bit paling kanan register flag. NEXT
XLAT Instruksi XLAT (translate) mengubah isi register AL ke dalam suatu bilangan yang disimpan dalam suatu label memori. Instruksi ini melakukan teknik lookup tabel langsung yang sering digunakan untuk mengonversi satu kode ke kode yang lain. Instruksi XLAT pertama kali menjumlahkan isi AL dengan BL untuk membentuk suatu alamat memori yang terletak dalam segmen data. Instruksi ini kemudian menyalin isi alamat tersebut ke dalam AL. Instruksi ini merupakan satu-satunya instruksi yang menjumlahkan bilangan 8-bit dengan bilangan 16-bit. IN dan OUT Tabel 4-17 merupakan daftar bentuk instruksi IN dan OUT yang menjalankan operasi I/O. Perhatikan bahwa isi AL, AX, atau EAX hanya ditransfer antara peranti I/O dan mikroprosesor. Instruksi IN mentransfer data dan peranti I/O eksternal ke AL, AX, atau EAX; instruksi OUT mentransfer data dan AL, AX, atau EAX ke peranti I/O eksternal, (Perhatikan, hanya versi 80386 ke atas yang memunyai EAX). MOVSX dan MOVZX Instruksi MOVSX (move and sign extended) dan MOVZX (move and zero-extend) terdapat dalam set instruksi 80386-Pentium 4. Instruksi ini memindahkan data, dan pada waktu yang bersamaan menambahkan tanda atau not pada data tersebut. Tabel 4-18 mengilustrasikan instruksi ini dengan beberapa contoh pada masing-masing instruksi mi. NEXT
BSWAP Instruksi BSWAP (byte swap) hanya terdapat pada 80486 dan semua versi mikroprosesor Pentium. Instruksi ini mengambil isi register 32-bit dan menukar byte pertama dengan keempat, dan byte kedua dengan ketiga. Sebagai contoh, instruksi BSWAP EAX dengan isi EAX = 001 12233H menukar byte dalam EAX, sehingga EAX = 33221 100H. Perhatikan bahwa urutan keempat byte tersebut dibalik dengan instruksi 1. lnstruksi in digunakan untuk mengubah data dan bentuk big endian ke bentuk little endian, dan sebaliknya. CMOV Kelas instruksi CMOV (conditional move) merupakan instruksi baru pada set instruksi Pentium Pro dan Pentium II. Terdapat beberapa variasi dan instruksi CMOV. Tabel 4-19 memuat daftar variasi instruksi CMOV. Instruksi ini memindahkan data hanya jika kondisinya terpenuhi (true). Sebagai contoh, instruksi CMOVZ memindahkan data hanya jika hasil dan beberapa instruksi sebelumnya bernilai nol Register tujuan dibatasi hanya pada register 16-bit atau 32-bit, tetapi register asal dapat berupa register 16-bit atau 32-bit, atau lokasi memori. NEXT
GAMBAR 4-18 Sinyal-sinyal yang terdapat pada sistem berbasis mikroprosessor pada instruksi OUT 19H,AX. NEXT
TABEL 4-19 Instruksi perpindahan bersyarat Bahasa Assembly Kondisi yang dites Operasi CMOVB C = 1 Memindahkan jika di bawah CMOVAE C = 0 Memindahkan jika di atas CMOVBE Z = 1 atau C =0 Memindahkan jika di bawah atau sama CMOVA Z =0 dan C =0 Memindahkan jika di atas CMOVE atau CMOVZ Z = 1 Memindahkan jika sama atau lakukan set jika nol CMOVNE atau MOVNZ Z =0 Memindahkan jika tidak sama atau takukan set jika tidak nol CMOVL S<>O Memindahkan jika lebih kecil CMOVLE Z = 1 atau S = 0 Memindahkan jika lebih kecil atau sama CMOVG Z =0 dan S = 0 Memindahkan jika Iebih besar CMOVGE S =0 Memindahkan jika lebih besar atau sama CMOVS S = 1 Memindahkan jika ada sign (negatif) CMOVNS S = 0 Memindahkan jika tak ada srgn (positif) CMOVC C = 1 Memindahkan jika carry CMOVNC C =0 Memindahkan jika tak ada carry CMOVO 0= 1 Mpmindahkan Jika overflow CMOVNO 0=0 M~mindahkan jika tak ada overflow CMOVP atau CMOVPE P = 1 Meniindahkan jika ada paritas atau lakukan set jika paritas genap CMOVNP atau CMOVPO P =0 Memindahkan jika tak ada paritas atau lakukan set jika angka paritas ganjil NEXT
SEGMENT OVERRIDE PREFIX Segment override prefix, yang dapat ditambahkan di hampir semua instruksi pada berbagai mode pengalamatan memori, membuka peluang bagi programer untuk berpindah dan segmen default. Segment override prefix merupakan byte tambahan yang melampiri bagian depan instruksi untuk memilih suatu register segmen altematif. Instruksi yang tidak bisa diawali (diberi prefiks) adalah instruksi jump dan call yang harus menggunakan register segmen kode untuk pembuatan alamat. Segment override juga digunakan untuk memilih segmen FS dan GS pada mikroprosesor 80386 sampai Pentium 4. NEXT
yang termasuk segment override prefix TABEL 4-20 Instruksi yang termasuk segment override prefix Bahasa Assembly Segmen yang Diakses Segmen Default MOV AX,DS:[BP] Data Stack MOV AX,ES:[BP) Ekstra Stack MOV AX,SS:[DI] Stack Data MOV AX,CS:LIST Kode Data MOV AX,ES:[SI] Ekstra Data LODS ES:DATA1 Data Ekstra MOV EAX,FS:DATA2 Data FS MOV BLGS:[ECX] Data GS NEXT
DETAIL ASSEMBLER Assembler untuk mikroprosesor dapat digunakan dengan dua cara: (1) dengan model yang unik untuk assembler tertentu, dan (2) dengan definisi segmen-penuh (full-segmen definitions) yang memungkinkan pengaturan menyeluruh terhadap proses assembly dan bersifat universal untuk semua assembler. Bagian teks ini mempresentasikan kedua metode 1111, dan menjelaskan bagaimana mengatur ruang memori program dengan menggunakan assembler. Bagian ini juga menerangkan tujuan dan manfaat beberapa direktif penting yang digunakan assembler tersebut. Lampiran A menyediakan penjelasan tambahan mengenai assembler. NEXT
Program Sampel Contoh 4-20 menunjukkan sebuah program sampel, menggunakan definisi segmen-penuh, yang membaca karakter dari keyboard dan menampilkannya pada layar CRT. Meskipun tidak begitu penting, program ini mengilustrasikan sebuah program yang dapat dikerjakan secara penuh yang berfungsi pada komputer yang menggunakan DOS, dari yang paling awal yaitu sistem berbasis 8088 hingga sistem berbasis Pentium 4 terakhir. Program inijuga mengilustrasikan penggunaan beberapa fungsi panggilan DOS. (Lampiran A berisi daftar fungsi panggilan DOS beserta parameternya). Fungsi panggilan BIOS memungkinkan penggunaan keyboard, printer, disk drive dan perangkat lain yang terdapat pada sistem komputer Anda. NEXT
;An example program that reads a key and displays it. CONTOH 4-20 ;An example program that reads a key and displays it. ;Note that an @ key ends the program. ; 0000 CODE_SEG SEGMEN 'CODE' ASSUME CS:CODE_SEG 0000 MAIN PROC FAR 0000 B4 06 mov AH,6 ;readkey 0002 B2 FF MOV DL,OFPH 0004 CD 21 INT 21H 0006 74 F8 JE MAIN ;if no key 0008 3C 40 Cmp AL,,@, ;test for @ OOOA 74 08 JE MAIN1 ;if @ OOOC B4 06 M0V AH,6 ;display key OOOE BA DO MOV DL,AL 0010 CD 21 INT 21H 0012 EB EC JMP MAIN ;repeat 0014 MAIN1: 0014 B4 4C MOV AH,4CH ;exit to DOS 0016 CD 21 INT 21H 0018 MAIN ENDP 0018 CODE_SEG ENDS END MAIN NEXT
Buatlah tabel instruksi yang termasuk segment override prefix! Soal Apa yang dimaksud dengan instruksi perpindahan data, XCHG, LAHF dan SAHF, XLAT, IN dan OUT, MOVSX dan MOVZX, BSWAP serta CMOV! Gambarkan sinyal-sinyal yang terdapat pada sistem berbasis mikroprosesor pada instruksi OUT 19H,AX! Buatlah tabel instruksi yang termasuk segment override prefix! Buatlah contoh untuk menunjukkan sebuah program sampel, menggunakan definisi segmen-penuh, yang membaca karakter dari keyboard dan menampilkannya pada layar CRT! NEXT
TUTUP Terima Kasih