Instruksi Perpindahan Data PENDAHULUAN Bab ini akan menitikberatkan pada pembahasan mengenai instruksi perpindahan data. Instruksi perpindahan data meliputi MOV, MOVSX, MOVZX, PUSH, POP, BSWAP, XCHG, XLAT, IN, OUT, LEA, LDS, LES, LFS, LSS, LAHF, SAHF, dan instruksi string yaitu MOVS, LODS, STOS, INS, OUTS. Instruksi transfer data diimplementasikan terakhir pada Pentium Pro sampai Pentium 4 adalah instruksi CMOV (conditional move). Instruksi perpindahan data dijelaskan pertama kali karena kerap digunakan dalam program dan mudah dimengerti. Mikroprosesor membutuhkan program assembler, yang menghasilkan bahasa mesin, karena instruksi bahasa mesin terlalu kompleks dibuat secara efisien oleh manusia. Bab ini akan mendeskripsikan sintaks bahasa assembly dan beberapa direktifnya. [ Bahasan ini mengasumsikan pengguna mengembangkan perangkat lunak pada PC IBM atau sejenisnya. Pengguna disarankan untuk menggunakan Microsoft Macro Assembler (MASM) sebagai alat pengembangan meskipun tak menutup kemungkinan untuk memanfaatkan Intel Assembler (ASM), Borland Turbo Assembler (TASM) atau perangkat lunak lain yang mempunyai fungsi serupa. Versi terbaru dari TASM menyerupai program MASM. Bahasan ini menyajikan informasi yang berfungsi dalam assembler Microsoft MASM, tetapi sebagian besar program di- assembly tanpa modifikasi dengan assembler lain. Lampiran A menjelaskan assembler Microsoft dan menyediakan detailnya pada program linker dan Programmer’s WorkBench.] NEXT
Usai memelajari bab ini, Anda akan mampu untuk : TUJUAN BAB Usai memelajari bab ini, Anda akan mampu untuk : 1. Menjelaskan operasi setiap instruksi perpindahan data dengan mode pengalamatan yang dapat diaplikasikan. 2. Menjelaskan manfaat bahasa assembly pseudo-operations dan kata kunci seperti ALIGN, ASSUME, DB, DD, DW, END, ENDS, EQU, MODEL, OFFSET, ORG, PROC, PTR, SEGMENT, USE32, dan USES. 3. Memilih instruksi bahasa assembly yang sesuai untuk menyelesaikan tugas perpindahan data yang spesifik. 4. Menentukan opcode simbolik, sumber, tujuan, dan mode pengalamatan untuk instruksi bahasa mesin heksadesimal. 5. Menggunakan assembler untuk mengatur segmen data, segmen stack, dan segmen kode. 6. Memperlihatkan cara mengatur prosedur dengan menggunakan PROC dan ENDP. 7. Menjelaskan perbedaan antara model memori dan definisi segmen-penuh (full- segment) untuk assembler MASM. NEXT
TINJAUAN ULANG MOV Instruksi MOV, seperti yang telah dijelaskan dalam Bab 3, menjelaskan keragaman mode pengamatan 8086-Pentium 4. Pada bab ini, instruksi MOV memperkenalkan instruksi bahasa mesin yang terdapat dalam berbagai mode pengalamatan dan instruksi. Kode mesin turut diperkenalkan karena kadangkala memang dibutuhkan untuk menginterpretasikan program bahasa mesin yang dihasilkan oleh assembler. Interpretasi bahasa asli mesin (bahasa mesin) dapat menyebabkan debugging atau modifikasi pada level bahasa mesin. Terkadang, tambahan bahasa mesin dibuat dengan menggunakan program DEBUG yang tersedia dalam DOS, yang membutuahkan pengetahuan tertentu mengenai bahasa mesin. Konversi antara instruksi bahasa mesin dan assembly diilustrasikan dalam Lampiran B. NEXT
NEXT
PUSH/POP Intruksi PUSH dan POP merupakan intruksi penting untuk menyimpan dan mengambil kembali data dari memori stack secara LIFO (last-in, first-out). Mikroprosesor mempunyai enam bentuk intruksi PUSH dan POP, yaitu register, memori, immediate, register segmen, flag, dan semua register. Bentuk PUSH dan POP immediate serta PUSHA dan POPA (semua register) tidak terdapat pada mikroposesor 8086/8088 awal, dan hanya terdapat pada 80286 sampai Pentium 4. Pengalaman register memungkinkan isi register 16-bit ditransfer dari atau ke dalam stack. Pada 80386 ke atas, extended register 32-bit dan flag (EFLAGS) dapat juga dimasukan (push) dan dikeluarkan (pop) dari stack. Intruksi pengalamatan memori PUSH dan POP menyimpan isi lokasi memori 16-bit (atau 32-bit pada 80386 ke atas) dalam stack atau data stack ke dalam suatu lokasi memori. Pengalamatan immediate memungkinkan data immediate dimasukkan ke dalam stack, tetapi tidak dapat dikeluarkan dari stack. Pengalamatan register segmen memungkinkan isi setiap register segmen dimasukkan ke dalam stack atau dikeluarkan dari stack (CS dapat dimasukkan, tetapi data dari stack tidak pernah bisa dikeluarkan ke CS). Flag juga dapat dimasukkan dan dikeluarkan dari stack, demikian juga isi semua register. NEXT
NEXT
TABEL 4-7 Instruksi PUSH Simbol Contoh Catatan PUSH reg 16 PUSH BX Register 16-bit PUSH reg 32 PUSH EDX Register 32-bit PUSH mem 16 PUSH WORD PTR (BX) Pointer 16-bit PUSH mem 32 PUSH WORD PTR (EBX) Pointer 32-bit PUSH seg PUSH DS Register segmen PUSH imm 8 PUSH ‘,‘ immediate 8-bit PUSH imm 16 PUSHW 1000H immediate 16-bit PUSH imm 32 PUSHD 20 immediate 32-bit PUSHA PUSHA Menyimpan semua register 16-bit PUSHAD PUSHAD Menyimpan semua register 32-bit PUSHF PUSHF Menyimpan flag PUSHFD PUSHFD Menyimpan EFLAG NEXT
PENGISIAN ALAMAT EFKTIF Terdapat beberapa instruksi pengisian alamat efektif dalam set instruksi mikroprosesor. Instruksi LEA mengisi register 16-bit dengan lamat, seperti yang ditentukan oleh mode pengalamatan yang dipilih untuk instruksi. Variasi LDS dan LES mengisi setiap register 16-bit dengan alamat offset yang diperoleh dari suatu lokasi memori. Pada 80386 ke atas, LFS, LGS, dan LSS ditambahkan ke set instruksi, dan register 32-bit dapat dipilih untuk menerima offset 32-bit dari memori. Tabel 4-9 berisi daftar instruksi pengisian alamat efektif. NEXT
NEXT
CONTOH 4-4 .MODEL SMALL : select SMALL model .386 ; select 80386 0000 .DATA ; start of DATA segment 0000 00000000 SADDR DD 7 ; old stack address 0004 1000 [ SAREA DW 1OO0H DUP (?) ; new stack area 0000 ] 2004 = 2004 STOP EOU THIS WORD ; define to of new stack 000O .CODE ; start of CODE segment .STARTUP ; start of program 0010 FA CLI ; disable interrupt OO11 8B C4 MOV AX,SP ; save old SP OO13 A3 0000 R MOV WORD PTR SADDR,AX OO16 8C DO MOV AX,SS ; save old SS 0018 A3 0002 R MOV WORD PTR SADDR+2.AX O01B 8C D8 MOV AX.DS ; load new SS 00ID 8E DO MOV SS.AX OQ1F B8 2004 R MOV AX,OFFSET STOP ; load new SP 0022 8B EO MOV SP,AX 0024 FB STI ; enable interrupt 0025 8B CO MOV AX,AX ; do dummy instructions 0027 8B CO MOV AX,AX 0029 OF B2 26 0000 R LSS SP,SADDR ; load old SS and SP .EXIT ; exit to DOS END ; end of file NEXT
PERPINDAHAN DATA STRING Terdapat Lima instruksi transfer data string: LCDS, STOS, MOVS, INS, dan OUTS. Setiap instruksi string memungkinkan transfer data berupa byte, word, atau doubleword (atau jika diulang, satu blok byte, word, atau doubleword). Sebelum instruksi string dijelaskan, operasi bit flag D (direction), DL, dan SI harus dipahami terlebih dahulu sebagaimana penggunaan flag tersebut dalam instruksi string. NEXT
TABEL4-10 Bentuk instruksi LODS. Bahasa Assembly Operasi LODSB AL = DS:[SI]; SI = SI ± 1 LODSW AX = DS:[SI]; SI = SI ± 2 LODSD EAX = DS:[SI]; SI = SI ± 4 LODS LIST AL = DS:[SI]; SI = SI ± 1 [jika LIST adalah sebuah byte] LODS DATA1 AX = DS:[SIJ; SI = SI ± 2 [jika DATA adalah sebuah word] LODS FROG EAX = DS:[SIJ; SI = SI ± 4 [jika FROG adalah sebuah doubleword] Catatan: segmen dapat di-override dengan segment override prefix seperti pada LODS ES:DATA4. NEXT
GAMBAR 4-16 Operasi instruksi LODSW jika DS = 1000H, D = 0, 11000H = 32, dan 11001H = AO. Instruksi ini diperlihatkan setelah AX diisi dari memori, tetapi sebalum SI dinaikan 2. NEXT
Soal Gambarkan instruksi MOV WORD PTR [BX + 1000H], 1234H yang dikonversi ke dalam bahasa mesin biner! Buatlah tabel dari instruksi PUSH! Gambarkan operasi instruksi LODSW jika DS = 1000H, D = 0, 11000H = 32, dan 11001H = AO. NEXT
TUTUP Terima Kasih