BAB 5

Instruksi ~ontrol Program

PENDAHULUAN
Sebuah komputer tidak akan banyak gunanya tanpa instruksi program kontrol yang menuntunnya melalui operasinya. Tanpa instruksi ini, sebuah komputer perlu dibimbing selangkah demi selangkah melalui sebuah program. Dengan instruksi ini, dia secara otomatis akan bergerak dari satu urutan dari sebuah program ke urutan lainnya tanpa intervensi operator. Bab ini akan membahas mengenai semua instruksi program kontrol, termasuk jump, call, return, interrupt, dan instruksi kontrol mesin, selain juga teknik pemrograman yang relevan.

TUJUAN
Setelah menyelesaikan bab ini, anda akan mampu: I. 2. 3. 4. 5. Menggunakan instruksi jump tak bersyarat untuk mengontrol arus sebuah program. Menggunakan instruksi call dan return untuk mencakup prosedur di dalam struktur program. Menjelaskan operasi instruksi kontrol interrupt dan interrupt. Memprogram dengan instruksi kontrol mesin untuk memodifikasi beberapa bit flag. Memahami bagaimana fungsi program di dalam mikroprosesor 8086/8088.
145

146

Pengantar Mikroprosesor

5-1

KELOMPOK JUMP
Tipe utama instruksi kontrol program, jump (JMP), memungkinkan programer untuk melompati bagian sebuah program ke bagian lainnya memori. Instruksi jump bersyarat memungkinkan programer untuk membuat keputusan berdasarkan tes numerik dengan menggunakan syarat yang ditunjukkan oleh bit flag 8086/8088. Di dalam bagian teks ini, kita membahas semua instruksi jump dan menggambarkan penggunaannya dengan program sam pel. Kita juga membahas kembali instruksi LOOP, yang mula-mula disajikan dalam Bab 3, dan instruksi LOOP bersayarat.

Jump Tak Bersayarat (JMP)
Tige tipe instruksi jump tak bersyarat (mengacu pada Gambar 5-1) tersedia di dalam 8086/8088, yaitu: jump pendek, jump dekat, dan jump jauh. Jump dekat adalah instruksi 2-byte yang memungkinkan jump atau branches ke lokasi memori di dalam + 127 dan -128 bytes dari lokasi memori yang mengikuti jump. Jump dekat 3-byte memungkinkan jump atau branch ke semua lokasi memori pada segmen kode yang sekarang. Dan akhirnya, jump jauh 5-byte memungkinkan jump pada semua lokasi memori di dalam mikroprosesor. Jump pendek dan dekat sering disebut jump intrasegmen dan jump jauh sering disebut jump intersegmen. JUMP Pendek. Jump pendek disebut jump relatif karena mereka bisa dipindahlan ke mana saja di dalam memori tanpa perubahan. Ini disebabkan sebuah address tidak disimpan dengan opcode; melainkan displacement atau jarak disimpan. Displacement jump pendek atau jarak adalah bilangan bertanda I-byte yang nilainya bisa berkisar antara + 127 dan -128. Fungsi ini dengan jelas digambarkan di dalam Gambar 5-2. Jika 8086/8088 melaksanakan jump pendek, displacement ditambahkan pada nilai di dalam pointer instruksi (IP) untuk menghasilkan sebuah address baru. Address baru ini adalah jump address, di mana pelaksanaan program berlanjut setelah jump. Contoh 5-1 menunjukkan bagaimana jump pendek bisa digunakan untuk bergerak dari satu bagian memori ke bagian memori lainnya. Dia juga menjelaskan penggunaan label dekat (Iihat bawah) dengan instruksi jump. Di dalam programming bahasa rakitan, label digunakan di dalam address memori absolut. Ada dua cara untuk menjelaskan sebuah label di dalam 8086/8088:

lnstruksi Kontrol Program

147

0000 S8 0001 0003 03 C3 0005 E9 0200 R 0200 8S 08 0202 E9 0000 R

START:

MOV
ADD JMP

AX,l AX,BX NEXT BX,AX START

NEXT:

MOV JMP

CONTOH5-1

(1) LABEL: menunjukkan bahwa label dekat, (2) LABEL menunjukkan bahwa label itujauh. Label dekat digunakan baik untukjump pendek maupunjumpjauh (jump intrasegmen), dan label jauh digunkana dengan jump jauh (jump intersegmen). Perhatikan bahwa label dekat berakhir dengan titik dua (colon)(:), dan label jauh tidak. Ini' bagaimana perakit membedakannya. Penting untuk diingat bahwa titik dua mengikuti label hanya bila digunakan sebagai address dan bukan bila dia sebagai operand. JMP LABEL: akan menghasilkan sebuah error karena di sini LABEL adalah operand. JMP Dekat. Jump dekat mirip dalam fungisnya dengan jump pendek kecuali jarakjump lebihjauh. Jump dekat mampu bergerak ke setiap lokasi di dalam segmen

1MP SHORTLABEL*

I
(a)

OPCODE (EBH)

DISP

JMP LABEL'
(b)

OPCODE (E9H)

IP low

IP high

1MP LABEL
(e)

OPCODE

IP low

IP high

CS low

*Label in label field appears as LABEL:

GAMBAR 5-1 Tipe instruksi jump. (a) JMP Pendek (2 bytes), (b) JMP dekat (3 bytes) dan (c) JMPjauh (5 bytes).

148

Pengantar Mikroprosesor

Memory

~
lOOOD 1000C 1000B

I000A
10009 10008 10007 10006 10005 10004 (Jump to here)

CS = I000H
IP = 0002H New IP = IP + 04 New IP = 00061'1

10003
10002

10001 10000

04

lMP

Short } Jump

~
GAMBAR 5-2 1MP pendek pad a empat lokasi memori di luar address dari instriksi berikutnya. (Perhatian bahwa dia akan melompati 4 bytes memori berikutnya).

kode yang sekarang untuk instruksi berikutnya karena byte kedua dan ketiga dari instruksi 3-byte ini digerakkan ke dalam register IP bilajump dilakukan. Gambar 5-3 menggambarkan operasi instruksijump dekat. Instruksi ini juga bisa direlokasi karena lokasi yang relatif dari instruksi ini di dalam segmen kode tetap sarna meskipun lokasi segmen kode berubah. Namun, segmen kode keseluruhan harus direlokasi, bukan hanya instruksi jump di dalamnya. Jump pendek, sebaliknya, bisa direlokasi ke mana saja di dalam segmen kode. JMP Jauh, Jump jauh (Iihat Gambar 5-4) digunakan untuk mendapatkan sebuah bilangan segmen baru dan address offset yang baru di dalam segmen itu. Bytes 2 dan 3 dari jump jauh 5-byte memegang register pointer instruksi (IP) data, dan bytes 4 dan 5 memegang data register segmen (CS) kode yang baru. Tidak seperti jump pendek dan jump dekat, jump jauh digunakan dengan label yang tidak memiliki titik dua.

lnstruksi Kontrol Program

149

JUMP dengan Operand Register. Instruksi jump juga bisa digunakan untuk
menjelaskan register 16-bit sebagai operand. Ini secara otomatis membentuk instruksi sebagai sebuah jump dekat tidak langsung. Address jump berada di dalam register yang dijelaskan oleh instruksi jump. lsi dari register yang dijelaskan digerakkan ke dalam IP sehinggajump intrasegmen muncul pada lokasi yang ditangani oleh register. Tipe jump ini sangat berguna bila mengacu sebuah tabel jump. JMP NEAR PTR AX mungkin juga bisa digunakan untuk menjelaskan jump tidak langsung yang dekat. Contoh 5-2 menggambarkan tabel jump dan urutan yang digunakan untuk mengakses sebuah entry di dalam tabel. Misalkan bahwa bilangan di dalam BX berasal dari sebuah bentuk software yang dikendalikan oleh menu. Operator mengetik bilangan 2 pada keyboard, dan software yang digunakan untuk membaca key ini mengubahnya menjadi biner dan menempatkannya di dalam BX. Contoh 5-2 mengambil bilangan 2, yang diketik di dalam contoh ini, dan mendekrementasi (menguranginya). Selanjutnya 1 ditambahkan dua kali pada address memori TABLE, yang dimasukkan ke dalam register SI. Setelah penambahan, SI menyamakan address memori TABEL +2. Beriktunya, instruksi MOY AX,[SI] menarik

Memory

~
12011 12010 es 1000

Old lP
200B

