BAB 2
Mode Addressing
PENDAHULUAN
Perkembangan software yang efisien untuk 8086/8088 memerlukan penguasaan
yang baik mengenai mode addressing yang terdapat pada setiap instruksi, Dalam
bab ini, kita akan menggunakan instruksi MOV (pemindahan data) untuk men-
jelaskan mode data-addressing. MOV memindahkan bytes atau kata data antara
register atau antara register dan memori. Dalam menjelaskan memori program —
mode addressing, kita akan menggunakan instruksi call dan jump, yang mengu-
bah arus program.
Mode data-addressing yang akan kita bahas di sini mencakup: register, imme-
diate, direct, register indirect, base-plus-indeks, register relatif, dan byte relatif-
plus-indeks addressing. Memori program-mode addressing mencakup: program
relatif, direct dan indirect addressing.
TUJUAN
Setelah menyelesaikan bab ini, anda akan mampu:
1. Menjelaskan operasi dari tiap mode data-addressing.
2. Menggunakan mode data-addressing untuk membentuk pernyataan bahasa
rakitan.
3. Menjelaskan operasi dari tiap memori program-mode addressing.
3536 Pengantar Mikroprosesor
4. Menggunakan memori program-mode addressing untuk membentuk pernya-
taan bahasa rakitan.
5. Memilih mode addressing yang tepat untuk mencapai tugas yang ditentukan.
SUE eee
MODE DATA-ADDRESSING
Karena instruksi MOV adalah salah satu instruksi 8086/8088 yang paling seder-
hana dan fleksibel, dia akan memberikan landasan bagi penjelasan mengenai
mode data-addressing dalam seluruh bab ini, Gambar 2-1 menggambarkan in-
struksi MOV dan menentukan arah dari arus data. Perhatikan bahwa sumber itu
jauh di sebelah kanan dan tujuannya terletak di samping opcode dengan sumber
dan tujuan yang terpisah oleh koma, Jika anda mengenal betul dengan mikropro-
sesor 8085, hal ini bukan sesuatu yang baru; namun jika anda menguasai mikro-
prosesor yang lainnya, ini agak membingungkan. Beberapa mikroprosesor
memindahkan data dengan arah yang berlawanan
Instruksi MOV AX,BX memindahkan isi dari register sumber (BX) ke dalam
register tujuan AX, Dengan kata lain, instruksi ini mengkopi isi dari register BX
ke dalam register AX. Ini penting untuk dicatat bahwa sumber tidak pernah be-
rubah dan tujuan Aampir selalu berubah. Ini memang benar tanpa memandang
mode atau instruksi data-addressing,
Gambar 2-2 menggambarkan operasi yang dilakukan oleh setiap mode data-
addressing untuk instruksi MOV. Mode data-addressing yang digunakan dengan
instruksi ini mencakup:
1. Register Addressing — digunakan untuk mentransfer byte atau kata (word)
data ke dalam register tujuan, (Yaitu MOV AX,CX akan mengkopi isi dari
register CX ke dalam register AX),
2. Immediate Addressing — digunakan untuk mentransfer byte atau kata data
langsung ke dalam register tujuan. (Yaitu, MOV AX,1234H ke dalam regis-
MOV destination.
Mov AN. BN
GAMBAR 2-1 Instruksi AX.BX MOV yang menggambarkan bagaimana sumber dikopi ke
dalam tujuan.Mode Addressing 37
HoosTT
GOW
Aso
Hoosol
$10
1100
wonmusacy
oooh +
x sa +
8808/9808 Suissouppe-eiep spo Z-Z AVAWVD
tu10001
rasta,
xv
saistig,
XV
saividoy
xv
ronson
xv
ord
tive
snsidoyy
xe
oamnos
sap arny
XV-lIS + XH AVaRIV
XV'lr | NAL AOW
NAH AC
wwlxa
AOW
xv AGI
Hive HL AGW
X#XV AON
sayin,
ay38 Pengantar Mikroprosesor
2-2
ter AX) Perhatikan bahwa bila huruf H mengikuti bilangan, dia akan menun-
jukkan nilai heksadesimal.
3. Direct Addressing — mentransfer byte atau kata di antara memori dan regis-
ter. Address memori data disimpan dengan instruksi. (Yaitu, MOV AX,LIST
membutuhkan isi address memori 16-bit LIST dan memindahkan mereka ke
dalam register AX.)
4. Register Indirect Addressing — mentransfer byte atau kata antara register
dan lokasi memori yang ditangani oleh suatu register. (Yaitu, MOV AX,
(BX) memindahkan 16-bit isi lokasi memori yang ditangani oleh register BX
ke dalam register AX.)
5. Base-Plus-Indeks Addressing — digunakan untuk mentransfer byte atau kata
antara register dan lokasi memori yang ditunjukkan oleh jumlah register base
dan register indeks. (Yaitu, MOV AX. (BX + SI) memindahkan isi address
16-bit yang ditunjukkan oleh jumlah BX + SI ke dalam register AX.)
6. Register relatif Addressing — mentransfer byte atau kata antara register dan
lokasi memori yang ditangani oleh suatu register dan displacement. (Yaitu,
MOV AX, (BX + 4) atau MOV AX, ARRAY(SI). Instruksi pertama men-
transfer isi 16-bit dari lokasi memori yang ditunjukkan oleh lokasi memori
yang ditangani oleh ARRAY + SI).
7. Base Relatif-Plus-Indeks-Addressing — digunakan untuk mentransfer-byte
atau kata antara register dan lokasi memori yang ditangani oleh suatu register
base dan register indeks ditambah displacement. (Yaitu, MOV AX,AR-
RAY(BX + DI) atau MOV AX,(BX + DI-4). Contoh pertama mengaddress
lokasi memori yang ditunjukkan oleh ARRAY + BX + DI dan mentransfer
bilangan 16-bit dari lokasi memori ke dalam register AX. Contoh kedua
menggunakan address yang dijelaskan oleh BX + DI + 4.)
REGISTER ADDRESSING
Addressing register adalah dalah satu mode addressing yang paling mudah
dikuasai segera sesudah banyak register di dalam 8086/8088 diketahui. 8086/
8088 mengandung register 8-bit berikut ini: AH, AL, BA, BL, CH, CL, DH, dan
DL dan register 16-bit berikut ini: AX, BX, CX, DX, SP, BP, SI, DI, CS, DS, SS,
dan ES. Dalam kebanyakan instruksi, salah satu register ini akan berupa sumber
(source) atau tujuan (destinas’) — kecuali untuk register segmen, yang digunakanMode Addressing 39
dengan hanya beberapa jenis instruksi (MOV, PUSH, dan POP). Penting sekali
bahwa register yang dipindahkan ata dioperasikan memiliki ukuran yang sera~
gam. Jangan pernah campurkan jenis register 8- dan 16-bit, karena assembler
akan mengeluarkan pesan error untuk operasi yang tidak dibolehkan ini.
abel 2-1 mengilustrasikan sebagian dari banyak versi yang berbeda dari
instruksi pemindahan register. Hampir tidak mungkin untuk mendaftar semuanya
karena ada banyak sekali kombinasi yang tersedia. Sebagai contoh, subset 8-bit
dari instruksi MOV saja yang terdiri atas 256 instruksi 8086/8088 yang berbeda.
Satu-satunya bentuk MOV yang tidak dibolehkan, selain yang mencampur
ukuran data, adalah MOV dari satu segmen ke segmen lain.
Gambar 2-3 mengilustrasikan fungsi instruksi MOV BX, CS. Perhatikan bah-
wa sumbernya tidak berubah, tetapi tujuannya berubah. Di sini disalin 1234H dari
register CX ke dalam register BX.
i
2-3
ADDRESSING LANGSUNG
Mode data-addressing lainnya yang relatif sederhana adalah addressing langsung,
disebut demikian karena data disimpan secara langsung setelah opcode desimal
dalam memori. Addressing langsung mentransfer byte atau kata data secara lang-
sung dari suatu instruksi program ke dalam register atau lokasi memori. Gambar
eS
Assembly Language Operation
MOV AL,BL BL AL
MOV CH,CL cL CH
MOV AX,CX CX + AX
Mov SP.BP BP — SP
MOV DS,AX AX — DS
MOV SI, DI=sI
MOV D1SI SIDI
MOV BX,ES ES—-BX °
Mov CS,0S Not allowed (segment-to-
segment)
MOV BL.BX Not allowed (mixed sizes}
ee
TABEL 2-1 Contoh instruksi addresing register.40 Pengantar Mikroprosesor
ax
BX T6AF
cx 1234 T2334
Dx
sP
GAMBAR 2-3 Efek dari eksekusi instruksi MOV BX,CX pada point sebelum register BX
berubah. Perhatikan bahwa 1234H dikopi dari register CX dan akan memasuki register BX. Setelah
1234H memasuki register BX, 76AFH yang berada di dalam BX telah hilang,
2-4 menggambarkan instruksi operasi MOV AX,3456H. Instruksi ini mengkopi
3456H dari instriksi ke dalam register AX.
Dalam bahasa simbolis rakitan, data langsung didahului oleh simbol # pada
beberapa, bukan seluruh perakit 8086/8088, misainya, MOV AX, #3456H. Teks
ini tidak menggunakan simbol # untuk menunjukkan data langsung. Kita menun-
jukkan data ini sebagai heksadesimal dengan menambahkan huruf H, atau sebagai
desimal yang menunjukkan data tanpa karakter khusus tertentu., (Instruksi MOV
AL,33 memindahkan 33 desimal ke dalam 8-bit register AL). Tabel 2-2 meng-
gambarkan beberapa instruksi MOV dengan data langsung.
i — ee
2-4 ADDRESSING DATA LANGSUNG
Addressing data langsung tidak hanya dengan perintah umumnya namun juga
untuk sebagian besar instruksi dalam program yang tipikal. Dia mempunyai dua
Register array Program
MOV AX. 3450H
GAMBAR 2-4 Efek dari eksekusi instruksi MOV AX,3456H. Di sini data, yang mengikuti
opcode B8, dipindahkan dari memori ke dalam register AX. Operasi ini ditunjukan pada point
beberapa saat sebelum register AX berubab.Mode Addressing 41
aX
BX
cx
_
Assembly Language Operation
MOV BL.44 2CH — BL
MOV AX.44H 0043H — AX
MOV S10 0000H — SI
MOV CH,100 64H — CH
MOV SP3000H 3000H — SP
TABEL 2-2 Contoh addressing langsung dengan instruksi MOV.
bentuk dasar: addressing langsung, yang menggunakan hanya instruksi MOV
dan, khususnya, pada MOV antara memori dan AX atau AL; dan addressing
displacement, yang, digunakan pada hampir semua instruksi dalam set instruksi
8086/8088.
Addressing Langsung
Addressing langsung dimasukkan ke dalam set instruksi sehingga instruksi 8085
LDA dan STA bisa dengan mudah diubah ke dalam instruksi 8086/8088. Mode
ini digunakan bila data ditransfer antara AL dan memori atau AX dan memori.
(Bila kita menguasai bahasa mesin pada Bab 3, alasan itu akan muncul dengan
jelas). Instruksi ini panjangnya 3 bytes.
Instruksi MOV AL,DATA, seperti yang ditunjukkan pada perakit 8086/8088,
mentransfer suatu kopi byte data yang disimpan dalam lokasi memori DATA
Memory
AH puiaese| es @ BO) sss
BH BL
cA =
GAMBAR 2-5. Efek dari eksekusi instruksi MOV AL,(1234H) jika DS = 1000H. Di sini register
AL ditunjukkan setelah data (12) menghancurkan isi register AL sebelumnya.42. Pengantar Mikroprosesor
Assembly Language Operation
MOV AL,NUMBER —_—A byte 1s copied from the data segment plus offset NUMBER into
AL
MOV AX,COW ‘A word is copied from the data segment plus offset COW into AX
MOV NEWS,AL AL is stored at a location in the data segment plus offset NEWS.
MOV THERE,AX AX is stored at a location in the data segment plus offset THERE
TABEL 2-3 Empat bentuk yang mungkin dari addressing langsung.
(1234H di sini) dalam segmen data pada register AL. (Beberapa perakit menun-
Jukkan instruksi ini dengan MOV AL.(1234H), Gambar 2-5 menunjukkan bagai-
mana instruksi ini dilaksanakan, Di sini DS = 1000H, sehingga address memori
yang sebenarnya yang ditunjukkan oleh instruksi itu adalah 11234H — jumlah
1234H + 10000H (1000H X 10H).
Tabel 2-3 mencatat empat bentuk yang mungkin dari instruksi addressing
langsung ini. Sekali lagi, hanya register AX dan AL yang mungkin dipindahkan
ke dan dari memori dengan tipe instruksi ini
Addressing Displacement
Addressing displacement hampir mirip dengan addressing langsung kecuali bah-
wa instruksi itu sering mempunyai lebar 4 byte bukan 3 byte. Tipe addressing data
langsung ini juga lebih fleksibel karena sebagian besar instruksi 8086/8088 bisa
menggunakannya.
Gambar 2-6 menggambarkan instruksi operasi MOV CL,(2000H). Perhatikan
bahwa instruksi ini beroperasi dengan cara yang sama sebagai instruksi MOV
AL,(1234H) dari Gambar 2-5. Perbedaan itu hanya menjadi jelas setelah dilaku-
0000 AO 1234 MOV AL, [1234H]
0003 8A OE 2000 MOV CL, [2000H]
CONTOH 2-1Mode Addressing 43
«a GF w
ax [BH a, Memon
eX [CH CL sa 8A, 3A 120004,
i
GAMBAR 2-6 Efek dari cksekusi instruksi MOV CL, (2000H) jika DS = 1000H. Di sini register
CL ditunjukkan setelah data (8a) menghancurkan isi CL sebelumnya
kan pemeriksaan dari versi yang dirakit dari instruksi ini: MOV AL, (1234H) ada-
lah instruksi 3-byte, dan MOV CL,(2000H) adalah instruksi 4-byte, seperti yang
ditunjukkan pada Contoh 2-1
Tabel 2-4 menunjukkan beberapa bentuk MOV displacement dari addressing
data langsung. Tidak semua bentuk dicatat karena terdapat 512 instruksi MOV
yang berbeda dari tipe ini.
Addressing Tidak Langsung Register
Addressing tidak langsung register memungkinkan data ditangani pada lokasi
memori yang ditunjukkan oleh satu di antara register berikut ini: BX, BP, SI dan
DI. Misalnya, jika register BX berisi 1000H dan instruksi MOV AX, (BX)
dilakukan, data pada lokasi memori 1000H dalam segmen data dikopi ke dalam
ee
Assembly Language Operation
MOV CH,D0G The contents of memory location DOG in the data segment are
copied into CH. The actual value of DOG is calculated by the
assembler
MOV CH,[1000H] The contents of the memory location addressed by offset 1000H
in the data segment are copied into CH
MOV DATA.BP. BP is copied into memory location DATA and DATA ~ 1 in the
data segment
MOV NUMBER.SP —_ SP Is copied into memory location NUMBER and NUMBER - 1
in the data segment
ee
TABEL 2-4 Contoh addressing data langsung dengan menggunakan displacement,44 Pengantar Mikroprosesor
Memory
Register aray
AX OAs? 6as> ay 02001
BX 2000 2 02000H
[——— = 010001. 7
(DS x 10H)
GAMBAR 2-7 _Efek dari eksekusi instruksi MOV AX,(BX) jika DS = 0100H dan BX = 1000H.
Di sini register AX ditunjukkan setelah data (6A42H) telah menghancurkan isi AX sebelumnya.
register AX. Anggaplah bahwa DS = 0100H, instruksi ini kemudian mengkopi
kata data dari lokasi memori 2000H ke dalam register AX (Jihat Gambar 2-7).
Perhatikan bahwa simbol [] menjelaskan addressing tidak langsung dalam bahasa
rakitan 8086/8088. Beberapa instruksi tipikal yang menggunakan addressing
register tidak langsung digambarkan pada Tabel 2-5.
BX,BP,SI, dan DI. Bila menggunakan addressing tidak langsung register atau
satu di antara mode addressing yang mengikutinya, penting untuk diingat bahwa
register BX, SI dan DI biasanya menangani memori dalam segmen data (DS), dan
BP biasanya menangani memori dalam segmen stack (SS).
Addressing tidak langsung sering digunakan untuk menunjukkan data tabular
dalam memori. Misalnya, misalnya anda harus menciptakan suatu tabel informasi
yang akan menampung 50 sampel yang diambil dari suatu voltmeter digital.
Gambar 2-8 menggambarkan tabel dan juga register BX yang digunakan untuk
menangani setiap lokasi dalam tabel secara berurutan. Untuk mencapai hal ini,
anda perlu memasukkan lokasi tabel ini ke dalam register BX dengan instruksiMode Addressing 45
i
Assembly Language Operation
MOV CX,[BX] A word from the location addressed by the 8X register within the
data segment is copied into CX
MOV [BP},OL. A byte is copied into the stack segment at the location ad-
dressed by BP
MOV [01],8H A byte is copied into the data segment at the location addressed
by DI
MOV (D1],(8X] Memory-to-memory moves are not allowed except for string in-
structions
Ee
‘TABEL 2-5 Contoh instruksi dengan menggunakan addressing tidak langsung register
langsung MOV. Setelah menginisialisasi addressing awal tabel, anda kemudian
menggunakan mode addressing tidak langsung untuk menyimpan data secara
berurutan.
Memory
TABLE > 49
TABLE - 48
'
TABLE
TABLE ~ 2
TABLE
BX TABLE [=n TABLE
LT
'
‘
GAMBAR 2-8 Suatu array data (TABLE) berisi $0 bytes yang secara tidak langsung ditangani
melalui register BX.46 Pengantar Mikroprosesor
instructions that read 50 bytes of data from DATA_PORT
yand stores them in a TABLE.
0000 BB 0000 R MOV BX BX,OFFSET TABLE address TABLE
0003 B9 0032 MOV CZ,50 ;load counter
0006 AGAIN:
0006 E4 2a IN AL, DATA_PORT jread data
0008 88 07 MOV [BX],AL 7save data
000A 43 INC BK yaddress next
000B E2 F9 LOOP AGAIN
CONTOH 2-2
Urutan yang ditunjukkan dalam Contoh 2-2 memasukkan BX dengan address
tabel dan menginisialisasi perhitungan yang ditempatkan dalam register CX pada
50. Direktif OFFSET memberitahu perakit untuk memasukkan BX dengan ad-
dress offset TABEL dan bukan isi TABLE. Setelah counter dan pointer diinisiali-
sasi, loop pengulangan hingga CX-0 dimasukkan. Di sini data adalah input (IN)
dari voltmeter dan kemudian disimpan dalam lokasi memori secara tidak lang-
sung ditangani oleh BX. BX kemudian diinkrementasi sehingga pengulangan
loop akan menyimpan data voltmeter pada lokasi memori urutan berikutnya,
TABLE -1. Akhirnya, instruksi LOOP mendekrementasi register CX dan mencek
untuk melihat apakah CX adalah 0. Jika CX bukan 0, program akan berlanjut pada
lokasi memori AGAIN, dan jika CX 0 dan dia berakhirnya atau berlanjut dengan
instruksi urutan lainnya
ADDRESSING BASE-PLUS-INDEKS
Addressing base-plus-indeks mirip dengan addressing tidak langsung register
karena dia secara tidak Jangsung menangani data memori dengan'menggunakan
register base BP atau BX ditambah suatu register indeks (DI atau SI), PadaMode Addressing 47
ax
Bx
cx
Dx
SP
BP
sl
or
beberapa hal, register base menampung address awal dari suatu array memori,
dan register indeks menampung posisi relatif dari data dalam array. Ingat bahwa
BX menangani data di dalam segmen data dan BP menangani data di dalam seg-
men stack.
Data Addressing
Gambar 2-9 menggambarkan bagaimana data ditangani untuk instruksi MOV
DX,[BX + DI]. Di sini, BX = 1000H, DI = 0010H. dan DS = 0100H, yang
menterjemahkan ke add
ress memori 02010H untuk transfer data ini. Instriksi ini
mengkopi data dari lokasi memori 02010H ke dalam register DX. Tabel 2-6
mencatat beberapa instruksi yang ditemukan untuk addressing base-plus-indeks
Array Addressing
Penggunaan utama dari addressing base-plus-indeks adalah menangani elemen di
dalam array data. Misal
nya bahwa kita ingin menangani elemen di dalam suatu
Memory
Register array —_—e a
|
1000
An oll
020108
0010
eS
bW~~_
GAMBAR 2-9 Suatu contoh yang menunjukkan bagaimana mode base-plus-indeks untuk mena-
ngani fungsi untuk instruksi MOV DX.(BX + Di), Perhatikan bahwa address memori 02010
ditunjukkan oleh instruksi ini
menghasilkan address ini
karena DS (0100H), BX (1000H), dan DI (0010H) dijumlahkan untuk48 Pengantar Mikroprosesor
_
Assembly Language
Operation
MOV CX,[BX + DI] CX is loaded from a location in the data segment addressed by
the sum of BX and DI
MOV CHBP + Si] CHis loaded trom a location in the stack segment addressed by
the sum of BP and SI
MOV [BX + Si],SP The SP register is stored in the data segment at the location ad-
dressed by the sum of BX and SI
MOV [BP + DI],CS The CS register is stored in the stack segment at the location
addressed by the sum of BP and DI
en nn nn
TABEL 2-6 Contoh addressing base-plus-indeks
array data yang terdapat di dalam segmen data pada lokasi ARRAY. Untuk
mendapatkan hal ini, anda perlu memasukkan register BX (base) dengan address
ARRAY dan DI (register indeks) dengan bilangan elemen array untuk diakses.
Meno
a
—
DI
| eenen
Bx
ARRAY -|
Lt
ARRAY
ARRAY ~
ARRAY ~
ARRAY -
ARRAY +
ARRAY
GAMBAR 2-10 Suatu contoh yang menunjukkan addressing base-plus-indeks. Di sini suatu
elemen (DI) dari array data (BX) diakses.Mode Addressing 49
jusing the base plus index addressing mode
0000 3B 0032 R MOV BX,OFFSET ARRAY ;address ARRAY
0003 BF 0010 MOV DI, 10H jaddress element 10H
0006 8a 01 MOV. AL, [BX+DI]} get data
0008 BF 0020 MOV DI, 20H jaddress element
000B 88 OL MoV [BK~DI],AL ysave data
CONTOH 2-3
Gambar 2-10 menggambarkan penggunaan BX dan DI untuk mengakses suatu
elemen di dalam array data.
2-6
ADDRESSING RELATIF REGISTER
Addressing relatif register mirip dengan addressing base-plus-indeks dan addres-
sing displacement (dibahas pada addressing data langsung). Dalam addressing
relatif register, data dalam segmen memori ditangani dengan menambahkan dis-
placement pada isi base atau register indeks (BP, BX, DI atau SI). Gambar 2-1!
menggambarkan operasi instruksi MOV AX, (BX + 1000H). Di sini BX = 0100H
—_—__ eS
Assembly Language Operation
MOV AXJDI + 100H] Data are transferred from the data segment location ad-
dressed by the sum of 100H and the contents of DI
MOV ARRAY{SI],BL BL is stored in the data segment at memory array address
ARRAY, element St
MOV LISTIBP},CL CLs stored in the stack segment at memory array address
LIST, element BP
MOV D1SETIBX} Di is loaded from the data segment at array SET, element 8X
Ne
TABEL 2-7 Contoh address
2 relatif register50 Pengantar Mikroprosesor
Memory
Ra
ster aay
aK A076 A076 30 031018
76 031004
ax 100 icon. , oak
(Bx, jQOOH — _0U™\oH
(Disp.y ws
L~ J
GAMBAR 2-11 _Efek dari cksckusi instruksi MOV AX. (BX + 1000H) jika BX = 0100H dan DS
= 0200H
dan DS = 0200H, schingga address yang dihasilkan adalah jumlah DS x 10H, BX,
dan displacement 1000H untuk total 03100H. Ingat bahwa jika anda mengguna-
kan BP untuk menangani memori dengan mode ini, address ditempatkan dalam
segmen stack. Tabel 2-7 mencatat beberapa instruksi yang menggunakan addres-
sing relatif register.
Addressing Data Array
Kita mungkin bisa menangani data array dengan relatif register dengan mena-
ngani lebih banyak seperti apa yang dilakukan oleh base-plus-indeks addressing.
(Mengacu pada Seksi 2-5 untuk teknik addressing base-plus-indeks). Dalam
Gambar 2-12, kita menggambarkan addressing relatif register dengan contoh
yang sama yang kita gunakan untuk menggambarkan addressing relatif register
untuk menunjukkan bagaimana displacement ARRAY ditambahkan pada register
indeks DI untuk menghasilkan suatu referensi pada suatu elemen array.Mode Addressing 51
2-7
000A
jusing register relative addressing
0000 BF 0010
0003 8A 85 0300 R MOV
0007 BF 0020
88 85 0300 R MOV
CONTOH 2-4
MOV
MOV
DI, 108
AI,ARRAY[DI]
jaddress element 10H
get data
jaddress element 20H
save data
Contoh 2-4 menunjukkan bagaimana teknik addressing yang baru ini bisa
mentransfer isi dari elemen array 10H untuk mengarray elemen 20H. Perhatikan
kemiripan antara program dan program addressing base-plus-indeks.
BASE RELATIF-PLUS-INDEKS ADDRESSING
Mode data-addressing final yang terdapat di dalam 8086/8088 adalah address-
ing relatif-plus-indeks base. Mode ini mirip dengan addressing base-plus-in-
Displacement
ARRAY
Memory
~~
———————4 ARRAY
ot ARRAY
ARRAY
Element ARRAY
ARRAY
ARRAY
ARRAY
L~™
GAMBAR 2-12 Addressing relatif register yang digunakan untuk menangani elemen ARRAY.
Displacement menangani awal dart array, dan isi dari DI (elemen) memilih suatu elemen dari array itu.52 Pengantar Mikroprosesor
deks, namun selain menambahkan isi suatu register base dan register indeks, dia
juga menambahkan suatu displacement untuk menghasilkan address. Tipe ad-
dressing sering digunakan untuk menangani array dua dimensi dari data memori.
Addressing Data
Addressing relatif-plus-indeks base adalah mode addressing yang paling jarang
digunakan. Gambar 2-13 menunjukkan bagaimana data ditunjukkan jika instruksi
dieksekusi oleh 8086/8088 adalah MOV AX.(BX + SI + 100H). Di sini displace-
ment 100H.BX = 0020H, SI = 0010H, dan DS = 1000H, sehingga address yang
efektif untuk instruksi ini adalah lokasi memori 10130H — jumlah displacement,
BX, SI dan DS x 10H. Jelasnya, mode ini terlalu kompleks untuk digunakan
secara berkala. Beberapa instruksi yang tipikal untuk addressing relatif-plus-in-
deks base dicatat pada Tabel 2-8.
Memory
Register array
a
ax A316 Aue
6
ax 0020 /
x ¥
ox} =
a $
= \
<
ps < 10H
se s
ve | aa
== 10 ee
sf 0010 a Displacement
es bE
1O131H
10130H
GAMBAR 2-13 Contoh addressing relatif-plus-indeks base digambarkan dengan instruksi
MOV.100H (BX + SI). Instruksi ini memindahkan data dari memorim ke rehister AX. Address
‘memori adalah jumlah dari DS x 10H, 100H, BX dan SIMode Addressing 53
ee
Assembly Language Operation
MOV DHBX = DI + 20H] OH is loaded from the data segment memory location
addressed by the sum of 8X, DI, and the displacement
‘of 20H.
MOV AX,FILE[BX + Di] AX is loaded from the data segment location addressed
by the sum of BX, Dl, and the offset FILE
MOV LISTIBP + DI],CL. CLis stored at the location in the stack segment ad-
dressed by the sum of BP, DI, and the offset address
usT
ee ee
TABEL 2-8 Contoh instruksi relatif-plus-indeks base
Addressing Array
Misalkan bahwa suatu file dari banyak catatan muncul dalam memori dan tiap
catatan itu berisi banyak elemen. Displacement menangani file itu, register base
menangani satu catatan dalam file, dan register indcks menangani suatu elemen di
dalam catatan itu, Bentuk penanganan (addressing) yang sangat kompleks ini
digambarkan dalam Gambar 2-14.
Contoh 2-5 memberikan suatu program yang akan mengkopi elemen 0 dari
catatan A ke dalam elemen 2 dari catatan C, dengan menggunakan addressing
relatif-plus-indeks base.
using the base plus indexed addressing mode
0009 BB 0364 R MOV BX,OFFSET RECA address record A
0003 BF 0000 MOV DI,0 zaddress element 0
0006 8A 81 O4F4 R MOV L,FILE(BX+DI] ;get data
000A BB 042C R MOV BX,OFFSET RECC address record C
000D BF 0002 MOV DI,2 jaddress element 2
0010 88 81 O4F4 R MOV FILE(BX+DI],AL save data
CONTOH 2-554 Pengantar Mikroprosesor
Memory
a
{
1
————>1_ Element
DI
REC C
Element
REC B File
BX
REC C
REC A
Displacement
el
GAMBAR 2-14 Addressing relatif-plus-indeks base digunakan untuk menangani FILE yang
berisi catatan multiple (REC); setiap catatan berisi banyak elemen.
MODE PROGRAM MEMORI-ADDRESSING
Mode program memori-addressing digunakan dengan instruksi JMP dan CALL
dan terdiri dari tiga bentuk yang berbeda: direct, relatif dan indirect, Bagian ini
menyajikan semua ketiga bentuk addressing memori program itu, dengan meng-
gunakan instruksi JMP.Mode Addressing 55
Opcode Offset iow Offset —high Segment—tow Segment—high
EA 00, 00, 0 0
GAMBAR 2-15 Instruksi bahasa mesin 5-byte untuk instruksi JMP (10000H). Opcode diikuti
dengan address offset (0000H) dan kemudian address segmen kode (1000H)
Addressing Memori Program Direct
Addressing memori program direct adalah apa yang digunakan oleh mikroprose-
sor 8085 untuk semua jump dan call-nya. (Mikroprosesor 8-bit lainnya sudah
jarang menggunakan mode ini). 8086/8088 juga bisa menggunakan bentuk ad-
dressing ini, namun jangan menggunakannya sebanyak addressing program rela-
tif dan indirect.
Instruksi untuk addressing memori program direct menyimpan address dengan
opcode. Misalnya, jika sebuah program akan melompat (jump) ke lokasi memori
10000H untuk instruksi berikutnya dalam suatu program, address 10000H disim-
pan dengan opcode. Gambar 2-15 menunjukkan instruksi JMP intersegmen direct
dan 4 bytes yang dibutuhkan untuk menyimpan segmen selanjutnya dan address
offset. JMP 10000H menyimpan suatu bilangan segmen 1000H, yang dimasuk-
kan ke dalam CS, dan suatu offset 0000H, yang dimasukkan ke dalam IP.
Satu-satunya instruksi lainnya untuk addressing program direct adalah in-
struksi CALL intersegmen, Dalam banyak hal, nama label mengacu pada suatu
address memori bukan suatu address heksadesimal. Bila kita menggunakan nama
suatu label, sebgain besar perakit memilih bentuk yang terbaik untuk menangani
instruksi JMP atau instruksi CALL.
Addressing Memori Program Relatif
Addressing memori program relatif tidak terdapat di dalam mikroprosesor 8085,
namun tersedia pada sebagian besar mikroprosesor 8-bit lainnya, selain juga
8086/8088. Istilah relatif sebenamya berarti ““relatif terhadap pointer insiruksi
(IP). Misainya, jika suatu instruksi JMP akan melompati dua bytes berikutnya,
maka relatif terhadap pointer instruksi, yang selalu menunjuk pada instruksi56 Pengantar Mikroprosesor
10000 EB -
toa oe | PIN,
10002 =
10003. =
1000$ =~
GAMBAR 2-16 _Instruksi MP (2), yang akan melompati dua bytes berikutnya dalam program.
Dalam contoh ini, program akan berlanjut pada lokasi 10004H.
selanjutnya, 2 ditambahkan untuk melompati 2 bytes. Contoh relatif JMP digam-
barkan pada Gambar 2-16. Perhatikan bahwa instruksi JMP adalah instruksi
L-byte, dan displacement, bilangan yang ditambahkan pada pointer instruksi juga
bilangan I-byte
Instruksi relatif muncul sebagai JMP dan CALLS, dan berisi baik dipslace-
ment 8-bit dan 16-bit. Semua perakit menentukan seberapa jauh instruksi JMP
diperlukan untuk berjalan kemudian secara otomatis memilih displacement yang
tepat. Jika jaraknya terlalu besar, banyak perakit menggunakan JMP langsung.
Displacement &-bit memungkinkan maju dan mundur yang mengacu dengan
nilai displacement dari -128 hingga + 127, dan displacement 16-bit memungkin-
kan nilai-nilai displacement + 32 K
Addressing Tidak Langsung
8086/8088 memungkinkan beberapa bentuk program addressing tidak langsung
untuk instruksi JMP dan CALL. Tabel 2-9 menggambarkan beberapa instruksi
jump tidak langsung program yang bisa diterima, yang bisa menggunakan semua
register 16-bit (AX,BX,CX,DX,SP,BP,SI atau DI), semua register relatif (BX),
(BP), (SI), atau (DI) dan semua register relatif dengan suatu displacement.
Gambar 2-17 menunjukkan suatu tabel jump yang disimpan dimulai pada
TABEL address memori. Tabel ini ditunjukkan dengan program pendek yang
digambarkan pada Contoh 2-6. Dalam contoh ini, register BX dimasukkan
TABLE DW LOCO] Addresses of four
DW LOCI | uifterent programs
DW LOC? | «Each address 1s a 2-byte
DW Lcd ieee)
GAMBAR 2-17 Tabel jump yang digunakan untuk memungkinkan program untuk memilih
address jump yang berbeda untuk nilai-nilai yang berbeda dalam register BX.Mode Addressing 57
—
Assembly Language Operation
MP AX Jump to the intrasegment memory location addressed by AX
JMP CX Jump to the intrasegment memory location addressed by CX
JMP NEAR PTR [8X] Jump to the intrasegment memory location stored at the loca-
tion addressed by BX in the data segment
UMP NEAR PTR (Ol] Jump to the intrasegment memory location stored at the loca-
tion addressed by DI in the data segment
JMP TABLETBX} Jump to the intrasegment memory location stored at the loca-
tion addressed by 8X plus the displacement TABLE in the
data segment
ee Ee
‘TABEL 2-9 Contoh addressing tidak langsung program
dengan 4 sehingga, jika dikombinasikan dalam instruksi JMP TABLE(BX) de-
ngan TABLE, address jump yang efektif adalah isi dari entry kedua dalam tabel
—LOc2,
EE
2-9
ADDRESSING MEMORI STACK
Stack adalah suatu bagian yang penting dari sistem memori dalam semua mikro-
prosesor. Dia memegang data secara temporer dan menyimpan address return dari
subrutin, Memori stack adalah memori LIFO (last-in, fisrt-out = masuk terakhir,
keluar pertama) dalam mikroprosesor 8086/8088. Data ditempatkan pada stack
dengan instruksi PUSH; atau instruksi CALL, dalam kasus address return subru-
tin, Data dihilangkan dari stack melalui instruksi POP, atau instruksi RET dalam.
kasus address return subrutin.
yusing indirect addressing for a jump
w00 BB 0004 MOV BX,4 yaddress LOC2
03 FF A7 0000 R JMP TABLE{BX] jump to LOC2
CONTOH 2-658 Pengantar Mikroprosesor
Memory
Ree
Reenter aay
—
ax PUSH Bx —sP beiore
Bx 1234 1234 e
ae Le — sp after
x
oe
——
°
7 mmr
Memory
BX pop_CX PsP ater
x 1234 1234H =
3 [+P before
Dx &
° Ll
ead LN
by
GAMBAR 2-18 _Instruksi PUSH dan POP. (2) PUSH BX menempatkan isi register BX ke dalam
stack yang ditangani oleh SP + SS x 10H. (b) POP CX menghilangkan data dari stack pada lokasi
yang ditangani oleh SP + SS x 10H dan menempatkan data ke dalam register CX.
Stack 8086/8088
Memori stack dalam 8086/8088 dipertahankan oleh dua register: stack pointer (SP)
dan stack segment register (SS). Bila suatu kata data dipaksakan masuk ke stack
(lihat Gambar 2-18 (a), 8 bit high-order ditempatkan dalam lokasi yang ditangani
oleh SP - 1, dan 8 bit low-order ditempatkan pada lokasi yang ditangani oleh SP -
2. SP kemudian didekrementasi oleh dua sehingga kata data berikutnya disimpan
dalam lokasi memori yang tersedia berikutnya, Register SP selalu menunjuk padaMode Addressing 59
daerah memori yang terletak di dalam segmen stack. SP selalu ditambahkan pada
SS x 10H untuk membentuk address memori stack.
Bila data dimunculkan dari stack (lihat Gambar 2-18(b), 8 bit low-order
dihilangkan dari lokasi yang ditangani oleh SP dan 8 bit high-order dihilangkan
dari lokasi yang ditangani oleh SP + 1. SP kemudian diinkrementasi oleh 2. Tabel
2-10 mencatat beberapa instruksi PUSH dan POP yang terdapat dalam set in-
struksi 8086/8088. Perhatikan bahwa PUSH dan POP selalu menyimpan atau
menarik kata data — bukan bytes
i EEE
2-10 RINGKASAN
1
Mode data-addressing mencakup register, immediate, direct, register indi-
rect, base-plus-indeks, relatif register, dan relatif-plus-indeks.
|. Mode memori-addressing program mencakup: langsung, relatif, dan tidak
langsung.
. Tabel 2-11 mencatat semua mode data-addressing yang terdapat di dalam
mikroprosesor 8086/8088.
. Instruksi MOV mengkopi isi dari sumber itu ke tujuannya, dan sumber itu
tidak berubah
Addressing register menguraikan semua register 8-bit (AH, AL, BH, BL,
CH, CL, DH atau DL), atau semua register 16-bit (AX, BX, CX, DX, SP, BP,
——
Assembly Language Operation
POPF Pop flag word from stack
PUSHF Push flag word onto stack
PUSH AX Push AX onto stack
POP BX Pop data from stack into BX
PUSH DS Push DS onto stack
POP cS legal instruction
PUSH [8X1 Push word stored at location
addressed by BX onto stack
———————
TABEL 2-10 Contoh instruksi PUSH dan POP60 Pengantar Mikroprosesor
—_—_—_
Instruction Address Generation
MOV AL,BL Register addressing
MOV AL,LIST (OS x 10H) + LIST
MOV AL,12 Immediate data of 12 decimal
MOV AL [BP] (SS x 10H) + BP
MOV AL,[BX] (OS x 10H) + BX
MOV AL {O1] (OS x 10H) + DF
MOV ASI] (0S x 10H) + SI
MOV ALIBP + 3} (SS x 10H) + BP +3
MOV ALIBX - 10] {OS x 10H) + BX - 10
MOV AL{DI + 10H] {OS x 10H) + DI + 100H
MOV AL,[SI + 300H] (OS x 10H) + SI + 300H
MOV AL,LIST[BP] (SS x 10H) + BP + LIST
MOV AL,LIST[BX] (0S x 10H) + BX + LIST
MOV AL,LISTION (OS x 10H) + DI + LIST
MOV AL,LISTIS!] (OS x 10H) + SI + LIST
MOV AL,LISTIBP + 2] (8S x 10H) + BP + LIST +2
MOV AL,LISTIBX + 20H] (OS x 10H) + BX + LIST + 20H
MOV AL,LISTIDI - 6] (OS x 10H) + DI + LIST -~ 6
MOV AL,LISTIS! + 1] (0S x 10H) + SI + LIST +1
MOV AL|BP + D1) (SS x 10H) + BP + DI
MOV AL{BP + SI] (SS x 10H) + BP + SI
MOV AL,[BX + Dif (OS x 10H) + BX + DI
MOV AL,[BX + SIj (OS x 10H) + BX + SI
MOV ALP + DI + 2] (SS x 10H) + BP + DI +2
MOV ALIBP + SI - 2} (SS x 10H) + BP + SI- 2
MOV AL[BX + DI + 10} (OS x 10H) + BX + DI + 10
MOV AL,[BX + SI + 200} (OS x 10H) + BX + SI + 200H
MOV AL,LISTIBP + OI] (SS x 10H) + BP + DI + LIST
MOV AL.LISTIBP + SI] (SS x 10H) + BP + SI + LIST
MOV AL,LISTIBX + DI] (OS x 10H) + BX + DI + LIST
MOV AL,LISTIBX + Si} (OS x 10H) + BX + SI + LIST
MOV AL,LISTIBP + DI + 2) (8S x 10H) + BP + DI + LIST +2
MOV AL,LISTIBP + Si - 3] (SS x 10H) + BP + SI + LIST - 3
MOV AL,LISTIBX + DI + 100H] (DS x 10H) + BX + DI + LIST + 100H
MOV AL,LISTIBX + SI + 2AFH] (OS x 10H) + BX + SI + LIST + 2AFH
ee
TABEL 2-11 Mode addressing 8086/8088Mode Addressing 61
6.
SI, atau DI). Selain register yang disebutkan di atas, beberapa instruksi tertentu
juga memungkinkan register segmen (CS, DS, SS atau ES) untuk ditangani,
‘Addressing immediate menuntut agar 8 atau 16 bit data secara langsung
mengikuti opcode di dalam memori. Tipe addressing ini biasanya digunakan
untuk memanipulasi data yang konstan.
|. Addressing data langsung digunakan oleh dua instruksi MOV khusus untuk
menerjemahkan kode 8085 ke dalam kode 8086/8088. Bentuk yang dimodi-
fikasi yang disebut addressing displacement juga secara langsung menangani
data di dalam memori dan digunakan oleh sebagian besar instruksi di dalam
set instruksi.
. Addressing tidak langsung register memungkinkan data ditangani pada lo-
kasi memori yang ditunjukkan baik oleh register indeks maupun register
base. Tipe addressing ini sangat berguna untuk mengakses daftar data,
. Addressing base-plus-indeks sering digunakan untuk menangani data dalam
suatu array. Address memori dibentuk dengan menambahkan register base,
register indkes, dan register segmen dikali 10H.
‘Addressing relatif register menggunakan baik register base maupun register
indeks ditambah displacement untuk mengakses data memori. Tipe penanganan
seperti ini juga meminjamkan dirinya untuk menangani data di dalam array.
_ Addressing relatif-plus-indeks base digunakan untuk menangani data di da-
lam array dua dimensi. Address ini dibentuk dengan menambahkan register
base, register indeks, displacement, dan register segmen dikali 10H.
Mode memori-addressing program langsung terdapat pada mikroprosesor
8086/8088: mode langsung, relatif dan tidak langsung.
Addressing memori program langsung dimungkinkan hanya dengan instruksi
JMP dan CALL. Dalam addressing memori program langsung, address offset
dan segmen dari instruksi selanjutnya yang akan dilakukan disimpan setelah
opcode.
_ Addressing memori program relatif memungkinkan instruksi JMP atau
CALL untuk mencabang ke depan atau ke belakang dalam segmen kode yang
ada hingga lebih dari + 32K.
_ Addressing memori program tidak langsung memungkinkan instruksi JMP
dan CALL untuk menangani bagian program atau subrutin lainnya secara
tidak langsung melalui suatu register atau lokasi memori
. Instruksi PUSH dan POP selalu mentransfer kata data antara operand dan
stack.62 Pengantar Mikroprosesor
2-11. PERTANYAAN DAN SOAL
NAWRYN
13.
14.
. Apa yang diperoleh oleh instruksi MOV berikut ini?
a. MOV AX.BX
b. MOV BX.AX
c. MOV BL,CH
d. MOV CS,AX
. Sebutkan register 8-bit yang bisa diuraikan dalam instruksi.
. Sebutkan register 16-bit yang bisa diuraikan dalam instruksi.
Sebutkan register 16-bit yang ditangani hanya oleh sejumlah kecil instruksi.
. Apa yang tidak beres dengan instruksi MOV BL.CX?
. Apa yang tidak beres dengan instruksi MOV CS.SS?
. Buatlah sebuah instruksi yang akan menempatkan 12 H ke dalam register
BL.
. Simbol khusus apa yang kadang-kadang ditemukan dalam addressing data
langsung?
Instruksi 8086/8088 apa yang digunakan untuk menggantikan instruksi LDA
8085?
. Apa itu displacement? Bagaimana dia menentukan address memori dalam
instruksi MOV (2000H) AX?
. Apa yang ditunjukkan oleh simbol []?
. Misalkan DS = 0200H. BX = 0200h, dan DI = 0300H. Tentukan address
memori data yang diakses oleh setiap instruksi berikut.
a. MOV AL, [2000H]
b. MOV AL, [BX]
¢. MOV [DI],AL
Apa yang tidak beres dengan instruksi MOV [BX], [DI]?
Jelaskan perbedaan antara MOV BX, instruksi DATA dan instruksi MOV
BX,OFFSET DATA.
. Misalkan bahwa DS = 1000H. SS = 2000H, BP = 1000H, dan DI = 0100H,
tentukan address data memori untuk tiap instruksi berikut ini.
a. MOV AL, [BP+DI]
b. MOV CX,[DI]
c. MOV DX, [BP]Mode Addressing 63
18.
Sebutkan ketiga mode memori-addressing program.
20.
21.
22.
23.
24,
25.
. Misalkan bahwa DS = 1200H, BX = 0100H, dan SI = 0250H, tentukan
address memori data untuk tiap instruksi berikut ini:
a. MOV [100H},DL
b. MOV [SI + 100H],AL
c. MOV BL,[BX + 100H]
|. Misalkan bahwa DS = 1100H, BX = 0200H, LIST = 0250H, dan SI = 0500H,
tentukan address memori data untuk tiap instruksi berikut ini.
a, MOV LIST[SI].DX
b. MOV BL,LIST[BX + SI]
c. MOV BH,[BX + SI]
Data address register base 8086/8088 apa yang ada di dalam segmen stack?
Berapa banyak byte memori untuk menyimpan suatu instruksi JMP interseg-
men langsung? Apa yang disimpan di dalam setiap bytes?
‘Tunjukkan instruksi JMP yang mana (langsung, displacement panjang, atau
displacement pendek) yang merakit jika instruksi JMP THERE disimpan di
dalam address memori 10000H dan label THERE ditempatkan pada address
memori berikut ini.
a, 10020H -
b. 11000H
c. OFFFEH
d. 20000H
Buatlah sebuah instruksi JMP yang akan melompat ke address yang ditunjuk-
kan oleh register BX.
Pilihlah sebuah instruksi JMP yang akan melompat ke lokasi yang tersimpan
di dalam address memori TABLE.
Berapa banyak bytes data ditempatkan pada stack oleh instruksi PUSH?
Jelaskan bagaimana fungsi instruksi PUSH[DI].