Snr
BAB 3
Instruksi Pemindahan Data
ES
PENDAHULUAN
Dalam bab ini, kita akan mempelajari semua instruksi pemindahan data 8086/
8088. Ini mencakup: MOV, PUSH, POP, XCHG, XLAT, IN, OUT, LEA, LDS,
LES, LAH, SAHF dan string MOVS, LODS, dan instruksi STOS. Kami menya-
Jikan instruksi pemindahan data pertama karena mereka mungkin paling sering
digunakan dan paling mudah dipahami dan dikuasai.
Kami juga akan mempelajari secara rinci beberapa pseudo-operasi bahasa
rakitan. Mikroprosesor 8086/8088 hampir selalu membutuhkan suatu tipe perakit
Karena instruksi bahasa mesin begitu kompleks untuk dibentuk. (Teks ini meng-
anggap bahwa si pemakai sedang mengembangkan software bahasa rakitan pada
komputer personal IBM dengan perakit MACRO atau sistem software yang mi-
rip. Apendiks di belakang menjelaskan secara singkat perakit itu dan memberikan
suatu rincian mengenai linker).
Akhimya, kami akan menjelaskan format yang diminta untuk menghasilkan
instruksi bahasa mesin, karena kadang-kadang jika perlu kita menginterpretasi-
kan suatu dump heksadesimal dari kode mesin.
TUJUAN
Setelah mempelajari bab ini, anda akan mampu:
64Instruksi Pemindahan Data 65
1. Menjelaskan operasi setiap instruksi pemindahan data dengan semua mode
addressing yang bisa diterapkan.
2. Menjelaskan tujuan dari beberapa pseudo operasi bahasa rakitan dan kata-
kata kunci seperti EQU, DB, DW, DD, ALIGN, OFFSET, ASSUME, ORG.
3. Dengan tugas pemindahan data tertentu, anda bisa memilih instruksi bahasa
rakitan 8086/8088 yang tepat untuk mendapatkannya.
4. Dengan instruksi bahasa mesin heksadesimal, anda bisa tentukan opcode
simbolis, sumber, tujuan dan mode addressing.
ee
MOV YANG DIULANG
Kita menggunakan instruksi MOV dalam Bab 2 untuk menjelaskan mode ad-
dressing 8086/8088. Dalam bab ini, kita akan menggunakannya untuk menjelas-
kan bentuk bahasa mesin yang tersedia bagi si programer untuk berbagai mode
addressing. Kita memperkenalkan kode mesin karena kadang-kadang kita perlu
menginterpretasikan bila suatu program yang dihasilkan oleh sebuah perakit
membutuhkan instruksi bahasa rakitan dalam Apendiks A.
Bahasa Mesin
Instruksi bahasa mesin untuk 8086/8088 bervariasi panjangnya mulai dari |
hingga 6 bytes. Meskipun tampaknya ini adalah suatu pengaturan yang tidak bisa
diatasi, terdapat suatu urutan untuk bahasa mesin mikroprosesor ini.
Pertama, byte 1 dari semua instruksi bahasa mesin adalah opcode, yang me-
nunjukkan operasi (penambahan, pengurangan, dsb), yang dilakukan oleh mikro-
prosesor. Gambar 3-1 menggambarkan bentuk umum opcode untuk sebagian
besar instruksi bahasa mesin 8086/8088. Di sini 6 bit pertama dari byte | adalah
opcode, dan yang sisanya 2 bit menunjukkan arah (D) dari arus data dan apakah
data itu adalah byte atau kata (W). Jika D = 1, arus data ke register (REG) yang
diuraikan dalam byte 2, dan jika D = O, arus data dari register yang diuraikan da-
lam byte 2. Jika W = 0, opcode melakukan operasi pada byte, dan jika W = 1,
opcode beroperasi pada kata.
Gambar 3-2 menggambarkan byte 2, yang digunakan untuk menguraikan
mode operasi (MOD), register (REG), dan lokasi memori atau register (R/M) di
mana dia beroperasi.66 Pengantar Mikroprosesor
MOD Field, Mod field memilih salah satu dari berbagai macam bentuk ad-
dressing dan displacement atau operasi untuk instruksi. Bentuk-bentuk ini dicatat
dalam Tabel 3-1. Jika MOD field mengandung 11, R/M field dari byte 2 mena-
ngani suatu register, dan jika MOD field mengandung 00, 01, atau 10, R/M me-
ngacu pada satu dari sejumlah mode operasi memori-addressing, Bila MOD me-
milih mode addressing memori, dia menunjukkan bahwa mode addressing tidak
mengandung (00), suatu displacement tanda yang diperluas (01), atau displace-
ment 16-bit (10).
piw
Opeode
GAMBAR 3-1 Byte I dari sejumlah instruksi bahasa mesin, yang menggambarkan posisi opcode,
D, dan W.
MOD REG
GAMBAR 3-2. Byte 2 dari sejumlah instruksi bahasa mesin, menggambarkan posisi MOD, REG,
dan R/M field.
mop OPERATION
00 No displacement
on S-bit sign-extended displacement
10 16-bit displacement
1" A register
—
TABEL 3-1 Spesifikasi field MODInstruksi Pemindahan Data 67
Semua displacement 8-bit diperluas dengan tanda menjadi displacement 16-
bit di dalam mikroprosesor 8086/8088. Jika displacement 8-bit adalah OOH-7FH
(positif), dia diperluas dengan tanda menjadi 0000H-007FH, dan jika dia 80H-
FFH (negatif), dia diperluas dengan tanda menjadi FF80H-FFFH. Dengan kata
lain, bila sebuah bilangan diperluas dengan tanda, bit tanda dikopi ke dalam byte
order yang lebih tinggi berikutnya.
Register Assignments. Tabel 2-3 mencatat register assignment untuk field REG
maupun field R/M jika MOD = 11. Perhatikan bahwa tabel ini berisi dua daftar
register assignment: satu digunakan jika W = 1 untuk kata-kata, dan yang satunya
digunakan bila W = 0 untuk bytes.
Misalkan instruksi 2-byte, 8BECH ditemukan dalam sebuah prigram bahasa
mesin, Instruksi ini diubah ke dalam biner dan ditempatkan di format instruksi
untuk bytes 1 dan 2 seperti yang digambarkan pada Gambar 3-3. Opcode adalah
100010. Jika anda melihat Apendiks A, yang mencatat instruksi bahasa mesin,
anda akan melihat bahwa ini adalah opcode untuk instruksi KOV. Juga perhatikan
bahwa baik bit D maupun W adalah 1, yang berarti bahwa kata dipindahkan ke
dalam register yang dijelaskan di dalam field REG. REG berisi 101, yang menun-
jukkan register BP, sehingga instruksi MOV memindahkan data ke dalam BP.
Karena field MOD berisi 11, field R/M menunjukkan suatu register. R/M = 100
(SP), sehingga instruksi ini memindahkan data dari SP dan BP dan ditulis dalam
bentuk simbolis sebagai MOV BP.SP.
R/M Memori Addressing. Sika field MOD berisi 00, 01, atau 10, maka field
R/M mempunyai arti yang baru. Tabel 3-3 mencatat mode-mode addressing-me-
mori untuk field R/M.
Perhatikan bahwa semua mode addressing yang ditunjukkan dalam Bab 2 di-
catat di dalam tabel ini. Displacement yang dibahas dalam Bab 2 ditentukan oleh
field MOD. Jika MOD = 00 dan RM = 101, mode addressing adalah [D1], namun
jika MOD = 01 atau 10, maka mode addressing adalah, misalnya, displacement
[DI atau DATA(DI).
Mode Addressing Khusus. Ada mode addressing khusus yang tidak muncul
dalam Tabel 3-1, 3-2, atau 3-3, yang digunakan bila data memori ditunjukkan
hanya oleh displacement — misalnya, instruksi MOV (1000H), DL atau MOV
DATA, DL. Instruksi dalam contoh pertama memindahkan isi DL ke dalam
lokasi memori yang ditangani oleh jumlah displacement 1000H dn DS x 10H.68 Pengantar Mikroprosesor
Opcoue
D
w
op
REG
RAL
[laos
1
T
tot
Opeade = MOV
REG = BP
R/M = SP
"REG?
Mis regiver
Gambar 3-3 menggambarkan versi bahasa mesin dari instruksi MOV DL. [DI]. Instruksi ini
panjangnya 2 bytes dan memiliki opcode 100010.D = I (untuk meregister dari R/M),
MOD = 00 (tidak ada displacement), REG = 010 (DL), dan R/M = 101 [DI].
TF _
Code W = 0 (Byte)
o11
100
101
110.
11
AL
cL
OL
BL
AH
CH
DH
BH
AX
cx
Dx
BX
sP
BP
st
o
W = 7 (Word)
eT
TABEL 3-2 REG dan R/M Assignment (bila MOD = 11)
W=0 (byte),
Bila suatu instruksi memiliki hanya satu displacement, field MOD selalu 00 dan
field R/M selalu 110. Kombinasi ini diharapkan akan menunjukkan bahwa in-
struksi itu tidak memiliki displacement dan menggunakan mode addressing (BP),
namun anda sebenarnya tidak bisa menggunakan mode addressing (BP) tanpa
displacement. Perakit melakukan hal ini dengan menggunakan secara otomatis
suatu displacement 8-bit (MOD = 01) ooH bila bentuk addressing (BP) digunakan
—(BP +0).
Gambar 3-5 menggambarkan pola bit biner yang dibutuhkan untuk memecah-
kan kode (encode) MOV [1000H], instruksi DL ke dalam bahasa mesin. Jika
individual tidak mengetahui bentuk khusus addressing ini, instruksi ini dianggap
tidak benar sebagai MOV [BP],DL.Instruksi Pemindahan Data 69
—_——_
Code Function
000 {Bx + SI]
001 (BX + DI]
010 (er + Sl]
ont (BP + On
100 (sil
101 (oH
110 (ery
a1 {Bx}
——_——_—
"See text under Special
Addressing Mode.
TABEL 3-3 Mode-mode addressing-memori R/M
Gambar 3-6 menunjukkan bentuk apa yang dihasilan oleh perakit untuk in-
struksi MOV[BP},DL. Ini adalah instruksi 3-byte dengan byte ketiga digunakan
sebagai displacement 00H.
Instruksi Immediate (Langsung). Misalkan bahwa instruksi MOV WORD
PTR [BX + 1000H], 1234H dikodekan ke dalam bahasa mesin. Instruksi ini me-
mindahkan 1234E1 ke dalam kata memori yang ditangani oleh jumlah 1000H, BX,
dan DS x 10H. Instruksi 6-byte menggunakan 2 bytes untuk menguraikan opcode,
D, W, MOD, REG dan R/M; 2 bytes untuk nilai data 1234H, dan 2 bytes untuk
nilai displacement 1000H. Gambar 3-7 menggambarkan pola bit yang diberikan
pada setiap 6 bytes instruksi ini.
Instruksi MOV Segmen. Tika isi register segmen dipindahkan oleh instruksi
MOV, PUSH atau POP, suatu set register bit khusus (field REG) memilih register
segmen yang tepat (lihat Tabel 3-4).
Gambar 3-8 | menggambarkan instruksi MOV BX,CS. Perhatikan bahwa op-
code untuk tipe MOV ini berbeda dengan instruksi MOV lainnya yang dibahas
sejauh ini.
Meskipun ini belum merupakan pembahasan yang lengkap mengenai koding
bahasa mesin, namun ini akan merupakan suatu awal yang baik dalam pemrogra-
man bahasa mesin. Ingat, program ini selalu ditulis dalam bahasa mesin simbolik
(bahasa rakitan) dan diterjemahkan oleh sebuah program yang disebut assembler70 Pengantar Mikroprosesor
Opcode DW MOD REG RM
CC
Opcode = Mov
D = To register (REG)
W = Byte
MOD = No displacement
REG = DL
RIM = [DI]
IDO DOCNOE
GAMBAR 3-4 Instruksi MOV DL,[DI] dikodekan ke dalam bahasa mesin biner,
Opcode DW MOD REG RM
Byte 1 Byte 2
eee
09000000 0//oav0to0000
Byte 3 Byte 4
GAMBAR 3-5 _Instruksi MOV [1000H], DL dikodekan ke dalam bahasa mesin biner. Perhatikan
‘bahwa dua bytes tambahan dibutuhkan untuk displacement 1000H.
Opode «DW MOD REG RM
[vototo"ofofo] [ov tfo op o
Bye | Byte 2
S-bit displacement
oo0000000
Byte 3
GAMBAR 3-6 _Instruksi MOV,DL dikodekan ke dalam bahasa mesin biner membutuhkan dis-
placement I-byte 00H agar 8086/8088 bisa melakukan instruksi itu.Instruksi Pemindahan Data 71
opcode W MOD eM
Bye 1 Bue?
Dinplacement—How Diplacement—high
0000000 0;/j00010000
Bytes Bue
Data—lon Daia—mish
oT oT oo] [oo 0 1.0.0 10
Bytes Byte 6
‘Note: D and REG are not used in immediate memory addressing.
GAMBAR 3.7. Kata MOV PTR[PBR + 1000H], instruksi 1234H diubah menjadi bahasa mesin
biner membutuhkan 6 bytes memori: 2 untuk instruksi, 2 untuk displacement 1000H, dan 2 untuk
data intermediate 1234H.
Code Segment
Register
000 Es
001 cs
010 ss
o11 ps
“MOV CS,XX and POP
CS are not allowed.
TABEL 3.4 Bits seleksi register segmen
(perakit), atau kadang-kadang, oleh tangan pada bahasa mesin biner. Dengan
8086/8088, kita berharap sebuah perakit akan tersedia untuk perubahan karena
proses ini sangat memakan waktu.72 Pengantar Mikroprosesor
3-2
Opeode MOD REG RM
rooortraolfs
ootford
Note: Wand D are not prevent in thts instruction.
GAMBAR 3-8 _Instruksi MOV BX,CS dibuah ke dalam bahasa mesin biner. Di sini REG di-en-
code sebagai register CS dan R/M di-encode sebagai register BX.
PUSH/POP
PUSH dan POP adalah instruksi penting yang digunakan untuk menyimpan dan
menarik data dari memori stack LIFO. Mikroprosesor 8086/8088 memil empat
bentuk instruksi PUSH dan POP: register, register/memori, segmen register, dan
flags.
Register addressing memungkinkan isi semua register 16-bit ditransfer ke atau
dari stack. Register/memori addressing menyimpan baik isi dari register 16-bit
maupun lokasi memori pada stack. Segmen register addressing memungkinkan
setiap segmen register didorong ke atas stack dan semua kecuali kode segmen
register (CS) ditarik dari stack. Bentuk yang terakhir, flag addressing, memung-
kinkan register flas atau status ditransfer antara register flag dan stack.
PUSH
Instruksi PUSH selalu mentransfer 2 byte data ke dalam stack. Sumber datanya
bisa register flag, setiap register internal 16-bit, semua register segmen, atau se-
mua 2 bytes memori data.
Bila data dipaksakan masuk ke dalam stack, byte data pertama (yang paling
penting) disimpan di dalam segmen stack pada lokasi yang diaddress oleh SP-1.
Byte data kedua (yang kurang penting) disimpan di dalam segmen stack pada
lokasi yang di-addrress oleh SP-2. Setelah data disimpan dengan PUSH, register
SP di-dekrementasi oleh 2. Gambar 3-9 menggambarkan operasi instruksi PUSH
AX, yang mentransfer kopi dari isi register AX ke dalam stack ([SP - 1] = AH,
[SP - 2] = AL, dan SP = SP - 2).Instruksi Pemindahan Data 73
Stack segment
FFF
Ax 6ABS
L~H
SE = — aS
03800
pefore PUSH AX 037FF
a. 0800 ‘Riter PUSH, axt 037FE
Sa _ ‘SP = 1FE
c L—— oS
—OooTCEerY)
ps
SS 0300
eee need | 03000
GAMBAR 3-9 Dampak dari instruksi PUSH AX pada register SP dan lokasi memori stack
037FFH dan 037FEH.
Tabel 3-5 mencatat empat bentuk instruksi PUSH yang ada pada mikropro-
sesor 8086/8088 selain juga pola bit biner setiap byte pada setiap perintah.
PUSHF
Instruksi PUSHF mengkopi isi dari register flag pada stack. Seperti instruksi
PUSH, PUSHE menyimpan porsi yang paling penting dari flag ke dalam stack
pada lokasi SP - 1 dan poris yang kurang penting pada SP - 2. Setelah menyimpan
register flag, register SP didekrementasi oleh 2
POP
Instruksi POP melakukan operasi inversi dari instruksi PUSH. POP memindah-
kan data dari stack dan menempatkannya ke dalam register sadaran, flag atau
lokasi memori kata. Seperti instruksi PUSH, POP tersedia dalam empat bentuk:
register, register/memori, segmen register, dan flags.74 Pengantar Mikroprosesor
‘Anggaplah bahwa instruksi POP BX dilakukan, Byte data pertama dipinda-
hkan dari memori stack (lokasi memori yang diaddress oleh SP) dan ditempatkan
dalam register BL. Byte kedua dipindahkan dari lokasi SP + 1 dan ditempatkan
dalam register BH. Setelah kedua byte dipindahkan dari stack, pointer stack
diinkrementasi oleh 2. Gambar 3-10 secara grafis menggambarkan operasi in-
struksi POP BX.
Tabel 3-6 mencatat opcode, komposisi dan contoh setiap tipe instruksi POP.
Perhatikan bahwa instruksi POP CS tidak diperbolehkan.
Menginisialisasi Stack
Bila area stack diinisialisasi, baik register segmen stack (SS) maupun pointer
stack (SP) dimasukkan, Biasanya, kita biasa menunjukkan area memori sebagai
segmen stack dengan memasukkan SS dengan lokasi dasar dari segmen stack.
Misalnya, jika segmen stack akan menduduki lokasi memori 10000H-1 FF-
FFH, maka register SS dimasukkan dengan 1000H. (Ingat bahwa mikro-
prosesor menggandakan isi dari register segmen oleh 10H untuk mendapatkan
address memori segmen yang sebenarnya), Untuk memulai stack pada bagian
atas segmen stack, pointer stack (SP) dimasukkan dengan 0000H. Gambar
3-11 menggambarkan bagaimana nilai ini menyebabkan data dipaksa masuk
ke atas segmen stack dengan instruksi PUSH CX. Ingat bahwa semua segmen
adalah bersifat siklus, yaitu lokasi atas sebuah segmen berkaitan dengan lokasi
dasar segmen.
————
Symbolic Byte 1 Byte 2 Example
PUSH reg 0101 Orrr PUSH BX
PUSH mem 11171111 mmttQaaa_—- PUSH [BX]
PUSH seg 000s s110 PUSH DS
PUSHF 1001 1100 PUSHF
LE _
Notes: aaa = any memory addressing mode, mm = MOD code,
Mr = any 16-bit register, and ss = any segment register.
TABEL 3-5 _Instruksi PUSH.Instruksi Pemindahan Data
Stack segment
° 1006
Before POP BX
9,
By
SY
a
DS)
s (0000
—>|
GAMBAR 3-10 POP BX memindahkan 2 byte data dari segmen stack dan meletakkannya ke
dalam register BX.
—_——
Symbolic ‘Byte 1 Byte 2 Example
POP reg 0101 tnrr POP DI
POP mem 10001111 mm000aaa_ POP [DI + 2}
POP seg 000s s111 POP ES
POPF 1001 1101 POPF
ae CO
—_—_——_—_
‘Notes: aaa = any memory addressing mode, mm = MOD code.
irr = any 16-bit register, and ss = any Segment register.
TABEL 3-6 _Instruksi POP
—
3-3 ADDRESS LOAD-EFEKTIF
‘Ada tiga instruksi address load-efektif yang digunakan untuk memasukkan suatu
register atau register dan segmen register dengan address. Perhatikan bahwa suatu
OFFFF
01008
01007
01006
‘0000076 Pengantar Mikroprosesor
ax)
BX
address dimasukkan ke dalam register dengan instruksi ini, bukan data dari
address ini. Tabel 3-7 mencatat tiga bentuk address load-efektif yang ada pada
8086/8088.
LEA
Instruksi LEA digunakan untuk memasukkan suatu register dengan address data
yang dijelaskan oleh operand. Seperti pada contoh dalam Tabel 3-7, address
operand DATA dimasukkan ke dalam register AX, bukan isi dari address DATA.
Dengan membandingkan LEA dengan MOV, kita bisa mengamati dampak
berikut ini: LEA BX. [DI] memasukkan address yang dijelaskan oleh [DI] (isi
dari Di) ke dalam register BX; MOV BX,[DI] memasukkan data yang tersimpan
pada lokasi memori yang ditangani oleh [DI] ke dalam register BX.
Sebelumnya dalam teks ini, kita mempertimbangkan beberapa contoh yang
melibatkan pseudo-operasi OFFSET, yang pada dasarnya melakukan fungsi yang
sama sebagai instruksi LEA untuk address operand yang lebih sederhana. Misal-
Stack segment -——\
30
7
SSS 10000 |
GAMBAR 3-11 PUSH CX menggambarkan sifat siklus dari segmeri stack. Perhatikan bahwa SP
dimulai pada 0000H dan, setelah didekrementasi, berakhir pada FFFEH.Instruksi Pemindahan Data 77
Symbolic Function
LEA AX,DATA —_AX is loaded with the address at DATA
LDS DILLIST —_DI_and DS are loaded with the address at LIST
LES BX,CAT —_BX and ES are loaded with the address at CAT
TABEL 3-7 _Instruksi address load-efektif.
nya, MOV BX.OFFSET LIST melakukan fungsi yang sama sebagai LEA BX.
LIST. Kedua instruksi ini memasukkan address offset lokasi memori LIST ke
dalam register BX.
Namun mengapa pseudo-operasi OFFSET tersedia jika instruksi LEA mela-
kukan tugas yang sama? Pertama, OFFSET bisa digunakan hanya untuk operand
yang sederhana seperti LIST, DATA, dan semacam itu. Dia tidak bisa digunakan
untuk operand seperti [DI], LIST[SI]. Pseudo-operasi OFFSET lebih efsien dari-
pada instruksi LEA yang sederhana. Mikroprosesor 8086/8088 membutuhkan
waktu yang lebih lama untuk melaksanakan instruksi LEA BX,LIST daripada
waktu yang dibutuhkannnya untuk melaksanakan MOV BX,OFFSET LIST.
(LEA BX.LIST membutuhkan waktu delapan clock sedangkan MOV BX.OFF-
SET LIST membutuhkan waktu empat clock.) Instruksi MOV BX.OFFSET LIST
berjalan dua kali lebih cepat daripada instruksi LEA BX, LIST karena perakit
menghitung address offset dan menggunakan instruksi MOV langsung untuk
memasukkan BX bukan meminta mikroprosesor untuk menghitung address offset
seperti halnya dia menghitung instruksi LEA.
Anggaplah bahwa 8086/8088 melakukan suatu instruksi LEA BX,{DI] dan DI
berisi 1000H. Karena address offset disimpan di dalam DI, mikroprosesor men-
transfer kopi DI ke dalam BX. Ini dicapai dengan instruksi MOV BX,DI jika
efisiensi menjadi tujuan yang ingin dicapai dalam suatu program.
Contoh lain adalah LEA CX, [BX + DI]. Di sini address offset adalah
jumlah BX dan DI. Pelaksanaan instruksi ini memasukan CX dengan modulo-
64K jumlah dari BX + DI. Jika BX = 1000H dan DI = 2000H, address offset
dimasukkan ke dalam CX adalah 3000H, dan jika BX = 1000H dan DI =
FFOOH, address offset dimasukkan ke dalam CX adalah OFOOH. Perhatikan
bahwa hasilnya di sini adalah modulo-64K. (Setiap pelaksanaan hasil 16-bit
dibatalkan).78 Pengantar Mikroprosesor
LDS dan LES
Instruksi LDS dan LES memasukkan register 16-bit dengan address offset dan
baik register segmen DS maupun ES dengan address segmen yang baru. Instruksi
ini menggunakan setiap mode memori-addressing yang berlaku untuk memilih
lokasi dari address offset yang baru dan bilangan segmen. Mereka tidak boleh
meng- gunakan register (MOD = 11).
Misalnya, seperti ditunjukkan Gambar 3-12, instruksi LDS BX,[DI] akan
mentransfer bilangan 32-bit yang ditangani oleh register DI menjadi register BX
dan register DS. Instruksi LDS dan LES menunjuk pada suatu segmen data baru
atau segmen tambahan dan juga memasukkan register khusus dengan address
offset yang baru. Kami akan menggambarkan instruksi ini pada bab ini dengan
menggunakan instruksi manipulasi string. Perhatikan bahwa address yang di-
Data segment
1 FFF
ax
ax OF2A = *
a oe
B 1003
0 11002
2 oF 11004
st 2A 1000
bi 1900
ee
La
. ne
bs To00
ST _] 10000
GAMBAR 3-12 LDS BX, [DI] memasukkan register BX dari lokasi 11000H dan 11001H dan
register DS dari lokasi 11002H dan 11003H. Instruksi ini akan megubah segmen data dari 10000H-
1FFFFH ke 89300H-992FFH.Instruksi Pemndahan Data 79
masukkan ke dalam register harus disimpan di dalam memori sebelum instruksi
LDS dan LES bisa digunakan untuk memasukkan address dari memori.
Ee
TRANSFER DATA STRING
Ada tiga instruksi transfer data string — LODS, STOS, dan MOVS — masing-
masing memungkinkan data ditransfer dalam bentuk blok atau kelompok atau
byte atau kata tunggal. Namun, sebelum kita membahas instruksi ini, marilah kita
pelajari mula-mula fungsi dari flag arah (D) dan register segmen seperti yang
diterapkan pada register DI dan SI untuk operasi string.
Flag Arah (D)
Flag Arah (D) memilih mode operasi auto-inkrementasi (D = ) atau auto-dekre-
meritasi (D = 1) untuk DI dan SI selama operasi string. Flag D dibebaskan dengan
instruksi CLD dan diatur dengan instruksi STD. Sebab itu CLD memilih auto-
inkrementasi dan ST memilih auto-dekrementasi.
Transferal suatu byte dengan instruksi string menyebabkan penambahan
(auto-inkrementasi) atau pengurangan (auto-dekrementasi) 1 dari DI dan/atau SI.
Transferal suatu kata menyebabkan penambahan atau pengurangan 2. Hanya
register yang digunakan untuk instruksi string yang diinkrementasi atau didekre-
mentasi. Jika DI digunakan namun SI tidak, maka hanya Dilah yang diinkremen-
tasi atau didekrementasi bila instruksi string dilaksanakan.
Di dan SI
Selama pelaksanaan instruksi string, kita mungkin bisa mengakses memori
melalui register DI dan SI atau keduanya, Address offset DI biasanya ditem-
patkan di dalam segmen ekstra (ES), dan address offset SI di dalam segmen
data (DS). Tugas segmen dari register SI mungkin diubah oleh prefiks over-
ride segmen, yang dibahas dalam bagian selanjutnya dalam bab ini. DI selalu
ditempatkan dalam segmen tambahan dan tidak bisa diubah ke segmen lain-
nya.80
Pengantar Mikroprosesor
LODS
Instruksi LODS memasukkan AL dengan byte data dari lokasi memori yang
ditangani oleh SI atau AX dengan kata data yang ditangani oleh SI. Tabel 3-8
mencatat bentuk yang mungkin dari instruksi LODS. LODSB dan LODSW
menyebabkan transfer byte atau kata; LODS diikuti oleh suatu operand memilih
transfer byte atau kata. Operand sering dijelaskan sebagai bytes dengan DB dan
sebagai kata dengan DW. DB adalah pseudo-operasi yang menjelaskan bytes dan
DW adalah pseudo-operasi yang menjelaskan kata.
Symbolic Function
Lops AL = [SI], byte transfer
Lopsw A
LODS BYTE AL
LODS WORD AX
[SI], word transfer
SI], if BYTE is defined as a byte
[SI], if WORD is defined as a word
TABEL 3-8 Bentuk instruksi LODS
Gambar 3-13 menggambarkan dampak dari pelaksanaan instruksi LODSW
jika flag D = 0, SI = 1000H, dan DS = 10000H. Di sini bilangan 16-bit disimpan
pada lokasi memori 11000H dan 11001H dimasukkan ke dalam register AX.
Karena flag D sama dengan 0 dan ini adalah transfer kata, isi dari SI secara
otomatis diinkrementasi dengan 2 setelah AX dimasukkan dengan data memori.
STOS
Instruksi STOS menyimpan AL atau AX pada lokasi memori yang ditangani oleh
DI pada segmen tambahan. Tabel 3-9 mencatat bentuk-bentuk yang mungkin dari
instruksi STOS. Seperti halnya dengan LODS, B atau W bisa digunakan untuk
menunjukkan transfer byte atau kata, atau address operand yang dijelaskan seba-
gai byte atau kata yang bisa dimasukkan.
STOS Dengan REP. Prefiks Ulang (REP) bisa ditambahkan pada setiap instruksi
string. REP menyebabkan CX diinkrementasi dengan I setiap kali instruksi stringInstrukst Pemindahan Data
81
Data segment
OFF
ee
wf 8032
———
Cae
2 |}————
ar a0
st gece Before LODSW =
C-~~
|
DLE)
es ———
bs 1000
~~ —i
11002
Hoot
F000
0000,
GAMBAR 3-13 Dampak dari pelaksanaan instruksi LODSW jika DS = 1000H, SI = 1000H, D =
0, 11000H =
0.
ae
Symbolic Function
ie
sTOsB [Dl] = AL, byte transfer
sTosw [Dl] = AX, word transfer
‘STOS BYTE {Ol] = AL, if BYTE is defined as a byte
STOS WORD [DI] = AX, if WORD is defined as a word
—
TABEL 3-9 Bentuk instruksi STOS
yang memprefiksnya dilakukan. Ini menyebabkan operasi string terulang hingga
nilai CX (count) adalah 0.84 Pengantar Mikroprosesor
Symbolic Function
movss [Dl] = [SI], byte transfer
Movsw [01] = [SI], word transfer
MOVS BYTE1,8YTE2 [Dl] = (SI, if BYTE and BYTE2 are bytes
MOVS WORD1,WORD2 [Dl] = [SI], if WORD1 and WORD2 are words
TABEL 3-10 Bentuk instruksi MOV
BERBAGAI MACAM INSTRUKSI TRANSFER DATA
Jangan terpengaruh oleh kata “berbagai macam”. Instruksi transfer data yang
dijelaskan dalam bagian ini — XCHG, LAHF, SAHF, XLAT, IN dan OUT —
adalah instruksi yang sangat penting, namun, karena mereka jarang digunakan
dibandingkan yang lainnya, mereka dikelompokkan bersama dalam bagian ini,
XCHG
Instruksi XCHG saling menukarkan isi dari setiap register dengan isi dari setiap
register atau lokasi memori, tidak termasuk register segmen atau saling pertukar-
an memori-ke-memori. Ini menggunakan mode addressing dalam Bab 2. Tabel
3-11 mencatat bentuk-bentuk instruksi XCHG, bersama dengan pola bit biner
yang diminta untuk setiap tipe. Seperti digambarkan tabel ini, XCHG antara AX
dan register 16-bit lainnya adalah operasi yang paling efisien karena dia hanya
membutubkan | byte memori untuk menyimpan instruksi itu.
LAHF dan SAHF
LAHF dan SAHF digunakan dalam penerjemahan software 8085 ke software
8086/8088, Dengan kata lain, mereka memiliki aplikasi yang sangat sedikit dalam
pemrograman 8086/8088. Khususnya, transfer LAHF dan SAHF byte flag yang
kurang begitu penting (seperti 8085) ke dan dari register AH. Operasi ini, berkait-Instruksi Pemindahan Data 85
an dengan PUSH AX atau POP AX, mengemulasi instruksi PUSH PSW 8086 dan
POP PSW selama posisi relatif A dan F tidak penting. Urutan instruksi dalam
Contoh 3-4 menunjukkan bagaimana mengemulasi suatu PUSH PSW sehingga
posisi A dan F benar.
yemulating the 8085 PUSH PSW instruction
000E 9F LAHF ;transfer flags
OOOF 86 C4 XCHG AL, AH jposition A and F
0011 50 PUSH AX ;save them
CONTOH 3-4
XLAT
Instruksi XLAT (menerjemahkan) mengubah isi register AL menjadi suatu bilan-
gan yang disimpabn dalam tabel. Instruksi ini digunakan untuk melakukan teknik
lookup tabel secara langsung yang mengubah dari satu kode ke kode lainnya.
Instruksi XLAT mula-mula menambahkan isi AL pada isi register BX untuk
membentuk address memori dalam segmen data, Dia kemudian memasukkan data
yang tersimpan di dalam address ini menjadi register AL.
‘Anggaplah bahwa tabel lookup display LED 7-segmen disimpan pada TABEL
lokasi dan instruski terjemahan digunakan untuk mengubah isi akumulator dari
BCD menjadi kode segmen. Contoh 3-5 memberikan program singkat untuk
Symbolic Byte 1 Byte 2
XCHG AX,reg 1001 Orer
XCHG reg,reg 1000 O11 141 raaa
XCHG reg,mem 1000 011w mmr raaa
Notes: aaa = any memory addressing mode, mm = mode
mode (MOD), rrr = any register except a segment reg
register, and w = wordbyte,
TABEL 3-11 _Instruks: XCHG86 Pengantar Mikroprosesor
AX
BX
cs
Ds
Data segment
verre
L~]
ee
AL o5 a
be ro
‘ons
von
ia
‘ro
une L—__~_)
aeons
ree
GAMBAR 3-14 Dampak dari pelaksanaan instruksi XLAT pada titik di mana sebelum lokasi
memori 6DH 1100SH dibuka tutup ke dalam register AL.
jusing XLAT to convert from BCD to 7-segment code
0012 BB 000 R MOV BX,OFFSET TABLE address lookup table
0015 D7 XLAT
CONTOH 3-5
mendapatkan ini. Gambar 3-14 menggambarkan operasi dari urutran ini jika
TABLE = 1000H, DS = 4000H, dan nilai inisial AL = 05H ( 5 BCD).
IN dan OUT
Tabel 3-12 mencatat bentuk-bentuk instruksi IN dan OUT. Perhatikan bahwa isi
AX atau AL hanya ditransfer antara perangkat 1/O dan mikroprosesor. IN men-Instruksi Pemindahan Data 87
transfer data dari suatu perangkat 1/O ke dalam register AL atau AX, dan OUT
mentransfer data dari AL atau AX ke perangkat I/O.
Dua bentuk mode atau mode port-addressing tersedia dengan instruksi IN dan
OUT: fixed port dan variabel port. Addressing fixed-port memungkinkan transfer
data antara AL dan AX dan address port 8-bit I/O. Ini disebut “addressing
fixed-port” karena bilangan port disimpan dengan instruksi, biasanya dalam
ROM, di mana bilangan port telah fix.
Addressing variabel-port memungkinkan transfer data antara AL dan AX dan
port address 1/O 16-bit. Ini disebut “addressing variabel-port” karena bilangan
port disimpan di dalam register DX, yang diubah dengan sengaja oleh programer.
Misalnya, jika instruksi OUT 19H,AL dilaksanakan, dia akan mentransfer isi
AL di luar mikroprosesor ke perangkat I/O dengan address 19H. Gambar 3-15
menggambarkan bagaimana informasi ini muncul pada koneksi pin eksternal dari
sistem berdasarkan mikroprosesor 8088.
3-6 PREFIKS OVERRIDE SEGMEN
Prefiks override segmen, yang bisa ditambahkan pada hampir semua instruksi
8086/8088 pada setiap mode addressing-memori, memungkinkan programer me-
Symbolic Function
IN AL,pp 8-bit data from port pp are input to AL
IN AXpp 16-bit data from port pp are input to AX
IN AL,DX 8-bit data from port DX are input to AL
IN AX,DX 16-bit data from port DX are input to AX
OUT pp.AL 8-bit data from AL are sent to port pp
OUT pp.AX 16-bit data from AX are sent to port pp
OUT DX,AL, 8-bit data from AL are sent to port OX
OUT DX,AX 16-bit data from AX are sent to port DX
Notes: pp = an &-bit VO port address and DX = the 16-bit /O port
port address held in register DX.
TABEL 3-12 _Instruksi [N dan OUT88 Pengantar Mikroprosesor
D,
v
Contents of 1
Data bus
1
AL !
Port data i
8088 A
based '
system 19H | Address bus
t
Ay
Port address
0
wR WR
x 1 Port control
Io (om
GAMBAR 3-15 _ Lok
8085 untuk OUT 19H,AL,
fri bilangan port atau address port, data dan sinyal kontrol pada buses
ngubah segmen default untuk setiap instruksi dengan menambahkan byte tambah-
an (prefiks override segmen) pada awal instruksi dalam kode mesin.
Misalnya, MOV AX,[DI], yang biasanya menangani data di dalam segmen
data, bisa dimodifikasi ke instruksi MOV AX,ES:(DI], yang kemudian akan
menangani data di dalam segmen tambahan.
Tabel 3-13 mencatat beberapa instruksi yang telah diubah oleh prefiks over-
ride segmen. Perhatikan bahwa sebagian besar instruksi ini memungkinkan data
diakses dalam setiap segmen. Karena prefiks override segmen menambahkan sua-
tu byte tambahan pada instruksi, sebaiknya kita menggunakan bentuk ini semi
mal mungkin untuk memaksimalkan efisiensi software.
—
3-7
DIREKTIF PERAKIT
Direktif perakit adalah perintah pada perakit yang mengarahkan proses perakitan.
Bagian ini menunjukkan bagaimana menggunakan direktif perakit dan bagaimana
menuliskan suatu program bahasa rakitanInstruksi Pemindahan Data 89
Direktif
Perakit 8086/8088 mengenal banyak direktif perakit (lihat Tabel 3-14) yang
menunjukkan bagaimana suatu operand diperlakukan oleh perakit atau bagai-
mana perakit menangani suatu program/
Menyimpan Data dalam Segmen Memori
Direktif DB, DW, atau DD (juga DQ dan DT) menyimpan byte, kata, atau kata
ganda data di dalam memori. Contoh 3-6 menggambarkan bagaimana berbagai
macam data disimpan.
Memori bisa disimpan untuk data masa mendatang dengan menggunakan
direktif DB, DW dan DD diiktui dengan direktif duplikat (DUP). DUP sendiri
menunjuk pada perakit bahwa sebuah karakter yang dikelilingi oleh () akan
diduplikasi; digit di depannya menjelaskan bilangan duplikasi. Jika tanda tanya
muncul di dalam tanda kurung, maka tidak ada karakter yang diduplikasi dan
memori dibiarkan tetap tidak berubah. Contoh 3-7 menggambarkan beberapa
contoh direktif DUP.
EQU dan THIS
Pernyataan equate (EQU) digunakan untuk menyamakan suatu label bilangan,
ASCII, atau label ke label lainnya. Equates digunakan untuk membuat program
Symbolic Segment Accessed Normal Segment
MOV AX,DS:{BP] Data segment Stack segment
MOV AX,ES:[8P] Extra segment Stack segment
MOV AX,SS:{DI] Stack segment Data segment
MOV AX,CS{SI] Code segment Data segment
MOV AX,ES:LIST Extra segment Data Segment
TABEL 3-13 _Instruksi yang mencakup prefiks override segmen.90 Pengantar Mikroprosesor
—_—
Word Function
ALIGN Starts at an even memory address
ASSUME —_ Indicates where the segments are located
AT Stores the segment in the memory
BYTE Acts as a byte operand
oB Defines a byte (8 bits)
DD Defines a double word (32 bits)
ba Defines quad word (64 bits)
oT Defines 10 bytes (80 bits)
ouP Duplicates the following character
ow Defines word (16 bits)
END Indicates end of listing
ENDP Indicates end of procedure
ENDS Indicates end of segment
equ Equates
FAR Acts as far memory pointer (intersegment pointer)
NEAR Acts as near memory pointer (intrasegment pointer)
OFFSET Specifies the offset address
ORG Sets origin within segment
PROC Defines beginning of procedure
PTR Acts as memory pointer
SEGMENT Designates start of segment
STACK Indicates stack segment
THIS Used as THIS BYTE or THIS WORD
WORD Acts as a word operand
—
‘Note: Most of these key words are accepted by most versions of the 8086/
8088 assembler.
TABEL 3-14 Direktif perakit 8086/8088
bahasa rakitan lebih jelas untuk memungkinkan debugging di kemudian hari.
Contoh 3-8 memberikan beberapa contoh yang berbeda mengenai pernyataan
EQU ini.Instrukst Pemindahan Data 91
osc8
OScB
o5cc
oscp
OSCE
0sD2
osp4
ospe
osce
sco
0sD3
osD4
OSES
0640
jusing the DB, DW, and DD directives
DB O1,2,3
DB 45H
DB ’A’
DB = 11110000B
DW = 12,13
DW LIST1
DW 2345H
DD OFFFFH
33 bytes defined
byte defined
byte defined
ja binary 11110000
words defined
word defined as LIST1
;word defined as 2345H
;double-word defined
using the duplicate (DUP) directive
01 02 03 DATA_ONE
45
41
FO
000c 000d
05co R DATA_TWO
2345
OOOOFFFF
CONTOH 3-6
00 LIST_A
oooar LIST_B
22
J
00
oooag LIST_C
]
oo6r LIST_D
22222222
J
0064( ZEROS
00
]
CONTOH 3-7
DB?
DB 10 DUP(?)
ALIGN
DW 10 DUP(?)
DD 22 DUP(?)
DB 100 DUP(0)
jreserve one byte
jreserve 10 bytes
reserve 10 words
;xeserve double-words
#store 100 zeros
Direktif THIS menunjukkan nama label tanpa menjelaskan lokasi memori
yang baru. Misalnya, bila stack diinisialisasi, pointer stack (SP) ditempatkan pada92 Pengantar Mikroprosesor
using the equate statement
000A TEN EQU 10
0041 LETTER_A EQU ‘A’
0063 COUNT EQU 99
= 000A NUMB_10 EQU 10
CONTOH 3-8
using the THIS, WORD, and BYTE directives
scat 0032{ STACK_MEM DW 50 DUP (?) reserve 50 bytes
222
1
= 062c STACK_TOP EQU THIS WORD jthis is the top
062c OA DB 10 jstore a 10
= 062D DATA EQU THIS BYTE ;DATA is a byte
CONTOH 3-9
bagian atas stack dengan direktif THIS dan EQU. Contoh 3-9 menunjukkan
bagaimana istilah WORD digunakan dengan THIS dan EQU untuk menunjukkan
bagian atas stack.
Pengaturan Memori
Perakit menggunakan direktif khusus untuk menginformasikan perakit mengenai
segmen memori yang berbeda. Direktif SEGMENT menyebutkan awal dari se-
buah segmen, dan ENDS menunjukkan akhir dari suatu segmen. Jika direktif
SEGMENT dan ENDS telah menciptakan suatu segmen, pernyataan ASSUMEInstruksi Pemindahan Data 93
ooo
0000 o00ar
22
000A 000c[
0006
0022
0000
0000 48454cac4r
0005
0000
0000 0032[
oe
= 0064
0064
0000
0000
0000 Bc 0064 R
0003 Bg --- R
0006 8E D8
0008
000B 8£ CO
oooD
00D
CONTOH 3-10
DATA_SEG
LIST_A
.
]
LIST_B
]
DATA_SEG
EXTRA_SEG
STRING
EXTRA_SEG
STACK_SEG
]
STACK_TOP
STACK_SEG
CODE_SEG
BEGIN
SEGMENT
DB 10 DUP (?)
DW 12 DUP (6)
ENDS
SEGMENT
DB ‘HELLO’
ENDS
SEGMENT STACK
DW 50 DUP (?)
BQU THIS WORD
ENDS
SEGMENT
ASSUME CS:CODE_SEG,SS:STACK_SEG
ASSUME DS: DATA_SEG, ES: EXTRA_SEG
PROC FAR
Mov SP,OFFSET STACK_TOP
Mov AX, DATA_SEG
MOV DS AK
MoV AX, EXTRA_SEG
MoV ES,AX
}Program here
BEGIN
CODE_SEG
ENDP
ENDS
END BEGIN94 Pengantar Mikroprosesor
menginformasikan perakit segmen mana yang digunakan untuk segmen data,
tambahan, stack dan kode.
Contoh 3-10 menunjukkan bagaimana menggunakan direktif ini, Perhatikan
bagaimana SEGMENRT dan ENDS menunjukkan batasan dan nama setiap seg-
men dan bagaimana pemyataan ASSUME menunjukkan segmen yang digunakan
dengan CS, DS, SS, dan ES.
Sistem operasi biasanya memasukkan register segmen kode, namun bukan
datanya, stack, dan register segmen tambahan, yang harus dimasukkan pada awal
setiap program. Dalam hal ini, register AX dimuat dengan address segmen data
dan kemudian dipindahkan ke DS. Perhatikan bahwa direktif OFFSET tidak
digunakan di sini: perakit secara otomatis menyisipkan OFFSET untuk setiap
label yang dijelaskan sebagai nama segmen. Register ES dimasukkan dengan cara
yang sama.
Jika anda memperhatikan dengan baik Contoh 3-10, anda akan melihat bahwa
contoh ini telah dirakit sedemikian rupa sehingga sebuah program yang terakit
bisa dilihat. Perhatikan bagaimana empat segmen telah dibentuk untuk contoh ini.
Segmen data, yang disebut DATA-SEG, mengandung dua variabel. LIST-A
dijelaskan sebagai 10 byte memori, dan LIST-B dijelaskan sebagai 12 kata
memori dengan setiap kata mengandung 0006. Segmen tambahan, disebut EX-
TRA-SEG mengandung string karakter ASCII yang disebut STRING. Segmen
stack disebut STACK-SEG mengandung area memori yaitu 50 kata panjangnya
untuk stack sistem. Pethatikan bahwa pseudo-opcode, STACK dicatat di samping
SEGMENT untuk mengidentifikasi ini sebagai segmen stack untuk perakit. Ak-
hirnya, segmen kode, yang disebut CODE-SEG, mengandung pernyataan AS-
SUME yang digunakan untuk mengidentifikasi nama yang sebenarnya dari seg-
men dan beberapa instruksi yang menginisialisasi pointer stack, segmen data, dan
register segmen tambahan. Perhatikan bahwa perakit mencatat address 0064
sebagai 0064. Ini bukan error namun cara perakit itu mencatat 16-bit data. Bila
program dihubungkan untuk digunkana dalam komputer penghubung itu mem-
balikannya dengan menghasilkan 6400, yang merupakan bentuk yang benar un-
tuk bahasa mesin 8086/8088.
Jika segmen harus ditempatkan pada lokasi memori tertentu, direktif AT
mengawalinya. Contoh 3-1 menunjukkan bagaimana pernyataan AT menem-
patkan segmen DATA pada 0100H dengan memasukkan 0100H ke dalam
register segmen sehingga segmen sebenarnya dimulai pada lokasi memori
01000H.Instruksi Pemindahan Data 95
0000 DATA_SEG SEGMENT AT 0100H
0100 ORG 100H
0100 o00ar LIST_A Dw 10 DUP (?)
222
]
010A DATA_SEG ENDS
CONTOH 3-11
Tidak hanya data dalam contoh ini yang disimpan pada address segmen
0100H, namun LIST-A juga dimulai pada address ofsset 0100H di dalam segmen
data dan disimpan di dalam memori yang dimulai pada lokasi memori 01100H.
Pada sebagian besar program, pernyataan AT dan ORG tidak digunakan.
Subrutin/Prosedur
Subrutin atau prosedur ditunjukkan oleh direktif PROC dan ENDP. PROC me-
nunjukkan nama dan awal dari suatu prosedur selain juga sebagai tipenya (NEAR
atau FAR). ENDP menunjukkan akhir dari suatu prosedur.
0000 ADDEM PROC FAR
0000 8B C3 aos AK, BX
0002 03 CL ADD AK, CX
0004 03 c2 ADD AK,DX
0006 cB RET
0007 ADDEM ENDP
CONTOH 3-1296 Pengantar Mikroprosesor
Misainya, anggaplah bahwa isi register BX, CX dan DX harus ditambahkan
dan hasilnya disimpan dalam register AX. Pencatatan prosedur ADDEM yang
diberikan dalam Contoh 3-12 menunjukkan bagaimana ini diperoleh.
Prosedur ADDEM dijelaskan dengan direktif PROC sebagai prosedur atau
label FAR, yang bisa muncul pada semua lokasi memori di dalam mesin karena
dia tersusun dari address offset dan address segmen. Prosedur atau label NEAR,
sebaliknya, harus muncul dalam segmen kode yang sekarang karena addressnya
tersusun dari hanya address offset. Jika sebuah label diikuti dengan tanda titik dua
(), maka ini adalah label NEAR (LABEL). Jika bukan, dia adalah label FAR
(LABEL). Sebagian besar label harus diikuti oleh titik dua karena jarang sekali
JMP atau CALL muncul di luar segmen kode sekarang.
OFFSET dan PTR
Direktif OFFSET menunjukkan suatu address offset pada perakit, dan direktif
PTR atau direktif pointer menunjukkan tipe data (byte atau kata).
Misalnya, address DATA bisa dimasukkan ke dalam register SI dengan in-
struksi MOV SLOFFSET DATA. Instruksi MOV SLDATA memasukkan isi
address DATA ke dalam SI. OFFSET memasukkan address DATA.
PTR digunakan bila tipe data tidak jelas bagi perakit. Misalnya, anggaplah
bahwa instruksi berikut muncul di dalam sebuah program: MOV [MOV],2.
Apakah instruksi ini menggerakkan 8- atau 16-bit bilangan 2 ke dalam memori?
Direktif PTR dengan kata BYTE atau WORD akan menjelaskan hal ini kepada
perakit. Jadi, instruksi MOV BYTE PTR{BX],2 menggerakkan 2 ke dalam lokasi
memori 8-bit yang ditangani oleh BX, dan instruksi MOV WORD PTR[BX],2
menggerakkan 2 ke dalam lokasi memori 16-bit.
Program Sampel
Contoh 3-13 memberikan suatu program sampel yang mentransfer isi dari
BLOCK! ke BLOCK2. Perhatikan bahwa instruksi REP MOVSB melakukan
transfer data itu.
Contoh ini menggambarkan banyak direktif dibahas di bagian ini. Perhatikan
bahwa COUNT disamakan dengan 100 sehingga instruksi MOV CX, COUNT
memasukkan counter untuk instruksi MOVSB yang diulangi. Juga perhatikan
bahwa instruksi terakhir adalah suatu INT 21H yang mengembalikan kontrolInstruksi Pemindahan Data 97
0000
0000
0064
0000
0000
0064
0000
0000
0000
0003
0005
coos
000A
oooD
0010
oo11
0014
0016
oo18
oo1a
oo1a
yexample program that moves 100 bytes from BLOCK1 to BLOCK2
DATA_SEG
0064( BLOCK1
22
J
DATA_SEG
EXTRA_SEG
0064 BLOCK2
22
]
EXTRA_SEG
CODE_SEG
BEGIN
B8 --- R
8E DS
BB --- R
8E CO
BE 0000 R
BF 0000 R
FC
BS 0064
F3/ Ad
B4 4c
cp 21
BEGIN
CODE_SEG
CONTOH 3-13
SEGMENT
DB = 100 DUP (?)
ENDS
SEGMENT
DB 100 DUP (?)
ENDS
SEGMENT
ASSUME CS:CODE_SEG,DS:DATA_SEG, ES: EXTRA_SEG
PROC FAR
MOV AX, DATA_SEG
MoV DS, AX
MOV AK, EXTRA_SEG
MOV -ES,AX
MOV SI, OFFSET BLOCK
MOV -DI,OFFSET BLOCK2
cLD
MoV CX,100
REP MOVSB
MOV AH, 4CH
INT (21H
ENDP
ENDS
END BEGIN98 Pengantar Mikroprosesor
komputer kepada DOS (disk operating system) pada personal computer jika AH
= 4CH. Kami memberikan data yang lebih rinci untuk perakit dalam bagian
berikutnya juga dalam apendiks.
3-8 RINGKASAN
Instruksi perindahan data mentransfer data antara register, register dan memori,
register dan stack, memori dan stack, I/O dan akumulator, dan flags dan stack.
Instruksi perpindahan data mencakup: MOV, PUSH, POP, XXCHG, XLAT,
IN, OUT, LEA, LDS, LES, LAHF, SAHF, dan instruksi string: LODS,
STOS, dan MOVS.
.. Byte pertama dari instruksi 8086/8088 mengandung opcode, yang menjelas-
kan operasi dilakukan oleh mikroprosesor untuk instruksi yang sekarang,
. Bit D dalam suatu opcode menunjukkan arah dari arus data. Jika D = 0, data
mengalir dari register yang dijetaskan di dalam REG, dan jika D= 1, arus data
mengarah ke register yang dijelaskan di dalam field REG dari sebuah instruksi.
. Bit W dari suatu instruksi menunjukkan apakah instruksi itu beroperasi pada
kata atau byte. Jika W = 1, beroperasi pada kata, dan jika W = 1 dia
beroperasi pada byte.
. MOD memilih mode operasional dari instruksi bahasa mesin. MOD = 00
tidak memilih displacement; MOD = 01 memilih suatu displacement sign-
extended 8-bit, MOD = 10 memilih displacement 16-bit; dan MOD = 11
menunjukkan bahwa R/M field mengandung register.
. Kode biner 3-bit menjelaskan REG dan R/M field bila MOD = 11. Register
8-bit adalah AL, CL, DL, BL, AH, CH, DH dan BH, dan register 16-bit
adalah AX, CX, DX, BX, SP, BP, SI dan DI.
Bila R/M field mengandung mode addressing-memori, kode 3-bit di dalam
R/M menunjukkan salah satu mode addressing berikut ini: [BX = SI], [BX +
DI}, [BP = SI}, {BP + DI], [SI], DI], [BP}, atau [BX].
. Semua data ditangani di dalam segmen data kecuali register SP atau BP
digunakan untuk menyimpan address offset. Dalam dua hal ini, data dita-
ngani dalam segmen stack.
|. Register segmen bisa ditangani hanya oleh instruksi MOV, PUSH, atau POP.
MOV CS,XX dan POP CS tidak diperbolehkan, namun register segmen lain-
nya bisa menggunakan dua bentuk instruksi ini.Instruksi Pemindahan Data 99
12.
13.
20.
4 e
22.
LE
. Instruksi POP dan PUSH selalu mentransfer 2 byte data antara stack dan register
lainnya atau lokasi memori. Bila data dipaksakan masuk ke stack, byte yang
paling penting disimpan pertama, diikuti oleh byte yang kurang penting. Pointer
stack kemudian didekrementasi oleh 2 setelah 2 byte dipindahkan dari stack.
PUSHF dan POPF mentransfer data antara memori stack dan register flag.
LEA, LDS dan LES memasukkan register atau register dan segmen register
dengan address data memori. LEA memasukkan address. offset ke dalam
pointer 16-bit dan juga address segmen ke dalam DS maupun ES.
|. Instruksi transfer data string menggunakan register DI maupun SI atau keduanya
untuk menangani data di dalam memori. Address offset DI ditempatkan di
segmen tambahan, address offset di dalam segmen data untuk operasi string.
Bit flag arah (D) menjelaskan apakah DI dan/atau diinkrementasi atau dekre-
mentasi setelah transfer string, Jika D = 0, auto-inkrementasi dipilih, dan jika
D = |, auto-dektementasi dipilih. Register ini diinkerementasi oleh 1 untuk
transfer byte dan 2 untuk transfer kata.
. LODS memasukkan AL atau AX dari memori yang ditangani oleh register
SI; STOS menyimpan AL atau AX ke dalam lokasi memori yang ditangani
oleh DI; dan MOVS mentransfer byte atau kata dari lokasi memori yang
ditangani oleh SI ke dalamnya yang ditangani oleh DI.
. Prefiks REP (ulang) menyebabkan setiap instruksi transfer data string mengu-
angi jumlah seberapa kali yang terkandung di dalam CX. Untuk tiap ulangan,
CX didekrementasi oleh 1 sehingga, jika CX menjadi 0, maka instruksi urutan
berikutnya dilaksanakan dan, jika tidak, instruksi string akan mengulang.
Instruksi XLAT mengubah data dalam register AL menjadi bilangan yang
disimpan di lokasi yang ditangani oleh jumlah BX dan AL.
. IN dan OUT digunakan untuk mentransfer data antara register AL dan
register 1/O atau register AX dan I/O, Dua tipe instruksi IN dan OUT tersedia
adalah: port fixed dan port variabel.
Prefiks override segmen memungkinkan data ditangani oleh hampir semua in-
struksi dalam setiap segmen. Misalnya, MOV AX [BX] menangani data di dalam
segmen data secara default. Dia bisa menangani data dalam segmen tambahan
dengan prefiks override segmen, ES: dalam contoh ini — MOV AX.ES: [BX].
Direktif perakit DB (define byte), DW (define word), DD (define double word),
dan DUP (duplikat) menyimpan data secara langsung dalam memori 8086/8088.
EQU menyamakan nilai atau label ke label.
SEGMENT menunjukkan awal dan nama segmen; ENDS menunjukkan akhir.100 Pengantar Mikroprosesor
24.
25.
ASSUME mengarahkan perakit pada label yang digunakan untuk segmen
dalam program.
PROC menunjukkan awal dan nama prosedur; ENDP menunjukkan akhir.
Os
3-9 PERTANYAAN DAN SOAL
1.
2.
3.
4,
an
le
12.
ie
oe
Byte pertama dari setiap instruksi 8086/8088 selalu adalah
Jelaskan tujuan dari bits D dan W dalam instruksi bahasa mesin.
Field MOD dalam instruksi bahasa mesin menjelaskan informasi apa?
Jika register field (REG) dari suatu instruksi mengandung 010 dan W = 0,
register apa yang dipilih oleh instruksi?
. Mode addressing-memori apa yang dijelaskan bila R/M = 001 dan MOD bits = 00?
. Sebutkan register segmen default untuk:
a. SO
BX
DI
|. BP
SI
gaes
. Ubahlan instruksi 8807H dari mesin bahas ke dalam bahasa rakitan.
. Ubahlah instruksi 8B1E004CH dari bahasa mesin menjadi bahasa rakitan.
._ Jika instruksi MOV SI,[BX + 2] muncul dalam program bahasa rakitan, apa
ekuivalen untuk bahasa mesinnya?
). Apakah instruksi MOV CS,AX adalah instruksi 8086/8088 yang valid? Je-
laskan jawaban anda.
Instruksi tipe MOV apakah yang panjangnya mencapai 6 byte?
PUSH dan POP selalu mentransfer_ __jumlah bit antara register atau
memori dan stack.
Register segmen apakah yang mungkin tidak bisa dipop dari stack?
Jelaskan fungsi tiap instruksi berikut ini:
a. PUSH AX
. POP SI
.. PUSH [BX]
|. PUSHF
. POP DS
enogsInstruksi Pemindahan Data 101
16.
17.
20.
21.
22.
23.
24,
25.
26.
27.
28.
29.
30.
31
32.
33.
34.
35.
. Jelaskan apa yang terjadi bila instruksi PUSH BX dilaksanakan, dengan
menunjukkan lokasi mana yang menerima isi BH dan BL. (Anggaplah bah-
wa SP = 0100H dan SS = 0200H.)
Instruksi POP selalu meninkrementasi SP dengan
Nilai apa yang dimasukkan ke dalam register SP dan SS sehingga segmen
stack dimulai pada lokasi 02200H dan pointer stack menangani bagian atas
segmen stack?
. Bandingkan operasi instruksi MOV BX, DATA dengan instruksi LEA
BX,DATA.
. Apa perbedaan antara instruksi LEA BX,DATA dan instruksi MOV
BX,OFFSET DATA.
Secara umum, mana yang lebih efisien, MOV dengan OFFSET atau instruksi
LEA?
Jelaskan bagaimana instruksi LDS BX,DATA beroperasi.
Apa perbedaan antara instruksi LDS dan LES?
Buatlah suatu urutan instruksi yang memindahkan isi lokasi memori segmen
data DATA dan DATA + 1 ke BX, DX dan SI.
Apa tujuan dari bit flag arah?
Instruksi mana yang digunakan untuk menset dan menjelaskan bit flag arah?
Instruksi string menggunakan register SI dan DI untuk menangani data pada
segmen memori yang mana?
Jelaskan operasi instruksi LODSB
Jelaskan operasi instruksi STOSW.
Apa yang diperoleh oleh prefiks ulang (REP), dan tipe instruksi apa yang
bisa digunakan dengannya?
Buatlah suatu urutan instruksi yang mengkopi 12 byte data dari area memori
yang ditangani oleh SOURCE ke dalam area memori yang ditangani oleh
DEST. Baik SOURCE maupun DEST mengandung 32-bit addresses.
Ulangi Pertanyaan 30 dengan menggunakan address offset untuk SOURCE
dan DEST.
Pilihlah suatu instruksi bahasa rakitan yang menukar isi register BX dengan
isi register SI.
Akankah LAHF dan SAHF digunakan selama operasi normal 8086/8088?
Jelaskan jawaban anda.
Jelaskan bagaimana XLAT mengubah isi akumulator (AL).
Jelaskan apa yang diperoleh oleh instruksi IN AL,12H.102 Pengantar Mikroprosesor
36.
eye
38.
39.
40.
41.
42.
43.
44,
45
Apa itu prefiks override segmen?
Pilih satu instruksi yang memindahkan byte data dari lokasi memori yang
ditangani oleh register BX di dalam segmen tambahan ke dalam register AH.
Apa yang diperoleh oleh direktif bahasa rakitan secara umum?
Jelaskan tujuan dari direktif bahasa rakitan berikut ini: DB, DW dan DD.
Pilih satu direktif bahasa rakitan yang menyimpan 30 byte memori untuk
LIST1.
Jelaskan tujuan dari direktif EQU.
SEGMENT dan ENDS digunakan untuk menset batasan segmen program
bahasa rakitan 8086/8088. Bagaimana suatu segmen ditugaskan ke lokasi
memori sebenarnya?
Prosedur harus didahului dan diikuti oleh dua direktif bahasa rakitan yang
mana?
Jelaskan mengapa PTR perlu dalam instruksi bahasa rakitan berikut ini:
MOV WORD PTR [DI],3.
Apa yang diperoleh oleh INT 21H yang didahului oleh MOV AH,4CH pada
komputer personal?