(12000
1200E 1200e 1200B 1200A 12009

1200F

(Jump to here)

20 00

NewlP
2000

12008

JMP

I

Near

Jump

---._./~

~"---'

GAMBAR 5-3 JMP dekatyang menggantikan isi register IP dengan 2 bytes (address offset) yang mengiktui opcode.

150 Pengantar Mikroprosesor

Memory

OldCS

0800
Old IP

A3128 A3127 A3126 08007 08006 08005 08004 08003 08002 08001 08000

(Jump to here)

0005
NewCS

A300
New IP

A3 00 01 27
JMP

Far jump

0127

GAMBAR 5-4 IMP jauh yang menggantikan isi baik register IP maupun CS dengan 4 bytes yang mengikuti opcode.

address yang tersimpan di dalam TABEL +2 ke dalam AX (address TWO di dalam contoh ini). Bila instruksi JMP AX dilaksanakan, address di dalam AX (TWO) ditransfer ke dalam IP. Contoh ini menyebabkan program berlanjut melaksanakan software pada address memori TWO seperti seolah-olah program mengandung JMP TWO. Jika 1 diketik, maka urutan instruksi yang sarna akan melompat ke lokasi memori ONE untuk melanjutkan software.
0205 0208 0209 020B 0200 020F BE 4B 03 03 8B FF 0600 R F3 F3 04 EO TABLE: MOV DEC ADD ADD MOC JMP OW OW OW SI/OFFSET BX SI/BX SI/BX
AX/[SI]
AX

TABLE

0600 1000 0602 2000 0604 3000

ONE TWO THREE

CONTOH5-2

fnstruksi Kontrol Program

151

JUMP dengan Operand Tidak Langsung Memori. Bila sebuah instruksi jump tidak langsung digunakan di dalam program, tipenya harus dijelaskan dengan NEAR PTR atau FAR PTR. Contoh 5-3 menggambarkan bagaimana penunjukpenunjuk ini bis mengubah apa yang muncul sebagai instruksi jump yang sarna. Jump pertama (intrasegmen) mengacu lokasi memori ADDREI untuk 4-byte kata ganda (double word) yang memegang lokasi IP dan CS berikutnya. Jump kedua (intersegmen) mengacu kata 2-bye yang memegang IP berikutnya.

0606 FF 2E 07CA.R 060A BF 07C8 R 0600 FF 25
CONTOHS-3

JMP MO'I/ JMP

ADDRl DI,OFFSET ADDR2 [DI]

Jump Bersyarat
Jump bersyarat adalah jump pendek, yaitu, jangkauan jump selalu di dalam + 127 hingga -128 bytes dari address instruksi berikutnya. Semua instruksi jump bersyarat didaftar pada Tabel 5-1 bersama-sama dengan syarat yang diujikan pad a masing-masing. Jump bersyarat menguji bit flag berikutnya: sign (S), zero (Z), carry (C), parity (P) dan overflow (0). Jika syarat yang diuji itu benar, jump pada label muncul, dan jika syarat itu salah, tidak ada jump yang muncul dan instruksi urutan berikutnya dilaksanakan. Sebagian besar jump bersayarat sangat langsung dan menguji hanya satu bit flag, namun beberapa di antaranya lebih rum it. Yang lebih rumit itu digunakan untuk perbandingan magnitude. JA, JAE, JE, JNE, JB dan KBE mengecek magnitude relatif dari bilangan takbertanda. JG, JGE, JE, JNE, JL dan KLE mengecek magnitude relatif dari bilangan bertanda. Jump bersayarat lainnya menguji bit flag individual seperti halnya overflow dan parity. Perhatikan bahwa JE memiliki opcode alternatif JZ. Semua instruksi memiliki alternatif, namun bukan berarti semuanya memiliki alternatif opcode, kecuali JE/JZ dan JNE/JNZ. Misalnya, JA/LBE berarti jump ke atas/jump ke bawah atau sarna. Tidak banyak maknanyajika kita katakanjump ke bawah atau

152

Pengantar Mikroprosesor

Instruction

Condition Tested

Comment

JA JAE JB JBE JC JE or JZ JG JGE JL JLE JNC JNE or JNZ JNO JNS JNP JO JP JS JCXZ

C = 0 and Z ~ 0
C=O

Jump above Jump above or equal to Jump below Jump below or equal to Jump carry set Jump equal to or jump 0 Jump greater than Jump greater than or equal to Jump less than Jump less than or equal to Jump carry cleared Jump not equal to or jump not 0 Jump no overflow Jump no sign Jump no parity Jump on overflow Jump on parity Jump on sign Jump if register CX is 0

C= 1 C = 1 or Z = 1 C= 1 Z= 1 Z=OandS=O s=O S~O Z = 1 or S ~ 0 C=O Z=O 0=0 8=0 P=O 0=1 P= 1 8=1

ex

=0

T ABEL 5-1

Instruksi jump bersyarat

sarna bilajump ke atas lebihjelas. JBE adalah suatu alternatifdari JAyangjarang digunakan. Begitu juga, sebagian besar jump bersyarat memiliki alternatif yang jarang digunakan, Tes ini untuk atau syarat yang sarna dan bukan-O atau syarat bukan-sama, Instruksi jump bersyarat yang paling radikal adalah instruksi JeXZ, yang menguji bukan bit flag namun isi dari register ex. Jika ex adalah 0, jump pada label muncul, dan jika ex bukan 0, maka instruksi urutan berikutnya dilaksanakan.

°

Instrukst Kontrol Program

153

Misalkan bahwa instruksi string SCASB digunakan untuk melacak suatu tabel untuk OAH (Mengacu pada Contoh 5-4). Pada akhir pencarian ini, OAH mungkin telah ditemukan, atau dia mungkin tidak ditemukan. Dalam hal ini, instruksi JCXZ membuktikan bahwa dia sangat berguna di dalam pengecekan syarat tidakditemukan. Jika tabel keseluruhan dicek dan tidak ada OAH yang ditemukan, maka counter (CX) akan mencapai O. Jika OAH ditemukan, maka CX tidak akan menjadi O.

iscan a table of 100 bytes for a OAH
i ibyte 100 = OOH to indicate the end of the table

060F 0612 0615 0617 0618 061A

BF 0600 R B9 0064 BO OA FC F2/ AE E3 00

SCAN: MOV MOV MOV CLD REPNE JCXZ

DI,OFFSET TABLE CX,lOO AL,OAH SCASB NOT_FOUND

;address table iload counter iload AL iscan for OAH

CONTOHS-4

LOOP
Instruksi LOOP adalah kombinasi dari jump bersyarat dan instruksi dekremen CX. Dia akan mengurangi isi register CX dan, jika CX bukan 0, jump ke label yang berkaitan dengan LOOP. Jika CX menjadi 0, maka instruksi urutan berikutnya di dalam program dilaksanakan. Contoh 5-5 menunjukkan bagaimana data di dalam satu blok memori (BLOCKl) ditambahkan pada data di dalam blok memori kedua (BLOCK2) dengan menggunakan instruksi LOOP untuk mengontrol bilangan yang ditambahkan. Perhatikan bagaimana LODSW dan STOSW digunakan di dalam contoh ini. Juga perhatikan bahwa prefiks override segmen (SEG ES:) memilih segmen tambahan untuk instruksi ADD. Ini dilakukan karen a register DI menunjuk pada data di dalam segmen tambahan untuk operasi string. LOOP Bersyarat. Seperti halnya REP, instruksi LOOP juga memiliki beberapa bentuk bersyarat: LOOPE dan LOOPNE. LOOPE (LOOP sewaktu sarna) akan melompat ke address yang ditunjukkan oleh label jika CX bukan 0 dan syarat

154 Pengantar Mikroprosesor

;adds the words in BLO~Kl to BLOCK2 06lC B9 0064 061F BE 03C8 R 0622 BF 05C8 R 0625 AGAIN: LODSW ADD AX,ES:[DI] STOSW LOOP AGAIN MOV MOV MOV CX,lOO SI,OFFSET DI,OFFSET BLOCKl BLOCK2

0625 AD 0626 26: 03 05 0629 AS 062A E2 F9

CONTOH5-5

yang sarna muncuI. Dia akan mengeluarkan loop jika menjadi 0 ataujika syarat tak sarna ditunjukkan oleh bit flag. Instruksi LOOPNE (LOOP sewaktu tidak sarna) berfungsi dengan cara sebaliknya. LOOPNE tetap di dalam loop selarna bukan 0 dan sementara syarat yang tidak sarna muncuI. LOOPNE mengeluarkan loop bila menjadi 0 atau jika syarat yang sarna muncuI. Keduanya adalah LOOP sewaktu instruksi: LOOPE adalah loop sewaktu sarna, dan LOOPNE adalah loop sewaktu tidak sarna. Seperti halnya kondisional berulang, instruksi loop bersyarat memiliki alternatif: LOOPZ sarna dengan LOOPE, dan LOOPNZ sarna dengan LOOPNE. Alternatif ini bisa digunakan sewaktu-waktu, narnun ini penting bagi dokumentasi untuk menggunakan opcode yang cocok dengan aplikasi tertentu.

ex

ex

ex

5-2

SUBRUTIN
Subrutin adalah bagian yang sangat penting dari semua arsitektur software komputer. Ini adalah sekelompok instruksi yang biasanya melakukan satu tugas tertentu dan ini penting karena dia sering sekali digunakan oleh sebuah program namun hanya membutuhkan sekali penyimpanan di dalam memori. Dia menyimpan ruang memori dan juga membuat tugas pemrograman jauh lebih sederhana karen a dia membutuhkan waktu lebih sedikit untuk mengkode program yang berisi subrutin. Kerugian satu-satunya dari subrutin ini adalah bahwa dia membu-

Instruksi Kontrol Program

155

tuhkan waktu komputer sedikit lebih banyak untuk menghubungkan dengan subrutin (CALL) dan kembali (return) dari sana (RET). Stack digunakan untuk menyimpan address return sehingga subrutin bisa kembali ke program pada poin setelah instruksi CALL di dalam program. Di dalam perakit mikroprosesor 8086/8088, ada beberapa aturan yang pasti untuk penyimpanan subrutin. Pertama, subrutin disebut suatu prosedur karena dia akan berada di level bahasa yang lebih tinggi seperti Pascal. Contoh 5-6 menunjukkan bagaimana prosedur dekat (intrasegmen) dan jauh (intersegmen) dijelaskan untuk perakit.

..

062 062C 8B C3 062E 03 C1 0630 CB 0631 0631 0631 0633 0635 0637 0638 F7 E3 F7 E1 F7 E2 C3

NAME

PROC AX,BX AX,CX ENDP

FAR

MOV
ADD

RET
NAME

LABEL PROC NEAR MOL MOL MOL

RET

BX CX OX

LABEL ENDP

CONTOH5-6

Perhatikan dari contoh di atas bahwa dua pseudo-ope ode yang baru muncul di dalam listing: PROC dan ENDP. PROC digunakan untuk menunjukkan dimulainya prosedur (subrutin), nama prosedur, dan tipe instruksi CALL dan RET yang digunakan oleh perakit. Nama subrutin bisa berlaku untuk nama bahasa rakitan manapun. Tipe bisa dekat atau jauh, bergantung pada apakah programer mengharapkan prosedur itu ditempatkan di dalam segmen kode atau agak jauh darinya. Dua prosedur telah digambarkan di sini: satu tipe yang dekat dan yang lainnya tipe yang jauh. Pseudo-opcode yang kedua yang baru, ENDP, memberitahu perakit bahwa dia telah mencapai akhir prosedur dan juga nama prosedur.

156 Pengantar Mikroprosesor

Sebagian besar prosedur yang akan menjadi bagian dari kepustakaan sistem harus ditulis seperti halnya prosedur jauh. Selain itu, setiap jumps di dalam prosedur harus pendek sehingga mereka bisa direlokasi dengan mudah. Karena jump pendek benar-benar bisa direlokasi, prosedur yang menggunakannya bisa ditambahkan pada setiap program tanpa persiapan khusus. Di dalam prosedur universal, semua register yang digunakan harus disimpan pada stack dan kemudian diambil kembali sebelum return. Juga semua jumps di dalam prosedur harus pendek.

,
CALL
Instruksi CALL mentransfer arus program pada prosedur. CALLs berbeda denganjump karena mereka menyimpan isi IP di dalam stackjika CALL dekat atau IP dan CS pada stackjikajauh. CALL Dekat. Instruksi CALL dekat panjangnya 3 bytes dan byte kedua dan ketiganya berisi lokasi offset dari prosedur dekat. Sebab itu, CALL menyimpan IP pada stack dan melompat ke prosedur. Namun mengapa dia menyimpan register IP? IP berisi address dari instruksi urutan berikutnya di dalam memori - yaitu yang mengikuti CALL. Bila IP didorong ke dalam stack, stack berisi address return - address dari instruksi berikutnya. Gambar 5-5 menunjukkan address return yang sedang disimpan di dalam stack dan juga jump pada prosedur. CALL Jauh. Instruksi CALL yang jauh seperti halnya jump jauh karena dia memungkinkan CALL pada setiap lokasi di dalam memori. CALL jauh adalah instruksi 5-byte di mana byte 2 dan 3 berisi IP dari prosedur dan byte 4 dan 5 berisi nilai segmen kode yang baru (CS) untuk prosedur. Selain melompat ke prosedur, instruksi CALL jauh mendorong baik register IP dan CS ke dalam stack. Karena register IP dan CS berisi address dari instruksi berikutnya yang akan dilaksanakan, address return didorong ke dalam stack. Proses ini digambarkan pada Gambar 5-6 CALL dengan Operand Register. Seperti halnya jump tipe ini, CALL bisa juga memiliki operand register, yang memungkinkan CALL tidak langsung. Tipe CALL ini digunakan sarna persis dengan call register JMP. Register yang dijelaskan di dalam CALL tidak langsung berisi address offset 16-bit dari subrutin. Pen-

Instruksi Kontrol Program

157

Memory Old SP

FFFF
Old SS

xooo
Old IP
0003

AFFFF AFFFE AFFFD

} Slack

]

11004 11003 11002 11001

(Subroutine

here)

New SP

11000

FFFD
New SS
10004· 10003 10002 10 02

AOOO
NewlP

10001 10000

IOO~

Call

Near call

GAMBAR 5-5 Dampak dari instruksi call dekat pada stack dan register SP, SS, dan IP. Perhatikan bagaimana IP yang sudah tua itu disimpan di dalam stack.

0000 BE 0005 R 0003 FF 06 0005 0005 0006 0008 OOOA OOOC OOOE OOOF 0010 52 8B E5 E7 8B SA C3 DO 33 AA C2 COMPUTE

MOV CALL PROC NEAR PUSH MOV IN OUT MOV POP RET COMPUTE ENDP

SI,OFFSET SI

COMPUTE

OX OX,AX AX, DATA PORT,AX AX,OX OX

CONTOH5-7

158 Pengantar Mikroprosesor

Memory Old SP FFFD Old SS AFFFF AFFFE AFFFD

AOOO
11006 Old IP 1006 11005 11004 11003 11002 New SP FFFF New SS 11001 11000

RET

Near RET

AOOO
New IP 000..1

1000..1 10002 10001 10000

GAMBAR 5-6

Dampak dari instruksi RET dekat pada stack dan register SP, SS, dan JP.

ting untuk diingat bahwa instruksi register CALL mungkin hanya suatu CALL intrasegmen karen a register ini berisi hanya address offset 16-bit. Contoh 5-7 menggambarkan penggunaan instruksi register CALL untuk memanggil subrutin yang dimulai pada address offset COMPUTE. CALL dengan addressing memori tidak langsung sangat berguna bila pernyataan GOTO (bahasa BASIC) yang dihitung dibutuhkan di dalam program bahasa rakitan. Call memori tidak langsung bisa tipe dekat ataujauh, bergantung pada bagaimana data memori ditata dan bagaimana subrutin dijelaskan dengan pseudo-opcode PROC. Contoh 5-8 menunjukkan bagaimana goto yang dihitung digunakan untuk mengacu berbagau prosedur di dalam memori. Di sini DI mengandung bilangan 1,2, atau 3. Bilangan ini dimodifikasi pada 0, 2, atau 4 dan ditambahkan pada SI, yang menghasilkan address tabel lookup. Tabel lookup (TABLE) berisi address prosedur yang benar ONE, TWO dan THREE.

CALL dengan Addressing Memori Tidak Langsung.

lnstruksi Kontrol Program

159

;lookup table in data segment 0764 0008 R 0766 0018 R 0768 0028 R TABLE DW DW DW ONE TWO THREE
CALL

;callinq sequence for computer ito a near subroutine

;assumes that Dl is a number between one and three 0000 0001 0004 0006 0008 0008 0018 0018 0028 0028 4F BB 0764· R 03 FF FF 11 ONE ONE TWO TWO THREE THREE DEe MOV ADD CALL PROe ENDP PROe ENDP. PROe ENDP NEAR NEAR Dl BX,OFFSET TABLE Dl,D! [BX+DI] NEAR

CONTOH5-8

RET
Instruksi return (RET) memindahkan baik bilangan 16-bit (return dekat) dari stack dan menempatkannya di dalam IP maupun bilangan 13-bit (return jauh) dan menempatkannya di dalam IP dan CS. Instruksi return dekat dan jauh keduanya dijelaskan di dalam pernyataan PROC prosedur dan secara otomatis dipilih oleh perakit. Bila IP atau IP dan CS diubah, address dari instruksi berikutnya berada di lokasi yang baru. Lokasi yang bam ini adalah address dari instruksi yang secara

160

Pengantar Mikroprosesor

langsung mengikuti CALL ke prosedur yang paling bam. Gambar 5-7 menggambarkan bagaimana CALL berhubungan dengan prosedur dan bagaimana RET kembali dari sebuah prosedur, Ada satu.lagi bentuk instruksi return. Bentuk ini memungkinkan sebuah bilangan ditambahkan pada isi pointer stack (SP) sebelum return. Jika dorongan (pushes) itu hams dihilangkan sebelum return, displacement 16-bit ditambahkan pada SP sebelum RET menarik address return dari stack dan kembali. Contoh 5-9 menunjukkan bagaimana tipe return ini menghilangkan (menghapus) data yang ditempatkan di stack dengan beberapa dorongan. RET 4 di dalam contoh ini menambahkan 4 pada SP sebelum memindahkan IP dari stack. Karena PUSH AX dan PUSH BX bersama-sama menempatkan 4 byte data pada stack, return ini secara efektif menghilangkan data AX dan BX dari stack. Contoh ini digunakan hanya pada kasus khusus dan ini bukan tipe normal return.
I I

CALL MOV ~IOV CALL· MOV

t

STEP
AX.CX CX.DX

~

STEP
DX. BX

t

I I

--- ------_-

_-

---""'I

_.,.,..-

_-

I

STEP:

ADDBX,DX MOVDX,CX

RET

GAMBAR 5-7 Program pendek dan Subrutin yang menggambarkan subrutin dengan instruksi CALL dan RET.

kaitan antara program dan

0000 0000 50 0001 53 0002 C2 0004 000
CONTOH5-9

TEST_RIG

PROC PUSH PUSH RET

NEAR
AX

ax

4

TEST_RIG

END P

Instruksi Kontrol Program

161

5-3

INTERRUPTS
Interrupt bisa merupakan panggilan (call) subrutin yang dihasilkan dari software (diturunkan secara ekstemal) ataupun panggilan subrutin yang dihasilkan dari software (diturunkan secara internal). Dia akan menginterupsi program yang sedang berlangsung dengan memanggil subrutin servis interupt. Interupt hardware dipelajari dalam Bab 9. Bagian ini berkaitan dengan interupt software, yang merupakan tipe khusus instruksi CALL di dalam mikroprosesor 8086/8088. Di dalamnya, kita mempelajari tiga tipe instruksi interupt (INT, INTO, dan INT 3), memberikan peta dari semua lokasi vektor interupt yang ada, dan menjelaskan tujuan dari instruksi return interupt khusus (IRET).

Vektor Interupt
Vektor interupt adalah bilangan 4-byte yang disimpan di dalam 1024 byte memori pertama (0000H-003FFH). Ada 256 vektor interupt semacam itu, yang sebagian digunakan untuk hardware dan sebagian untuk software. Setiap vektor mengandung address subrutin servis interupt-subrutin yang dipanggil oleh interupt. Vektor ini dan fungsinya yang tercatat di dalam Tabel 5-2 bersama-sama dengan masing-masing lokasi memorinya. Setiap lokasi vektor di dalam tabel itu panjangnya 4 byte dan mengandung address subrutin servis interupt. 2 byte pertama dari vektor itu mengandung bilangan yang dimasukkan ke dalam register CS (CS rendah diikuti dengan CS tinggi) sebagai respon atas suatu interupt.

Instruksi Interupt
8086/8088 memiliki tiga interuksi interupt yang berbeda yang tersedia bagi para programer: INT, INTO dan INT 3. Masing-masing instruksi ini mengambil vektor dari tabel veltor interupt dan kemudian memanggil subrutin pada lokasi yang ditahgani oleh entry vektor. Selain memanggil subrutin, instruksi ini juga mendorong flag ke dalam stack. INT. Terdapat 256 instruksi interupt software yang berbeda yang tersedia bagi programer. Setiap instruksi INT memiliki operand numerik yang jangkauan nilainya berkisar antara 0 hingga 225 (OOH-FFH). Misalnya, INT 100 akan menggunakan vektor interupt 100. Masing-masing instruksi ini panjangnya 2 byte, kecuali untuk INT3, yang merupakan instruksi interupt software khusus l-byte,

162 Pengantar Mikroprosesor

Bila instruksi interupt software dilaksanakan, (1) dia akan mendorong flag ke dalam stack, (2) membebaskan flag I dan T, (3) mendorong CS ke dalam stack, (4) mengambillokasi CS yang baru dari tabel vektor, (5) mendorong IP ke dalam stack, (6) mengambil lokasi IP yang baru dari tabel vektor, dan (7) melompat ke lokasi yang baru ini. Sebab itu INT mirip sekali dengan CALL jauh kecuali bahwa dia tidak hanya mendorong baik CS maupun IP ke dalam stack namun juga mendorong kopi register flag ke dalam stack. Sebenarnya, dia bisa disebut sebagai kombinasi antara instruksi PUSHF dan CALL. Perhatikan bahwa bila instruksi software INT diterima, dia membebaskan bit (I) flag interupt, yang mengontrol permintaan interupt pin interupt hardware ekstemal (INTR). Bila I adalah logika 0, pin INTR akan mati atau lumpuh. Bila I adalah logika 1, pin INTR akan hidup atau mampu. Tujuan dari flag T akan dibahas di dalam Bab 9 mengenai interupt. Interupt software adalah subrutin sistem yang paling sering digunakan, yang sudah sering digunakan pada semua atau sebagian besar program yang menggunakan sistem dan kontrol seperti printer, CRT, dan display. CALL jauh, yang biasanya digunakan untuk fungsi ini, panjangnya 5 byte, dan instruksi INT panjangnya hanya 2 byte. INT, yang digunakan untuk menggantikan CALL jauh, sebab itu akan menyimpan 3 bytes memori setiap kali subrutin dipanggil. Ini bisa menambahkan ruang penyimpanan memori di sebagian besar program. Bila kita menggunakan interupt software, kita mungkin perlu menyisipkan suatu instruksi yang memungkinkan interupt di tengah subrutin dipanggil oleh instruksi INT. Ini akan dijelaskan lebih jauh di dalam Bab 9.
Number Address Function Divide error Single step NMI (hardware Breakpoint Interrupt on overflow Reserved for future use" User interrupts interrupt)

0 1 2 3 4 5-31 32-255

OH-3H 4H-7H 8H-BH CH-FH 10H-13H 14H-7FH 80H-3FFH

"These interrupts are used on some of the newer versions of the 808618088 such as the 80186/80188,80286, and 80386.

T ABEL 5-2

Peta vektor interupt

Instruksi Kontrol Program

163

IRET. Instruksi return interupt (IRET) digunakan hanya dengan interupt software atau hardware. Tidak seperti instruksi return sederhana, lRET akan (I) mem-pop data stack kembali ke dalam IP, (2) mem-pop data stack kembali ke dalam CS, dan (3) mem-pop data stack kembali ke dalam flag. Pembahasan yang lebih mendalam mengungkapkan bahwa instruksi IRET pada dasarnya sebuah kombinasi dari instruksi RET dan POPF. Bila lRET mem-pop flag kembali ke dalam register flag, isi sebelumnya dari I dan T, yang dibebaskan setelah porsi flag dorongan dari instruksi INT, disimpan. Ini berarti bahwa jika interupt dimungkinkan sebelum interupt software (mereka selalu dilumpuhkan selama subrutin servis interupt), mereka secara otomatis dimungkinkan kembali oleh instruksi IRET. INT 3. Instruksi INT 3 bertindak seperti interupt software lainnya kecuali dia panjangnya hanya I byte, sementara instruksi interupt software lainnya panjangnya 2 byte. Bilangan vektor 3 (lihat Tabel 5-2) bahkan diberikan nama khusus, breakpoint interupt, karena sangat mudah bagi para programer untuk menyisipkan instruksi l-byte pada semua bagian di dalam software ini. Setelah disisipkan, instruksi INT 3 akan memanggil subrutin yang ditunjukkan oleh vektor 3 pada bagian ini di dalam software di mana INT 3 disimpan, terpisah dari software pada bagian ini. Jika software pada INT 3 subrutin servis interupt menyajikan semua register dan waits, ini akan sang-at mudah untuk menggunakan interupt ini untuk men-debug program yang salah. INTO. Interupt pada overflow (INTO) adalah instruksi interupt bersyarat. Jika • flag overflow (0) telah siap dan instruksi INTO ditemukan di dalam sebuah program, subrutin yang addressnya disimpan pada vektor 4 akan dipanggil. Sebaliknya,jika 0 bit dibebaskan dan instruksi INTO ditemukan, tidak ada interupt yang akan dipanggil. Instruksi ini mirip dengan instruksi JO kecuali bahwa dia akan menginterupt bukan jump pada overflow. Instruksi INTO digunakan secara luas setelah aritmetika bertanda untuk mendeteksi kondisi error overflow. Di dalam tipe program ini, INTO muncul setelah masing-masing penambahan dan pengurangan.

INT50
Misalkan bahwa, dalam sistem tertentu, kita sering perlu menambahkan isi dari SI, DI, BP dan BX dan menyimpan hasilnya di dalam AX. Karena ini tugas yang

164

Pengantar Mikroprosesor

;interrupt service subroutine 0000 0002 0004 0006 0008 03 03 03 03 CF C3 C6 C7 C5
ADOM: ADO ADO ADO ADO IRET

AX,BX AX,SI AX,OI AX,BP

CONTOH5-10

biasa, kita sebaiknya menuliskannya sebagai interupt bukan sebagai subrutin. Contoh 5-10 menggambarkan interupt ini dan menunjukkan bagaimana vektor interupt dijelaskan di dalam program bahasa rakitan. Setiap kali fungsi ini dibutuhkan, instruksi INT 50 digunakan untuk memanggilnya.

Kontrol Interupt
Meskipun bagian ini tidak membahas mengenai interupt hardware, kali ini kita perlu memperkenalkan dua instruksi yang digunakan untuk mengontrol struktur interupt hardware: set interupt flag (STI) dan clear interupt flag (CLI). Instruksi ini digunakan untuk mengatur (set) dan membebaskan (clear) flag bit I. Karena itu, bila flag I dibebaskan pin INTR lumpuh, dan bila flag I diatur INTR akan mampu, STI akan memungkinkan interupt dan CLI akan melumpuhkannya.

5-4

KONTROL MESIN DAN BERBAGAI MACAM INSTRUKSI
Kategori instruksi terakhir yang ada pada kumpulan instruksi 8086/8088 adalah kontrol mesin dan beragam kelompok. Instruksi ini menyediakan kontrol carry bit, sampel pin TEST, dan melakukan berbagai fungsi lainnya. Karena sebagian besar instruksi ini digunakan di dalam kontrol hardware, mereka perlu disebutkan di sini. Kita membahas masalah ini dengan sangat rinei di dalam bab yang membahas mengenai aplikasi hardware bentuk ini.

Instruksi Kontrol Program

165

Mengontrol Carry Flag Bit (C)
Carry flag digunakan selama penambahan dan pengurangan multipel-kata dan menunjukkan kondisi error di dalam subrutin. Ada tiga instruksi yang memungkinkan programer untuk memilih kondisi dari bit carry flag (C): set carry (STC), clear carry (CLC), dan komplemen carry (CMC).

WAIT
Instruksi WAIT menguji TEST pin hardware, yang digunakan untuk menguji berbagai kejadian hardware eksternal. Jika pin TEST adalah logika 1, 8086/8088 akan diam dan menunggu pin TEST menjadi logika O. (perhatikan bahwa sebuah interupt juga akan mengeluarkan kondisi diam atau tunggu). TEST sering digunakan dengan coprosesor 8087 untuk menguji pin output BUSY dari sirkuit itu. Kita membahas instruksi ini dengan lebih rinei di dalam hardware.

HLT
Instruksi berhenti (HL T) menghentikan pelaksanaan software. Hanya ada dua cara untuk mengeluarkan halt: dengan interupt atau dengan mereset sistem hardware. Instruksi ini biasanya digunakan hanya pada kasus tertentu.

Nap
Bila mikroprosesor bertemu dengan NOP, dia membutuhkan tiga periode cloking untuk berjalan. Namun, NOP tidak melakukan operasi apapun. Mengapa NOP digunakan di dalam software? NOP menemukan aplikasi di dalam software delay. Di dalam program bahasa mesin, para programer sebaiknya membiarkan area patch setiap 50 byte atau sejumlah itu kalau program membutuhkan modifikasi pada masa mendatang. Area patch ini biasanya berisi instruksi NOP sehingga operasi program tidak akan terpengaruh oleh area patch ini.

LOCK Prefix
LOCK Prefix adalah sebuah byte yang ditempatkan di sebelum instruksi 8086/8088 untuk mendiami coprosesor eksternal di dalam sistem untuk memperoleh akses ke dalam sistem buses. Rincian lebih jauh mengenai LOCK ini akan diberikan kemudian, di dalam bab mengenai coprosesor.

166

Pengantar Mikroprosesor

ESC
Instruksi escape (ESC) menyampaikan informasi kepada coprosesor aritmetika 8087. Bila instruksi escape dilakukan, 8086/8088 akan melakukan NOP, dan coprosesor eksternal menerima opcode 6-bit yang diterjemahkan ke dalam instruksi ESC. Selain itu, instruksi ESC juga mengakses lokasi memori sehingga coprosesor bisa membaca atau menulis data jika perlu. ESC adalah sebuah opcode untuk coprosesor eksternal. Lebih jauh mengenai hal ini akan dibahas dalam bab mengenai prosesor aritmetika 8087.

5-5

PROGRAM SAM PEL
Bagian ini menyajikan beberapa program sampel yang menggambarkan bagaimana menata sebuah program untuk digunakan dengan makroperakit (MASM) atau perakit (ASM). Bagian ini juga menjelaskan beberapa teknik programing yang umum yang berguna dalam berbagai aplikasi.

Membuat Program untuk EXE File
File execute (EXE) sebenarnya sebuah perintah DOS (sistem operasi disk) yang baru. Misalnya, jika anda menciptakan sebuah file EXE bernama DOG.EXE, maka yang anda perlu ketikan untuk melaksanakan program ini adalah DOG. Bagaimanapunjuga, tidak mudah untuk membuat program untuk perakit IBM-PC sebagai file execute, karena ini untuk mesin yang lain. Setiap segmen hams dijelaskan dan banyak rincian lainnya yang kecil yang harus diatasi atau perakit tidak akan menerima program itu. Contoh 5-11 menunjukkan sebuah template yang digunakan untuk sebagian besar program bahasa rakitan bila program itu dan semua subrutin muncul bersamaan.

;Example program that will display a few; ;messages in the video screen.

""""""","",,""""",,""",, ,

· ·

, .

.

"""""",,""""",""""""""
CONTOH 5-11

·

.

Instruksi Kontrol Program

167

= 0024

= 0000 OOOA 0009

M!S_END CR LF NINE

,

·

""""""""""""""",,1""""
""""""""",,111',"""""""" i STAC~_SEG ???? STACK_TOP STACK_SEG """""""""""""""""""",

·

EQU EQU EQU EQU

, $' 13 10 9

. .

·

Stack segment

0000 0000 0100[
= 0200

SEGMENT

STACK 256 DUP (?) THISWORO

ow
EQU ENDS

0200

·

. .
CR 5 OUP (OAH) 'BARRY B. BREY' CR LF MES END 'was here! !' MES end

0000 0000 00 0001 0005[ 0006 42 42 59 0013 00 0014 OA 0015 24 0016 77 72 0020 24 0021

OATA_SEG

"""""""""""""""""""", i

·

Data segment

SEGMENT 08 08 08 08 08 08 D8 08

MESSAGE_l OA
]

41 52 52 59 20 2E 20 42 52 45

61 73 20 68 65 65 21 21

MESSAGE_2

OATA_SEG

ENDS i ;;;;;;;;

; ; i ; ; ; ; ; ; ; i ; ; ; ; ; ; ; ; ; -j ; i ; ; ; ;

0000 ASSUME ASSUME 0000 MAIN

COOE_SEG

"""""""""""""""""" i

·

Code segment

.

SEGMENT

CS:SEG,SS:STACK_SEG DS:DATA_SEG PRQC FAR

168 Pengantar Mikroprosesor

0000 BC 0200 R 0003 B8 ---T 0006 8E 08 0008 BA 0000 R 0006 8E 0018 R OOOE BA 0016 R 0011 E8 0018 R 0014 B4 4C 0016 CD 21 0018 0018 0018 B4 09 OOIA CD 21 OOIC C3 0010 0010

MAIN

MOV MOV MOV MOV MOV MOV
CALL

SP,OFFSET STACK_TOP AX,DATA_SEG DS,AX DX,OFFSET MESSAGE_l AX,DATA_SEG DX,OFFSET MESSAGE_2 DISPLAY AH,4CH 2lH ENDP

MOV INT MAIN DISPLAY PROC MOV INT RET DISPLAY CODE_SEG ENDS END MAIN ENDP

NEAR AH,NINE 21H

Setelah program, yang disebut name (NAME,ASM) di dalam contoh ini, dimasukkan ke dalam file disket dengan editor, dia kemudian akan dirakit dengan langkah berikut ini: 1. Ketikan MASM NAME; atau ASM NAME; (bergantung pada yang mana yang anda miliki) untuk merakit program itu. Ini menciptakan file barn bemama NAME.OBJ, yang tidak bisa dilakukan. Ketikan LINK NAME; untuk menghubungkan program ini dengan modul lainnyajika ada dan mengubahnya ke dalam file execute, NAME. EXE. Ketikan NAME untuk melaksanakan program ini. Apa yang akan anda lihat di layar setelah 5 line feeds adalah LIST DATA BARRY B. BREY was here!! Prosedur yang sarna akan merakit, menghubungkan dan melaksanakan setiap XXXXXXXX yang diedit. File program ASM yang anda buat dengan editor apapun

2. 3.

Instrukst Kontrol Program

169

akan anda miliki pada disposal anda. Editor berkisar dari sistem yang sederhana, seperti EDLIN, hingga prosesor kata yang rumit, seperti WORDSTAR uang digunakan di dalam mode operasi nondokumen. Setelah anda menggunakan prosesor kata untuk membuat dan mengedit program, anda tidak akan pemah lagi menggunakan sebuah editor seperti EDLIN. Prosesor kata jauh lebih mudah digunakan dan mereka memungkinkan informasi di dalam sebuah program dipindahkan dengan mudah. Program Equates. Bagian pertama dari program listing adalah yang disebut program equates. Bagian ini digunakan untuk menyamakan (equate) (EQU) label dengan berbagai nilai yang digunakan di dalam seluruh program. EQU ini menjelaskan instruksi yang digunakan di dalam program utama dan juga di dalam prosedur dan bagian definisi data dari program listing. Program equates bersifat opsional, namun mereka membuat program ini lebih bisa terbaca dan sebab itu lebih bisa terdokumentasi sendiri. Perhatikan betapa lebih bisa terbacanya MESSAGE_END daripada hanya '$' MESSAGE_END yang berarti sesuatu bagi para pembaca awam; '$' lebih berarti hanya bagi para pembaca yang telah akrab dengan komouter dan sistem operasi. Coba anda lihat pada Apendiks A, yang membahas mengenai DOS dengan lebih rinci. Stack Segmen. Bagian berikutnya dari program listing adalah stack segmen. Di sini stack area dibentuk untuk memungkinkan program menggunakan instruksi CALL dan return (RET) dan operasi stack lainnya (PUSH dan POP) yang mungkin perlu untuk operasi. Pernyataan pertama di dalam stack segmen adalah SEGMENT pseudo-operasi (pernyataan yang tidak menghasilkan kode mesin, namun menginstruksikan perakit atau penghubung/linker). SEGMENT pseudo-operasi mengidentifikasi dimulainya segmen untuk perakit dan menunjukkan bahwa sudah saatnya dimulai pada paragraph boundary (PARA), yang muncul pada setiap 16 bytes di seluruh memori 8086/8088. Pernyataan SEGMENT juga menunjukkan kepada linker bahwa segmen yang disebut STACK_SEG adalah PUBLIC- yaitu, dia bisa dikombinasikan dengan segmen lainnya dari nama yang sarna. Meskipun ini bukanlah ciri dari program ini, segmen memungkinkan program ini oleh masyarakat ditambahkan atau dihubungkan dengan segmen lainnya dengan nama yang sarna jika mereka digabungkan dengan program ini dengan program linker. Pernyataan berikutnya adalah DB 256 DUP (?), yang menentukan byte memori. Dalam contoh ini, 256 bytes memori telah disiapkan untuk stack segmen

170

Pengantar Mikroprosesor

dan stack dari semua nilai untuk pernyataan ini.? yang digunakan untuk pernyataan duplikat (DUP) menunjukkan bahwa perakit tidak boleh mengisi byte ini dengan data apapun; melainkan mereka tetap tidak berubah. Bila linker mengubah file ke EXE, dia secara otomatis membentuk stack segmen register (SS) untuk menunjuk pada segmen ini dan program ini menginisialisasi stack pointer (SP), yang selalu diinisialisasi pada lokasi area yang disiapkan untuk stack di dalam stack segmen. Nama STACK _SEG sering digunakan untuk menjelaskan stack segmen seperti yang digambarkan. Pernyataan terakhir di dalam stack segmen, end segmen (ENDS), mengidentifikasi akhir segmen. Ini hams digunakan untuk mengakhiri setiap segmen yang diidentifikasi di dalam sebuah program, dan dia hams memiliki label yang sarna seperti pernyataan SEGMENT selanjutnya yang digunakan untuk membuka segmen. Segmen Data. Segmen data di dalam contoh ini disebut DATA _ SEG, namun dia bisa disebut apa saja sesuka si programer. Seperti di dalam stack segmen, pernyataan pertama haruslah SEGMENT, dan pernyataan terakhir haruslah ENDS. Segmen data membentuk semua variabel segmen data yang digunakan dengan program. Dalam contoh ini, segmen data mengandung sejumlah pernyataan DB yang menyimpan string atau data ASCII di dalam segmen data. Program sampel ini tidak mengandung segmen tambahan. Jika dia mengandung se~men tam bahan, dia juga akan dimulai dengan pernyataan SEGMENT dan berakhir dengan ENDS. Programer juga bebas untuk memilih nama segmen tambahan. Segmen Kode. Segmen kode mengandung program tersebut. Pemilihan namanya bersifat opsional. Perhatikan bahwa segmen kode juga dimulai dengan pernyataan SEGMENT dan berakhir dengan pernyataan ENDS. Pernyataan kedua di dalam segmen kode ASSUME, memberitahu perakit bahwa nama yang telah anda pilih untuk segmen kode (CS) adalah CODE_SEG dan nama untuk segmen data (DS) adalah DATA_SEG. Diajuga memberitahu perakit (SS) adalah STACK_SEG. Jika program ini telah mencakup segmen . tambahan (ES), dia juga akan dinyatakan kepada perakit pada bagian ini dengan pernyataan ASSUME . . , Software riil yang pertama di dalam segmen kode adalah program utama prosedur, yang diidentifikasi sebagai prosedur jauh yang disebut MAIN. (Prosedur utama biasanya diidentifikasi sebagai prosedur jauh).

Instruksi Kontrol Program

171

Pernyataan pertama menginisialisasi pointer stack. Dua pern'yataan berikutnya membentuk register DS. (Register segmen yang hanya secara otomatis dimasukkan oleh DOS adalah CS dan SS). Di dalam contoh ini, register DS dimasukkan dengan DATA_SEG, awal dari segmen data. Jika segmen tambahan di dalam sebuah program, dia harus dimasukkan dengan cara yang sarna. Akhirnya, program riil muncul. Dua pesan disajikan oleh program ini: MESSAGE ONE dan MESSAGE TWO. Prosedur selanjutnya disebut DISPLAY _MESSAGE. Dia dibentuk sebagai prosedur dekat, dan di dalam contoh ini dia sangat pendek. Di sini PC-DOS fungsi 9 digunakan untuk menyajikan string karakter pada layar CRT. Fungsi yang terpadu disebut dengan instruksi INT 21H, dengan bilangan fungsi ditempatkan pada AH sebelum call. Dalam hal ini, fungsi terpadu 9 menyajikan string karakter yang ditangani oleh register DX. Jika anda kembali ke MAIN, anda akan tahu bahwa address pesan dimasukkan ke dalam DX sebelum panggilan ke prosedur ini terjadi. Pernyataan terakhir dari file ini adalah pernyataan END. Dia memberitahu perakit bahwa akhir dari file ini telah tiba, dan dia juga memberitahu linker di mana pernyataan pertama dari program ini berada.

Program Sampel Input/Output
Program sampel pertama ini (lihat Contoh 5-12) membuat IBM-PC tampak seperti mesin ketik. Ini adalah program yang sangat seder hana, namun dia menggambarkan bagaimana template pertama kali disajikan di dalam Contoh 5-11 digunakan, dengan sedikit modifikasi. Di sini bag ian equate hanya mengandung tiga pernyataan. Dalam p~ogram yang sangat besar, dia mungkin mengandung ratusan equates. Menarik sekalijika kita memperhatikan bahwa program ini tidak mengandung segmen data. Dalam hal ini, ini tidak diperlukan karena program tidak menyimpan data di dalam memori, atau juga dia tidak membaca data dari memori. Dia hanya melanjutkan membaca key dari keyboard hingga tanda dolar diketik, mengembalikan komputer ke DOS sehingga program lainnya bisa dilaksanakan. Program bahasa rakitan dasar yang digambarkan di sini memanggil subrutin key baca yang menggunakan salah satu fungsi PC-DOS terpadu-nomor 6, fungsi input keyboard, dan kembali dengan karakter yang diketik di dalam register AL. Diajuga menyajikan karakter apapun yang telah diketik.

172

Pengantar Mikroprosesor

iExample program that will accept data ;from the keyboard and display them on ;the monitor until a $ is typed.
r r r r r r r """"

"""""""""""""""",""," ;

·

.
.

·..

'

'"

'"

rrrrrrrrr

I'"

I"

,,,

0006 0024

SIX DOLLAR

"""""""",',11,""""",,,,"'"

·

EQU EQU

6 , $'

. .

,,"""""""""","""""""",,
0000 0000 0100( STACK_SEG ???? STACK_TOP 0200 STACK_SEG
iiiiiijiiiiiijjiiijiiiiijiiiijiiiijiijiii

·

Stack segment

SEGMENT

STACK

EQU ENDS

THIS WORD

Code segment

"""""'/""'1""""""""""'" ;
0000 0000 0000 BC 0200 R 0003 0003 E8 OOOE R 0006 3C 24 0008 75 F9 OOOA 84 4C OOOC CD 21 DaDE DaDE CONTOHS-12 MAIN READ KEY AGAIN:

•••••••••••••

G

••••••••••••••••••••••••••

CODE SEG SEGMENT ASsuME CS:CODE_SEG,SS:STACK_SEG MAIN PROC MOV FAR SP,OFFSET STACK_TOP

CALL CMP JNE MOV INT ENDP PROC

READ_KEY AL,DOLLAR SIGN AGAIN _ AH,4CH 21H

NEAR

Instruksi Kontrol Program

173

OOOE 0010 0012 0014 0016 0018 001B OOlB

B4 B2 CD 74 8A CD

06 FF 21 F8 DO 21 READ_KEY CODE_SEG END

MOV MOV INT MOV RET ENDP ENDS MAIN

JZ

AH,SIX DI,OFFH 21H READ_KEY DL,AL

Bila key telah diketik, program MAIN memanggil prosedur key read dab mengecek untuk melihat apakah ini adalah lambang dolar. Jika lambang dolar telah diketik, dia akan kembali ke DOS: jika tidak, dia akan membaca key lain dari keyboard.

Program Penambahan Dua Bilangan Sampel
Program sampel ini (lihat Contoh 5-13) menerima dua bilangan dari keyboard, menambahkannya, dan menyajikan hasilnya pada layar CRT. Ini program yang lebih kompleks daripada yang sebelumnya. Di dalam contoh ini, perhatikan bahwa baik ES maupun DS dianggap sebagai DATA_SEG dan keduanya juga dimasukkan dengan lokasi DATA_SEG. Ini dilakukan karen a operasi string digunakan di dalam program ini, dan kurang cocokjika kita menciptakan segmen terpisah untuk DS dan ES. Program itu sendiri menerima dia bilangan, hingga panjangnya 40 digit, dari keyboard. Bilangan pertama diterima hingga tanda plus (+) diketik: bilangan kedua diterima hingga tanda sarna dengan (=) diketik. Setelah tanda sarna dengan diketik, program menambahkan kedua bilangan itu dengan penambahan ASCII. Hasilnya ditempatkan dio buffer yang disebut ANSWER dan disajikan di monitor. Bentuk data yang dimasukkan ke dalam program itu adalah 23 + 33
=

56

Menciptakaan Modul Kepustakaan
Satu keuntungan utama dari komputer dengan disk drive, perakit dan linker adalah modul kepustakaan bisa di bentuk dan secara permanen disimpan di dalam

174 Pengantar Mikroprosesor

disket. Nantinya pada satu waktu, modul ini bisa digunakan untuk membentuk banyak bagian dalam sebuah program. Modul kepustakaan adalah cara yang paling tepat untuk menyimpan semua prosedur yang biasa dipakai. Contoh 5-14 menggambarkan modul kepustakaan dari sebuah prosedur yang menyajikan sebuah pesan di layar CRT. Prosedur ini menggunakan fungsi PCDOS nomor 9, yang menyajikan pesan yang ditangani oleh register DX. Pernyataan pertama, PUBLIC menunjukkan kepada linker bahwa modul ini bisa digunakan oleh modul yang lain sewaktu mereka dihubungkan. Sebab itu, prosedur ini bisa digunakan di masa mendatang oleh program lainnya setelah dia mengalami debugged dan disimpan di dalam disket. Juga perhatikan bahwa pernyataan LIB _SEG adalah PUBLIC dan juga disebut CODE. Bila prosedur ini
;; ;;;;;; i; i;;; iii i;;;;;;;;;;;; iii i;;;;;;;;;;;

; ;Example program that will add two numbe~s ithat are entered through the keyboard and ithen display the result on the CRT screen ; iThe maximum size of the number is 2 digits.;
; ; ; ; ; ; ; ; ; i ; ; ; i ; i ; i ; ; i ; ; ; ; ,; i ; ; ; ; ; ; ; i ; i ; ; ; ; ; ; i ; ;

0006 0009 0002 0000 OOOA 0024 0021 004E 0059 002B 0030 0030 0039

SIX NINE TWO CR LF EOM OOS_FUNC NO YES PLUS EQUAL ZERO ASCII NINE=ASCII
I , , , I , I I , ,

..........................................
I I I , , , , , , , , , , I , , , , I , , , , , I I , , , , ,

EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU

6 9 2 13 10 '$ , 21H 'N' 'Y' '+' '=' '0' '9 '

I

"""""""""""""""11""""'/ ;

..........................................
SEGMENT STACK 256 OUP (?)

Stack segment

0000 0000 0100[

STACK_SEG

ow

CONTOH5-13

Instruksi Kontrol Program

175

1???

=

0200

STACK_TOP STACK_SEG
i;;;i;i;ii;;;;;;;;;;;;;;;;;;;;;;ii;;;;;;;

EQU ENDS

THISWORO

0200

Data segment
;;;;;;;;;;;;;;;;;;;; i i;;;

i;;;;;;

i;;;

il;;;

;

0000 0000 00 OA 0003 41 64 6F 20 65 72 2F 4E OOlB 24 OOlC 00 OA 0020 0002[ 0022 0002[ 0024 OA 64 6E 73 29 20 75 20 3F

OATA_SEG SIGN ON 74 i7 60 62 28 59 20 00

SEGMENT DB DB CR,LF,LF 'Add two numbers(Y/N)?'

,a

DB OA 24 NEXT MES DB DB NUMBI ?? ?? NUMB 2 OATA_SEG
"", """'"

EOM CR,LF,LF,EOM 2 DUP (?) 2 DUP (? )

DB ENDS

......................................... I"" "" "" '"
"" rrrrrrr

.........................................
"""""""""""""""1"""""
0000 CODE_SEG SEGMENT ASSUME CS:CODE SEG,SS:STACK SEG ASSUME OS:DATA:SEG _ 0000 0000 0003 0006 0008 OOOA OOOA BA 0000 R 0000 E8 00A4 R 0010 0010 E8 OOBO R 00A9 OOAB OOAD OOAF OOBO OOBO 8A DO B4 06 CO 21 C3 OUT_CHAR READ_KEY ENDP PROC NEAR AGAIN:
CALL READ_KEY

Code segment

MAIN BC 0200 R B8 R· 8E 08 8E CO TOP:

PROC MOV MOV MOV MOV

FAR SP,OFFSET STACK TOP AX,DATA_SEG DS,AX ES,AX

MOV CALL

DX,OFFSET DISP_MES

SIGN_ON

MOV MOV INT RET

DL,AL AH,SIX DOS_FUNC

176

Pengantar Mikroprosesor

OOBO 00B2 00B4 00B6 00B8 00B9 00B9

B4 B2 CD 74 C3

06 FF 21 F8 READ_KEY CODE_SEG

MOV MOV INT JZ RET ENDP ENDS END NEXT1 :

AH,SIX DL,OFFH DOS FUNC READ_KEY

MAIN

0077 0077 0078 007B 0070 007F 0081 0081 B4 4C 0083 CD 21 0085 0085 0085 B5 02 0087 0087 E8 OOBO R 008A 2C 30 008C 8C 8C 72 F9 008E 3C 39 0090 7-7 F5 0092 88 05 0094 04 30 009A FE CD 09C 75 E9 009E 8A C3 OOAO E8 00A9 R 00A3 C3 00A4 00A4 00A4 B4 09 00A6 CD 21 00A8 C3 00A9 00A9 0013 24 OF 0015 3C 4E 0017 74 68 DISP MES ENDP OUT_CHAR PROC READ_NUMB DISP_MES PROC MAIN READ _ Nm.fB 58 E8 FE 75 EB 00A9 R C9 F8 89 l-f.AIN_END: MOV INT ENDP PROC MOV READ_NUMB1 : CALL SUB JB CMP JA MOV ADD DEC JNE MOV CALL RET ENDP NEAR MOV INT RET NEAR AND CMF JE AL,ODFH AL,NO MAIN_END AH,NINE DOS_FUNC READ KEY AL, ZERO_ASC I! READ NUMB1 AL ,NINE ASC I! READ NUMB1 [DIj-;AL AL, ZERO_ASCI! CH READ_NUMB 1 AL,BL OUT_CHAR NEAR CH,TWO AH,4CH DOS_FUNC POP CALL DEC JNE JMP
AX

OUT_CHAR CL NEXT1 TOP

Instruksi Kontrol Program

177

0019 3C 59 001B 75 F3 0010 E8 00A9 R 0020 BA 001C R 0023 E8 OOM R 0026 32 CO 028 A2 0020 R 002B A2 0021 R 002E A2 0022 R 0031 A2 0023 R 0034 B3 2B 0036 BF 0200 R 0039 E8 0085 R 003C 003E 0041 0044 0046 0048 004B 004F 0050 0052 0054 0055 0059 005B 0050 0050 0060 0064 0066 0067 0069 006B 006C 006E 0070 0072 0074 0075 AO 02 02 27 8A OC 50 8A 3C 72 BO 50 FE 0020 R 06 0022 R C3 08 30 C3 OA 05 31 C1 B3 BF E8 B1 B3 AO 02 27 8A OC 50 8A 3C B3 30 0022 R 0085 R 02 00 ·0021 R 06 0023 R F8 30 C7 OA 01 NEXT:

CMP

JNE CALL MOV CALL XOR MOV MOV MOV MOV MOV MOV CALL MOV MOV CALL MOV MOV MOV ADD OAA MOV OR PUSH AX MOV
CMP

AL,YES AGAIN OUT_CHAR OX,OFFSET OISP_MES AL,AL NUMB1,AL NUMB1+1,AL NUMB2,AL NUMB 2+1 "AL BI,PLUS OI,OFFSET READ_NUMB CL,2 BL,O READ NUMB CL,2 BL,O AL,NUMB1+1 AL,NUMB2+1 BH,AL AL,ZERO_ASCII AL,BH AL,10 BL,l N1Jlof..B1 NEXT_MES

.

MOV

MOV ADD ADO OAA MOV OR PUSH MOV CMP JB MOV AL,' PUSH AX INC

AL,NUMB1 AL,NUMB2 AL,BL BL,AL AL, ZERO_ASCII
AX

AL,BL AL,10 NEXT1 l' CL

178 Pengantar Mikroprosesor

dihubungkan, dia hanya akan memasukkan segmen PUBLIC yang disebut CODE. Juga perhatian bahwa pern~ataan END tidak memiliki label awal seperti yang dimiliki program.

""""""""""""""""""", ;

.

.

....................................... """"""""",,""",,,"""""
= 0009

;Library Module ;DISPLAY message addressed

by DX

NINE • LIB_SEG

PUBLIC EQU SEGMENT

DISPLAY
9

0000

ASSUME CS:LIB_SEG 0000 0000 0001 0002 0003 0004 0005 0006 0008 OOOA OOOB OOOC OOOD OOOE OOOF 0010 0011 0011 53 51 52 55 56 57 B4 09 CD 21 5E 5D SA 59 5B CB DISPLAY LIB_SEG ENDP ENDS DISPLAY PROC PUSH PUSH PUSH PUSH PUSH PUSH MOV INT POP POP POP POP POP POP RET FAR BX CX DX BP SI DI AH,NINE 21H DI SI BP DX CX BX

SF

END

CONTOH 5-14

Instruksi Kontrol Program

179

Program Modul Kepustakaan SampeL Modul kepustakaan (prosedur DISPLAY~MESSAGE) yang diciptakan dan disimpan di dalam disket di dalam Contoh 5-14 digunakan oleh program pendek dalam Contoh 5-15. Contoh ini memperkenalkan sebuah pernyataan baru, EXTRN, atau eksternal.

i

"""""""""""",,,"""","""",,

..............................................

iuses

iPROGRAM to display HELLO on the CRT DISPLAY

,,,"""""""""""""""",,,,""",
= =

..............................................
EQU EQU SEGMENT MESSAGE DB ENDS SEGMENT CS:CODE_SEG,DS:DATA_SEG DB EOM DB 'HELLO' 0
' $'

0024 0000

EOM ZERO DATA_SEG

0000

0000 48 45 4C 4C 4F 0005 24 0006 0000 DATA_SEG CODE_SEG ASSUME

EXTRNDISPLAY:FAR 0000 0000 B8 --- R 0003 8E 08 0005 BA 0000 R 0008 9A 0000 0000 B4 4C 0011 0011 PROGRAM CODE_SEG E PROGRAM PROC MOV MOV MOV INT ENDP ENDS END PROGRAM FAR AX,OATA_SEG DS,AX
CALL

OX,OFFSET MESSAGE DISPLAY 21H

CONTOH5-15

180 Pengantar Mikroprosesor

Pernyataan EXTRN menyatakan prosedur eksternal - prosedur yang ditemukan di dalam file kepustakaan. Dia muncul di dalam segmen yang disebut LIB _ SEG, yang memiliki nama yang sarna seperti yang ada di dalam segmen kepustakaan. Bila linker menggabungkan modul, kode dari modul kepustakaan dengan DISPLAY_MESSAGE akan dimasukkan, Dia kemudian akan dipindahkan ke dalam segmen yang disebut CODE-SEG karena keduanya adalah PUBLIC dan keduanya diberi tanda 'CODE.'

Linkage.

Bagi modul kepustakaan untuk dihubungkan dengan modul program, keduanya harus menerima nama-nama dari editor. Misalkan anda telah menciptakan modul kepustakaan itu yang mengandung DISPLA Y_MESSAGE dan menamakannya LIBRARY.ASM. Dia dirakit dengan MASM LIBRARY: untuk mengubahnya menjadi sebuah file obyek bernama LIBRARY.OBJ. Selanjutnya, program ini disimpan di dalam disket dengan editor dan disebut PROGRAM. ASM. Setelah MASM PROGRAM: diketik, file program diubah menjadi sebuah file obyek, PROGRAM.OBJ. Baris berikut ini akan menghubungkan file obyek ini menjadi satu file utama: LINK PROGRAM + $LIBRARY; Kalimat ini menghasilkan sebuah file execute yang disebut PROGRAM.EXE. Untuk menjalankannya, ketiklah PROGRAM dan kata hello akan muncul pada display. Anda bisa menghubungkan sebanyak mungkin file kepustakaan sesuka anda pada file program.

5-6

RINGKASAN
1. Ada tiga tipe instruksi jump takbersyarat: pendek, dekat dan panjang. Jump pendek memungkinkan adanya cabang antara + 127 hingga -128 byte, jump dekat memungkinkan untuk di mana saja di dalam segmen (intrasegmen), dan jump jauh dimungkinkan pada di mana saja di dalam memori (intersegmen). 2. Label dekat berakhir dengan titik dua (LABEL:). Tidak ada titik dua setelah labeljauh (LABEL). 3. Displacement yang mengiktuijump pendek adalahjarak dari instruksi selanjutnya ke lokasi jump.

Instruksi Kontrol Program

181

4. Jump tidak langsung tersedia dalam dua bentuk: (1) jump ke lokasi yang disimpan di dalam register (hanya intrasegmen), dan (2) jump ke lokasi yang disimpan di dalam kata memori atau kata ganda (intrasegmen atau intersegmen). 5. Jump bersyarat semuanya adalahjump pendek yang menguji satu atau lebih bit flag: C, Z, 0, P dan S. Jika syaratlkondisinya benar, terjadijump, danjika syaratlkondisinya salah, instruksi urutan berikutnya dilaksanakan. 6. Instruksi jump bersyarat khusus (LOOP) akan mengurangi (dekrementasi) register CX dan jump ke label bila CX bukan O. Bentuk lain loop mencakup LOOPE, LOOPNE, LOOPZ, dan LOOPNZ. LOOPE adalah loop sewaktu flag menunjukkan kondisi yang sarna dan register CX bukanlah O. 7. Subrutin atau prosedur adalah kelompok instruksi yang melakukan satu tugas dan digunakan dari bagian mana saja di dalam program. Instruksi CALL digunakan untuk menghubungkan dengan subrutin dan instruksi return (RET) digunakan untuk kembali dari subrutin. Dalam bahasa rakitan, nama prosedur dinyatakan dengan pseudo-opcode PROC, dan akhir dari prosedur dinyatakan dengan pseudo-opcode ENDP. 8. Instruksi CALL, yang memanggil subrutin, pada dasarnya adalah suatu kombinasi dari dua instruksi: PUSH dan JMP. CALL mendorong address dari instruksi selanjutnya - adrress return - ke dalam stack dan kemudian jump ke subrutin. CALL dekat menempatkan IP pada stack, dan CALL jauh menempatkan baik IP maupun CS pada stack. 9. Instruksi return (RET) digunakan untuk kembali ke subrutin. Dia melakukannya dengan menarik kernbali return address dari stack dan menempatkannya kembali ke IP (RET dekat) atau IP dan CS (RET jauh). RET juga bisa memodifikasi pointer stack dengan menambahkan bilangan 16-bit bertanda padanya. Prosedur ini sering digunakan untuk menghapus data stack sebelum kembali ke program calling. 10. Interupt bisa merupakan instruksi software yang mirip dengan CALL maupun sinyal hardware yang digunakan untuk memanggil subrutin. Proses ini menginterupsi program yang sedang dilaksanakan bila sebuah sinyal hardware meminta perhatian. 11. Vektor interupt adalah area memori 4-byte yang mengandung address (IP dan CS) dari subrutin servis interupt. 8086/8088 memiliki 256 vektor interupt semacam itu di mana 32 di antaranya dicadangkan untuk fungsi terpadu atau masa depan dan sisanya masih bisa dipakai oleh si pemakai.

182

Pengantar Mikroprosesor

12. Bila sebuah interupt mulai berfungsi, mikroprosesor mendorong register flag ke dalam stack, mendorong return address (lP dan CS) ke dalam stack, membebaskan T dan I, dan menjemput vektor interupt sehingga dia bisa melompat ke subrutin servis interupt. 13. Instruksi interupt software (INT), yang sering digunakan untuk menggantikan panggilan sistem, panjangnya 2 byte, sedangkan instruksi CALL yang digantikannya panjangnya 5 byte. Sebab itu interup software menghemat 3 byte ruang memori. 14. Instruksi return khusus (lRET) harus diginakan untuk kembali dari interupt yang bertujuan untuk memindahkan isi register flag dari stack sebelum return address. 15. Interupt pada overflow (INTO) adalah interupt bersyarat yang memanggil subrutin servis interuptjika flag overflow (0) telah siap dan tidak melakukan apa-apajika dia dibebaskan. 16. Instruksi flag interupt yang bebas (CLI) dan flag interupt set (STI) digunakan, secara berurutan, untuk melumpuhkan dan menggerakan pin INTR pada 8086/8088. Pin INTR adalah satu dari dua inout interupt hardware pada mikroprosesor. Input lainnya, non-maskable interupt (NMI), tidak dipengaruhi oleh CLI atau STI. 17. Flag carry (C) dibebaskan, di-set dan dilengkapi dengan instruksi CLC, STC, dan CMC. 18. Instruksi wait menguji kondisi pin TEST. Jika instruksi WAIT ditemukan di dalam sebah program, dan TEST adalah logika 1, 8086/8088 menunggu TEST untuk menjadi logika o. 19. LOCK dan ESC digunakan terutama dengan coprosesor eksternal. 20. File execute (EXE) dibuat dengan linker setelah perakit telah menghasilkan sebuah file obyek (OJB). Setelah file EXE dibuat, si pemakai bisa melaksanakannya dengan mengetik nama file. 21. Bila membuat program bahasa rakitan 8086/8088 kita perlu membagi program itu menjadi bagian yang terpisah: equates, stack segmen, data segmen, dan code segmen. Jika segmen tambahan dibutuhkan, dia juga dimasukkan, seperti halnya data tam bahan, kode dan segmen tambahan lainnya. 22. Pseudo-opcode SEGMENT menjelaskan awal dari sebuah segmen dan pseudo-opcode ENDS menunjukkan akhirnya. 23. Pseudo-opcode ASSUME memberitahu perakit nama segmen apa yang telah dipilih untuk setiap segmen kecuali segmen stack.

Instruksi Kontrol Program

183

24. Modul kepustakaan adalah bagian yang sangat penting dari pengembangan program bahasa rakitan karena prosedur yang biasanya digunakan tersimpan di dalam kepustakaan pada disket. Si pemakai bisa CALL (memanggil) salah satu subrutin ini dengan menghubungkan program tersebut dan menyatakan ekstemal nama prosedur (EXTRN). 25. Pemyataan pertama dari file kepustakaan adalah pesudo-opcode PUBLIC. PUBLIC memberitahu penghubung bahwa sebuah prosedur atau prosedur yang terdapat di dalam kepustakaan bisa dihubungkan ke program lainnya.

5-7

PERTANYAAN DAN SOAL
1. Apa itu JMP pendek? 2. Tipe JMP apa yang digunakan bila melompat ke mana saja di dalam segmen? . 3. Instruksijump yang mana yang memungkinkan program melanjutkan pelaksanaannya pada lokasi memori mana saja di dalam memori sistem? 4. Instruksi jump apa yang panjangnya 5 byte? 5. Jelaskan label berikut ini apakah dekat ataujauh: a. WELL WATER b. SEND DATA c. OUTPUT d. SEND STRING e. SANTA CLAUS f. WINTER SPRING 6. Jump dekat memodifikasi program address dengan mengubah register mana? 7. Jump jauh memodifikasi program address dengan mengubah register mana? 8. Jelaskan apa yang akan diperoleh oleh instruksi JMP AX. Juga indentifikasi apakah dia dekat atau jauh dan tunjukkan register mana yang berubah. 9. Bandingkan operasi JMP DI dan JMP[DI). 10. Sebutkan lima bit flag yang diuji oleh instruksi jump bersyarat. 11. Semua jump bersyarat adalah jump. 12. Jelaskan kapan instruksi JA melompat. 13. Jelaskan kapan instruksi JO tidak akan melompat. 14. Instruksijump bersyarat mana saja yang menguji flag bit Z dan C? 15. Kapan instruksi JCXZ akan melompat?

184

Pengantar Mikroprosesor

16. LOOP akan selalu mengurangi dan mengujinya untuk 0 untuk menentukan apakah jump terjadi. 17. Jelaskan bagaimana instruksi LOOPE berfungsi. 18. Buatlah sebuah urutan lnstruksi pendek yang akan menyimpan OOH ke dalam 150H bytes memori yang dimulai pada lokasi memori segmen tambahanDATA. 19. Buatlah urutan instruksi yang menguji bilangan di dalam register CX untuk menentukan apakah nilainya yang takbertanda di atas 0400H. Jika nilai itu di atas 0400H, maka melompat ke label NEXT; jika tidak, lanjutkan dengan instruksi urutan berikutnya. 20. Apa itu prosedur? 21. Jelaskan bagaimana fungsi instruksi CALL jauh? 22. Bagaimana instruksi RET dekat berfungsi? 23. Semua prosedur harus berakhir dengan opcode apa? 24. Semua prosedur harus berakhir dengan pseudo-opcode apa? 25. Semua prosedur harus dirnulai dengan pesudo-opcode apa? 26. Bagaimana sebuah prosedur disebut dekat atau jauh? 27. Jelaskan apa yang diperoleh oleh instruksi RET 6. 28. Tuliskan sebuah prosedur yang menghitung nilai register CX. Prosedur ini mungkin tidak akan mempengaruhi register lainnya atau bit flag lainnya. 29. Tulislah sebuah prosedur yang mengalikan DI dengan SI dan kernudian rnernbagi hasilnya dengan 100H. Pastikan bahwa hasilnya ditinggalkan di AX setelah kern bali dari prosedur, dan juga pastikan bahwa tidak satupun register atau flag lainnya berubah. 30. Apa itu interupt? 3 1. Instruksi software apa yang digunakan untuk rnernanggil subrutin servis interupt? 32. Berapa banyak vektor interupt yang ada pada 8086/8088? 33. Apa tujuan dari vektor interupt O? 34. Jelaskan isi dari vektor interupt, pastikan untuk rnengidentifikasi rnasing-rnasing byte. 35. Jelaskan apa yang dilakukan instruksi INT 40H, pastikan untuk rnenunjukkan lokasi mernori dari vektor. 36. Bagaimana instruksi IRET dibedakan dari RET? 37. INTO akan menginterupsi bila dalarn kondisi rnacarn bagairnana? 38. Instruksi apa yang digunakan untuk rnengontrol pin INTR?

Instruksi Kontrol Program

185

39. 40. 41. 42. 43. 44. 45. 46. 47. 48.

49. 50. 51. 52. 53. 54.

Instruksi apa yang digunakan untuk mengecek pin TEST? Apa itu file EXE? Apa itu file OBJ? Apa yang ditunjukkan oleh akronim DOS? Jelaskan langkah yang dibutuhkan untuk mengubah sebuah file bahasa rakitan menjadi file execute. Mengapa equate digunakan di dalam program bahasa rakitan? Apa tujuan dari pseudo-opcode SEGMENT? Apa arti dari pesudo-opcode PUBLIC? Bagaimana akhir dari segmen yang ditunjukkan di dalam bahasa rakitan? Jika segmen kode diberi label PROGRAM, segmen data diberi label DATA, dan segmen tambahan diberi label DATA_OLD, buatlah sebuah pernyataan ASSUME untuk memberitahu perakit nama-nama dari segmen ini. Bagaimana return address untuk DOS dibuat di dalam segmen kode? Apa itu modul kepustakaan? Apa yang mengubah sebuah file menjadi modul kepustakaan? Bagaimana prosedur kepustakaan dijelaskan dalam sebuah program? Peranan apa yang dimainkan oleh penghubung (linker) dalam menggunakan modul kepustakaan? Jika sebuah program dinamakan MINE dan dua kepustakaan (LIB 1 dan LIB 2) digunakan dengannya, buatlah pernyataan linker yang benar untuk menggabungkan mereka.

Sign up to vote on this title
UsefulNot useful