Bab5-Instruksi Kontrol Program

Embed Size (px)

Citation preview

  • 5/9/2018 Bab5-Instruksi Kontrol Program

    1/41

    BAB 5Instruksi ~ontrolProgram

    PENDAHULUANSebuah komputer tidak akan banyak gunanya tanpa instruksi program kontrolyang menuntunnya melalui operasinya. Tanpa instruksi ini, sebuah komputerperlu dibimbing selangkah demi selangkah melalui sebuah program. Denganinstruksi ini, dia secara otomatis akan bergerak dari satu urutan dari sebuahprogram 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 pem-rograman yang relevan.

    TUJUANSetelah menyelesaikan bab ini, anda akan mampu:I. Menggunakan instruksi jump tak bersyarat untuk mengontrol arus sebuah

    program.2. Menggunakan instruksi call dan return untuk mencakup prosedur di dalam

    struktur program.3. Menjelaskan operasi instruksi kontrol interrupt dan interrupt.4. Memprogram dengan instruksi kontrol mesin untuk memodifikasi beberapa

    bit flag.5. Memahami bagaimana fungsi program di dalam mikroprosesor 8086/8088.

    145

  • 5/9/2018 Bab5-Instruksi Kontrol Program

    2/41

    146 Pengantar Mikroprosesor

    5-1 KELOMPOK JUMPTipe utama instruksi kontrol program, jump (JMP), memungkinkan programeruntuk melompati bagian sebuah program ke bagian lainnya memori. Instruksi jumpbersyarat memungkinkan programer untuk membuat keputusan berdasarkan tesnumerik dengan menggunakan syarat yang ditunjukkan oleh bit flag 8086/8088.Di dalam bagian teks ini, kita membahas semua instruksi jump dan menggam-

    barkan penggunaannya dengan program sampel. Kita juga membahas kembaliinstruksi LOOP, yang mula-mula disajikan dalam Bab 3, dan instruksi LOOPbersayarat.Jump Tak Bersayarat (JMP)Tige tipe instruksi jump tak bersyarat (mengacu pada Gambar 5-1) tersedia didalam 8086/8088, yaitu: jump pendek, jump dekat, dan jump jauh. Jump dekatadalah instruksi 2-byte yang memungkinkan jump atau branches ke lokasimemori di dalam +127 dan -128 bytes dari lokasi memori yang mengikuti jump.Jump dekat 3-byte memungkinkan jump atau branch ke semua lokasi memoripada segmen kode yang sekarang. Dan akhirnya, jump jauh 5-byte memungkin-kan jump pada semua lokasi memori di dalam mikroprosesor. Jump pendek dandekat sering disebut jump intrasegmen dan jump jauh sering disebut jump in-tersegmen.JUMP Pendek. Jump pendek disebut jump relatif karena mereka bisa dipin-dahlan ke mana saja di dalam memori tanpa perubahan. Ini disebabkan sebuahaddress tidak disimpan dengan opcode; melainkan displacement atau jarak disim-pan. Displacement jump pendek atau jarak adalah bilangan bertanda I-byte yangnilainya bisa berkisar antara +127 dan -128. Fungsi ini dengan jelas digambarkandi dalam Gambar 5-2. Jika 8086/8088 melaksanakan jump pendek, displacementditambahkan pada nilai di dalam pointer instruksi (IP) untuk menghasilkan se-buah address baru. Address baru ini adalah jump address, di mana pelaksanaanprogram berlanjut setelah jump. Contoh 5-1 menunjukkan bagaimana jump pen-dek bisa digunakan untuk bergerak dari satu bagian memori ke bagian memorilainnya. Dia juga menjelaskan penggunaan label dekat (Iihat bawah) denganinstruksi jump.Di dalam programming bahasa rakitan, label digunakan di dalam address me-

    mori absolut. Ada dua cara untuk menjelaskan sebuah label di dalam 8086/8088:

  • 5/9/2018 Bab5-Instruksi Kontrol Program

    3/41

    lnstruksi Kontrol Program 147

    0000 S8 00010003 03 C30005 E9 0200 RSTART: MOV AX,lADD AX,BX

    JMP NEXTNEXT: MOV BX,AXJMP START0200 8S 080202 E9 0000 R

    CONTOH5-1

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

    1MP SHORTLABEL* I OPCODE DISP(a) (EBH)

    JMP LABEL' OPCODE IP low IP high(E9H)(b)

    1MP LABEL OPCODE IP low IP high CS low

    (e)

    *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).

  • 5/9/2018 Bab5-Instruksi Kontrol Program

    4/41

    148 Pengantar Mikroprosesor

    Memory

    C S = I 0 0 0 HIP = 0002HNew IP = IP + 04New IP = 00061'1

    l OOOD1000C1000BI 0 0 0 A1000910008100071000610005100041 0 0 0 3100021 0 0 0 11 0 0 0 0

    ~

    (Jump to here)

    04lMP

    ~

    }ShortJump

    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 dariinstruksi 3-byte ini digerakkan ke dalam register IP bilajump dilakukan. Gambar5-3 menggambarkan operasi instruksijump dekat.Instruksi ini juga bisa direlokasi karena lokasi yang relatif dari instruksi ini didalam segmen kode tetap sarna meskipun lokasi segmen kode berubah. Namun,

    segmen kode keseluruhan harus direlokasi, bukan hanya instruksi jump di dalam-nya. Jump pendek, sebaliknya, bisa direlokasi ke mana saja di dalam segmenkode.JMP Jauh, Jump jauh (Iihat Gambar 5-4) digunakan untuk mendapatkan se-buah 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. Tidakseperti jump pendek dan jump dekat, jump jauh digunakan dengan label yangtidak memiliki titik dua.

  • 5/9/2018 Bab5-Instruksi Kontrol Program

    5/41

    lnstruksi Kontrol Program 149

    JUMP dengan Operand Register. Instruksi jump juga bisa digunakan untukmenjelaskan register 16-bit sebagai operand. Ini secara otomatis membentukinstruksi sebagai sebuah jump dekat tidak langsung. Address jump berada didalam register yang dijelaskan oleh instruksi jump. lsi dari register yang dijelas-kan digerakkan ke dalam IP sehinggajump intrasegmen muncul pada lokasi yangditangani oleh register. Tipe jump ini sangat berguna bila mengacu sebuah tabeljump. JMP NEAR PTR AX mungkin juga bisa digunakan untuk menjelaskanjump tidak langsung yang dekat.

    Contoh 5-2 menggambarkan tabel jump dan urutan yang digunakan untukmengakses sebuah entry di dalam tabel. Misalkan bahwa bilangan di dalam BXberasal dari sebuah bentuk software yang dikendalikan oleh menu. Operator me-ngetik bilangan 2 pada keyboard, dan software yang digunakan untuk membacakey ini mengubahnya menjadi biner dan menempatkannya di dalam BX. Contoh5-2 mengambil bilangan 2, yang diketik di dalam contoh ini, dan mendekremen-tasi (menguranginya). Selanjutnya 1 ditambahkan dua kali pada address memoriTABLE, yang dimasukkan ke dalam register SI. Setelah penambahan, SI menya-makan address memori TABEL +2. Beriktunya, instruksi MOY AX,[SI] menarik

    Memory

    1201112010

    es 1200F1000 1200E( 1 2 0 0 0ld lP 1200e200B 1200B

    1200ANewlP 120092000 12008

    ~

    (Jump to here)

    2000JMP

    ---._/~ ~"---'I NearJump

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

  • 5/9/2018 Bab5-Instruksi Kontrol Program

    6/41

    150 Pengantar Mikroprosesor

    Memory

    A3128OldCS A3127 (Jump to here)A31260800Old IP 080070005 0800608005

    NewCS 08004 A3A300 08003 00

    08002 01 FarjumpNew IP 08001 270127 08000 JMP

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

    address yang tersimpan di dalam TABEL +2 ke dalam AX (address TWO didalam contoh ini). Bila instruksi JMP AX dilaksanakan, address di dalam AX(TWO) ditransfer ke dalam IP. Contoh ini menyebabkan program berlanjut me-laksanakan software pada address memori TWO seperti seolah-olah programmengandung JMP TWO. Jika 1 diketik, maka urutan instruksi yang sarna akanmelompat ke lokasi memori ONE untuk melanjutkan software.0205 BE 0600 R MOV SI/OFFSET TABLE0208 4B DEC BX0209 03 F3 ADD SI/BX020B 03 F3 ADD SI/BX0200 8B 04 MOC AX/[SI]020F FF EO JMP AX0600 1000 TABLE: OW ONE0602 2000 OW TWO0604 3000 OW THREE

    CONTOH5-2

  • 5/9/2018 Bab5-Instruksi Kontrol Program

    7/41

    fnstruksi Kontrol Program 151

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

    0 6 0 6 FF 2 E 0 7 CA.R JMP ADDRl0 6 0 A BF 0 7 C8 R0 6 0 0 FF 2 5 MO' I /JMP DI ,OFFS ET AD DR 2[DI]CONTOHS-3

    Jump BersyaratJump bersyarat adalah jump pendek, yaitu, jangkauan jump selalu di dalam +127hingga -128 bytes dari address instruksi berikutnya. Semua instruksi jump bersya-rat didaftar pada Tabel 5-1 bersama-sama dengan syarat yang diujikan pada ma-sing-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 beri-kutnya dilaksanakan.

    Sebagian besar jump bersayarat sangat langsung dan menguji hanya satu bitflag, namun beberapa di antaranya lebih rum it. Yang lebih rumit itu digunakanuntuk perbandingan magnitude. JA, JAE, JE, JNE, JB dan KBE mengecek mag-nitude relatif dari bilangan takbertanda. JG, JGE, JE, JNE, JL dan KLE menge-cek 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 instruksimemiliki alternatif, namun bukan berarti semuanya memiliki alternatif opcode,kecuali JE/JZ dan JNE/JNZ. Misalnya, JA/LBE berarti jump ke atas/jump kebawah atau sarna. Tidak banyak maknanyajika kita katakanjump ke bawah atau

  • 5/9/2018 Bab5-Instruksi Kontrol Program

    8/41

    152 Pengantar Mikroprosesor

    Instruction Condition Tested CommentJA C = 0 and Z ~ 0 Jump aboveJAE C=O Jump above or equal toJB C = 1 Jump belowJBE C = 1 or Z = 1 Jump below or equal toJC C = 1 Jump carry setJE or JZ Z = 1 Jump equal to or jump 0JG Z=OandS=O Jump greater thanJGE s=O Jump greater than or equal toJL S~O Jump less thanJLE Z = 1 or S ~ 0 Jump less than or equal toJNC C=O Jump carry clearedJNE or JNZ Z=O Jump not equal to or jump not 0JNO 0=0 Jump no overflowJNS 8=0 Jump no signJNP P=O Jump no parityJO 0=1 Jump on overflowJP P = 1 Jump on parityJS 8 = 1 Jump on signJCXZ ex = 0 Jump if register CX is 0

    TABEL 5-1 Instruksi jump bersyarat

    sarna bilajump ke atas lebihjelas. JBE adalah suatu alternatifdari JAyangjarangdigunakan. Begitu juga, sebagian besar jump bersyarat memiliki alternatif yangjarang digunakan, Tes ini untuk atau syarat yang sarna dan bukan-O atau syaratbukan-sama,Instruksi jump bersyarat yang paling radikal adalah instruksi JeXZ, yangmenguji 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 dilaksana-kan.

  • 5/9/2018 Bab5-Instruksi Kontrol Program

    9/41

    Instrukst Kontrol Program 153

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

    iscan a table of 1 0 0 bytes for a OAHiibyte 1 0 0 = OOH to indicate the end of the table

    0 6 0F BF 0 6 0 0 R0 6 1 2 B9 0 0 6 40 6 1 5 BO OA0 6 1 7 FC0 6 1 8 F2 / AE0 6 1A E3 0 0

    SCAN: MOV DI,OFFSET TABLE ;address tableMOV CX,lOO iload counterMOV AL,OAH iload ALCLDREPNE SCASB iscan for OAHJCXZ NOT_FOUND

    CONTOHS-4

    LOOPInstruksi LOOP adalah kombinasi dari jump bersyarat dan instruksi dekremenCX. Dia akan mengurangi isi register CX dan, jika CX bukan 0, jump ke labelyang berkaitan dengan LOOP. Jika CX menjadi 0, maka instruksi urutan berikut-nya 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 menggu-nakan instruksi LOOP untuk mengontrol bilangan yang ditambahkan. Perhatikanbagaimana LODSW dan STOSW digunakan di dalam contoh ini. Juga perhatikanbahwa prefiks override segmen (SEG ES:) memilih segmen tambahan untukinstruksi ADD. Ini dilakukan karen a register DI menunjuk pada data di dalamsegmen tambahan untuk operasi string.LOOP Bersyarat. Seperti halnya REP, instruksi LOOP juga memiliki beberapabentuk bersyarat: LOOPE dan LOOPNE. LOOPE (LOOP sewaktu sarna) akanmelompat ke address yang ditunjukkan oleh label jika CX bukan 0 dan syarat

  • 5/9/2018 Bab5-Instruksi Kontrol Program

    10/41

    154 Pengantar Mikroprosesor

    ;adds the words in BLO~Kl to BLOCK206lC B9 0064061F BE 03C8 R0622 BF 05C8 R

    MOV CX,lOOMOV SI,OFFSET BLOCKlMOV DI,OFFSET BLOCK20625 AGAIN:0625 AD0626 26: 03 050629 AS062A E2 F9

    LODSWADD AX,ES:[DI]STOSWLOOP AGAIN

    CONTOH5-5

    yang sarna muncuI. Dia akan mengeluarkan loop jika ex menjadi 0 ataujika sya-rat tak sarna ditunjukkan oleh bit flag. Instruksi LOOPNE (LOOP sewaktu tidaksarna) berfungsi dengan cara sebaliknya. LOOPNE tetap di dalam loop selarnaex bukan 0 dan sementara syarat yang tidak sarna muncuI. LOOPNE mengeluar-kan loop bila ex menjadi 0 atau jika syarat yang sarna muncuI. Keduanya adalahLOOP sewaktu instruksi: LOOPE adalah loop sewaktu sarna, dan LOOPNE ada-lah loop sewaktu tidak sarna.Seperti halnya kondisional berulang, instruksi loop bersyarat memiliki alterna-

    tif: LOOPZ sarna dengan LOOPE, dan LOOPNZ sarna dengan LOOPNE. Alter-natif ini bisa digunakan sewaktu-waktu, narnun ini penting bagi dokumentasiuntuk menggunakan opcode yang cocok dengan aplikasi tertentu.

    5-2 SUBRUTINSubrutin adalah bagian yang sangat penting dari semua arsitektur software kom-puter. Ini adalah sekelompok instruksi yang biasanya melakukan satu tugas ter-tentu dan ini penting karena dia sering sekali digunakan oleh sebuah programnamun hanya membutuhkan sekali penyimpanan di dalam memori. Dia menyim-pan ruang memori dan juga membuat tugas pemrograman jauh lebih sederhanakaren a dia membutuhkan waktu lebih sedikit untuk mengkode program yangberisi subrutin. Kerugian satu-satunya dari subrutin ini adalah bahwa dia membu-

  • 5/9/2018 Bab5-Instruksi Kontrol Program

    11/41

    Instruksi Kontrol Program 155

    tuhkan waktu komputer sedikit lebih banyak untuk menghubungkan dengan sub-rutin (CALL) dan kembali (return) dari sana (RET). Stack digunakan untuk me-nyimpan address return sehingga subrutin bisa kembali ke program pada poinsetelah 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 diaakan berada di level bahasa yang lebih tinggi seperti Pascal. Contoh 5-6 menun-jukkan bagaimana prosedur dekat (intrasegmen) dan jauh (intersegmen) dijelas-kan untuk perakit. . .062 NAME PROC FAR062C 8B C3 MOV AX,BX062E 03 C1 ADD AX,CX0630 CB RET0631 NAME ENDP0631 LABEL PROC NEAR0631 F7 E3 MOL BX0633 F7 E1 MOL CX0635 F7 E2 MO L OX0637 C3 RET0638 LABEL ENDP

    CONTOH5-6

    Perhatikan dari contoh di atas bahwa dua pseudo-ope ode yang baru muncul didalam listing: PROC dan ENDP. PROC digunakan untuk menunjukkan dimu-lainya prosedur (subrutin), nama prosedur, dan tipe instruksi CALL dan RETyang digunakan oleh perakit. Nama subrutin bisa berlaku untuk nama bahasarakitan manapun. Tipe bisa dekat atau jauh, bergantung pada apakah programermengharapkan prosedur itu ditempatkan di dalam segmen kode atau agak jauhdarinya. Dua prosedur telah digambarkan di sini: satu tipe yang dekat dan yanglainnya tipe yang jauh. Pseudo-opcode yang kedua yang baru, ENDP, memberi-tahu perakit bahwa dia telah mencapai akhir prosedur dan juga nama prosedur.

  • 5/9/2018 Bab5-Instruksi Kontrol Program

    12/41

    156 Pengantar Mikroprosesor

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

    ,CALLInstruksi CALL mentransfer arus program pada prosedur. CALLs berbeda de-nganjump karena mereka menyimpan isi IP di dalam stackjika CALL dekat atauIP dan CS pada stackjikajauh.CALL Dekat. Instruksi CALL dekat panjangnya 3 bytes dan byte kedua danketiganya berisi lokasi offset dari prosedur dekat. Sebab itu, CALL menyim-pan IP pada stack dan melompat ke prosedur. Namun mengapa dia menyimpanregister IP? IP berisi address dari instruksi urutan berikutnya di dalam memori- yaitu yang mengikuti CALL. Bila IP didorong ke dalam stack, stack berisiaddress return - address dari instruksi berikutnya. Gambar 5-5 menunjukkanaddress return yang sedang disimpan di dalam stack dan juga jump pada pro-sedur.CALL Jauh. Instruksi CALL yang jauh seperti halnya jump jauh karena diamemungkinkan CALL pada setiap lokasi di dalam memori. CALL jauh adalahinstruksi 5-byte di mana byte 2 dan 3 berisi IP dari prosedur dan byte 4 dan 5berisi nilai segmen kode yang baru (CS) untuk prosedur. Selain melompat keprosedur, instruksi CALL jauh mendorong baik register IP dan CS ke dalamstack. Karena register IP dan CS berisi address dari instruksi berikutnya yangakan dilaksanakan, address return didorong ke dalam stack. Proses ini digambar-kan pada Gambar 5-6CALL dengan Operand Register. Seperti halnya jump tipe ini, CALL bisa jugamemiliki operand register, yang memungkinkan CALL tidak langsung. TipeCALL ini digunakan sarna persis dengan call register JMP. Register yang dijelas-kan di dalam CALL tidak langsung berisi address offset 16-bit dari subrutin. Pen-

  • 5/9/2018 Bab5-Instruksi Kontrol Program

    13/41

    Instruksi Kontrol Program 157

    MemoryOld SPFFFF AFFFF } SlackAFFFEOld SS AFFFDx o o oOld IP 110040003 ] 11003

    11002 (Subroutine here)11001

    New SP 11000FFFD

    New SS 10004AOOO 10003

    10002 1010001 02 NearNewlP call

    I O O ~ 10000 Call

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

    0000 BE 0005 R MOV SI,OFFSET COMPUTE0003 FF 06 CALL SI0005 COMPUTE PROC NEAR0005 52 PUSH OX0006 8B DO MOV OX,AX0008 E5 33 IN AX,DATAOOOA E7 AA OUT PORT,AXOOOC 8B C2 MOV AX,OXOOOE SA POP OXOOOF C3 RET0010 COMPUTE ENDP

    CONTOH5-7

  • 5/9/2018 Bab5-Instruksi Kontrol Program

    14/41

    158 Pengantar Mikroprosesor

    FFFF

    Memory

    AFFFFAFFFEAFFFD

    1100611005 RET N ear RET1100411003110021100111000

    1000..1100021000110000

    Old SPFFFD

    Old SSAOOOOld IP1006

    N ew SP

    000..1

    N ew SSAOOON ew IP

    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 CALLintrasegmen karen a register ini berisi hanya address offset 16-bit.Contoh 5-7 menggambarkan penggunaan instruksi register CALL untuk me-

    manggil subrutin yang dimulai pada address offset COMPUTE.CALL dengan Addressing Memori Tidak Langsung. CALL dengan addres-sing memori tidak langsung sangat berguna bila pernyataan GOTO (bahasa BA-SIC) yang dihitung dibutuhkan di dalam program bahasa rakitan. Call memoritidak langsung bisa tipe dekat ataujauh, bergantung pada bagaimana data memoriditata 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 bilangan1,2, atau 3. Bilangan ini dimodifikasi pada 0, 2, atau 4 dan ditambahkan pada SI,yang menghasilkan address tabel lookup. Tabel lookup (TABLE) berisi addressprosedur yang benar ONE, TWO dan THREE.

  • 5/9/2018 Bab5-Instruksi Kontrol Program

    15/41

    lnstruksi Kontrol Program 159

    ;lookup table in data segment0 76 4 0 0 0 8 R TABLE DW ONE0 7 6 6 0 0 1 8 R DW TWO0 76 8 0 0 2 8 R DW THREE

    ;callinq sequence for computer CALLito a near subroutine;assumes that Dl is a number between one and three

    0 0 0 0 4 F DEe Dl0 0 0 1 BB 07 6 4 R MOV BX,OFFSET TABLE0 0 0 4 0 3 FF ADD Dl,D!0 0 0 6 FF 11 CALL [BX+DI]00 0 8 ONE PROe NEAR0 0 0 8 ONE ENDP0 0 1 8 TWO PROe NEAR0 01 8 TWO ENDP.0 0 2 8 THREE PROe NEAR0 0 2 8 THREE ENDP

    CONTOH5-8

    RETInstruksi return (RET) memindahkan baik bilangan 16-bit (return dekat) daristack dan menempatkannya di dalam IP maupun bilangan 13-bit (return jauh) danmenempatkannya di dalam IP dan CS. Instruksi return dekat dan jauh keduanyadijelaskan di dalam pernyataan PROC prosedur dan secara otomatis dipilih olehperakit.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

  • 5/9/2018 Bab5-Instruksi Kontrol Program

    16/41

    160 Pengantar Mikroprosesor

    langsung mengikuti CALL ke prosedur yang paling bam. Gambar 5-7 menggam-barkan bagaimana CALL berhubungan dengan prosedur dan bagaimana RETkembali dari sebuah prosedur,Ada satu.lagi bentuk instruksi return. Bentuk ini memungkinkan sebuah bi-

    langan ditambahkan pada isi pointer stack (SP) sebelum return. Jika dorongan(pushes) itu hams dihilangkan sebelum return, displacement 16-bit ditambahkanpada SP sebelum RET menarik address return dari stack dan kembali.Contoh 5-9 menunjukkan bagaimana tipe return ini menghilangkan (mengha-

    pus) data yang ditempatkan di stack dengan beberapa dorongan. RET 4 di dalamcontoh ini menambahkan 4 pada SP sebelum memindahkan IP dari stack. KarenaPUSH AX dan PUSH BX bersama-sama menempatkan 4 byte data pada stack,return ini secara efektif menghilangkan data AX dan BX dari stack. Contoh inidigunakan hanya pada kasus khusus dan ini bukan tipe normal return.

    IItCALL STEPMOV AX.CX~IOV CX.DXCALL STEPMOV DX. BXIIt

    I STEP:---""'I~ _.,.,..- _ -- - _ -- ----- ADDBX,DXMOVDX,CXRETGAMBAR 5-7 Program pendek dan Subrutin yang menggambarkan kaitan antara program dansubrutin dengan instruksi CALL dan RET.

    0 0 0 0 TEST_RIG PROC NEAR0 0 0 0 5 0 PUSH AX0 0 0 1 5 3 PUSH ax0 0 0 2 C2 0 0 0 4 RET 40 0 0 TEST_RIG END P

    CONTOH5-9

  • 5/9/2018 Bab5-Instruksi Kontrol Program

    17/41

    Instruksi Kontrol Program 161

    5-3 INTERRUPTSInterrupt bisa merupakan panggilan (call) subrutin yang dihasilkan dari software(diturunkan secara ekstemal) ataupun panggilan subrutin yang dihasilkan darisoftware (diturunkan secara internal). Dia akan menginterupsi program yangsedang berlangsung dengan memanggil subrutin servis interupt.Interupt hardware dipelajari dalam Bab 9. Bagian ini berkaitan dengan in-

    terupt software, yang merupakan tipe khusus instruksi CALL di dalam mikropro-sesor 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 InteruptVektor interupt adalah bilangan 4-byte yang disimpan di dalam 1024 byte memoripertama (0000H-003FFH). Ada 256 vektor interupt semacam itu, yang sebagiandigunakan untuk hardware dan sebagian untuk software. Setiap vektor mengan-dung address subrutin servis interupt-subrutin yang dipanggil oleh interupt. Vek-tor ini dan fungsinya yang tercatat di dalam Tabel 5-2 bersama-sama denganmasing-masing lokasi memorinya. Setiap lokasi vektor di dalam tabel itu pan-jangnya 4 byte dan mengandung address subrutin servis interupt. 2 byte pertamadari vektor itu mengandung bilangan yang dimasukkan ke dalam register CS (CSrendah diikuti dengan CS tinggi) sebagai respon atas suatu interupt.

    Instruksi Interupt8086/8088 memiliki tiga interuksi interupt yang berbeda yang tersedia bagi paraprogramer: INT, INTO dan INT 3. Masing-masing instruksi ini mengambil vek-tor dari tabel veltor interupt dan kemudian memanggil subrutin pada lokasi yangditahgani oleh entry vektor. Selain memanggil subrutin, instruksi ini juga mendo-rong flag ke dalam stack.INT. Terdapat 256 instruksi interupt software yang berbeda yang tersedia bagiprogramer. Setiap instruksi INT memiliki operand numerik yang jangkauan ni-lainya berkisar antara 0 hingga 225 (OOH-FFH). Misalnya, INT 100 akan meng-gunakan vektor interupt 100. Masing-masing instruksi ini panjangnya 2 byte,kecuali untuk INT3, yang merupakan instruksi interupt software khusus l-byte,

  • 5/9/2018 Bab5-Instruksi Kontrol Program

    18/41

    162 Pengantar Mikroprosesor

    Bila instruksi interupt software dilaksanakan, (1) dia akan mendorong flag kedalam 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 dalamstack, (6) mengambil lokasi IP yang baru dari tabel vektor, dan (7) melompat kelokasi yang baru ini. Sebab itu INT mirip sekali dengan CALL jauh kecualibahwa dia tidak hanya mendorong baik CS maupun IP ke dalam stack namun jugamendorong kopi register flag ke dalam stack. Sebenarnya, dia bisa disebut seba-gai 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 Iadalah logika 1, pin INTR akan hidup atau mampu. Tujuan dari flag T akan diba-has 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 menggu-nakan sistem dan kontrol seperti printer, CRT, dan display. CALL jauh, yangbiasanya digunakan untuk fungsi ini, panjangnya 5 byte, dan instruksi INT pan-jangnya hanya 2 byte. INT, yang digunakan untuk menggantikan CALL jauh,sebab itu akan menyimpan 3 bytes memori setiap kali subrutin dipanggil. Ini bisamenambahkan 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 olehinstruksi INT. Ini akan dijelaskan lebih jauh di dalam Bab 9.

    Number Address Function0 OH-3H Divide error1 4H-7H Single step2 8H-BH NMI (hardware interrupt)3 CH-FH Breakpoint4 10H-13H Interrupt on overflow5 -31 14H-7FH Reserved for future use"32-25 5 80H-3FFH User interrupts"These interrupts are used on some of the newer versions of the808618088 such as the 80186/80188,80286, and 80386.

    TABEL 5-2 Peta vektor interupt

  • 5/9/2018 Bab5-Instruksi Kontrol Program

    19/41

    Instruksi Kontrol Program 163

    IRET. Instruksi return interupt (IRET) digunakan hanya dengan interupt soft-ware atau hardware. Tidak seperti instruksi return sederhana, lRET akan (I)mem-pop data stack kembali ke dalam IP, (2) mem-pop data stack kembali kedalam CS, dan (3) mem-pop data stack kembali ke dalam flag. Pembahasan yanglebih mendalam mengungkapkan bahwa instruksi IRET pada dasarnya sebuahkombinasi 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 (merekaselalu dilumpuhkan selama subrutin servis interupt), mereka secara otomatisdimungkinkan kembali oleh instruksi IRET.INT 3. Instruksi INT 3 bertindak seperti interupt software lainnya kecuali diapanjangnya hanya I byte, sementara instruksi interupt software lainnya panjang-nya 2 byte. Bilangan vektor 3 (lihat Tabel 5-2) bahkan diberikan nama khusus,breakpoint interupt, karena sangat mudah bagi para programer untuk menyi-sipkan 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, terpisahdari software pada bagian ini. Jika software pada INT 3 subrutin servis interuptmenyajikan semua register dan waits, ini akan sang-atmudah untuk menggunakaninterupt ini untuk men-debug program yang salah.INTO. Interupt pada overflow (INTO) adalah instruksi interupt bersyarat. Jikaflag overflow (0) telah siap dan instruksi INTO ditemukan di dalam sebuah pro-gram, subrutin yang addressnya disimpan pada vektor 4 akan dipanggil. Sebalik-nya,jika 0 bit dibebaskan dan instruksi INTO ditemukan, tidak ada interupt yangakan dipanggil. Instruksi ini mirip dengan instruksi JO kecuali bahwa dia akanmenginterupt bukan jump pada overflow.Instruksi INTO digunakan secara luas setelah aritmetika bertanda untuk men-

    deteksi kondisi error overflow. Di dalam tipe program ini, INTO muncul setelahmasing-masing penambahan dan pengurangan.

    INT50Misalkan bahwa, dalam sistem tertentu, kita sering perlu menambahkan isi dariSI, DI, BP dan BX dan menyimpan hasilnya di dalam AX. Karena ini tugas yang

  • 5/9/2018 Bab5-Instruksi Kontrol Program

    20/41

    164 Pengantar Mikroprosesor

    ;i nterr upt ser vice subro utin e0 0 0 0 0 3 C30 0 0 2 0 3 C60 0 0 4 0 3 C70 0 0 6 0 3 C50 0 0 8 CF

    ADOM: ADOADOADOADOIRET

    AX,BXAX,SIAX,OIAX,BP

    CONTOH5-10

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

    Kontrol InteruptMeskipun bagian ini tidak membahas mengenai interupt hardware, kali ini kitaperlu memperkenalkan dua instruksi yang digunakan untuk mengontrol strukturinterupt hardware: set interupt flag (STI) dan clear interupt flag (CLI). Instruksiini digunakan untuk mengatur (set) dan membebaskan (clear) flag bit I.Karenaitu, bila flag I dibebaskan pin INTR lumpuh, dan bila flag I diatur INTR akanmampu, STI akan memungkinkan interupt dan CLI akan melumpuhkannya.

    5-4 KONTROL MESIN DAN BERBAGAI MACAM INSTRUKSIKategori instruksi terakhir yang ada pada kumpulan instruksi 8086/8088 adalahkontrol mesin dan beragam kelompok. Instruksi ini menyediakan kontrol carrybit, sampel pin TEST, dan melakukan berbagai fungsi lainnya. Karena sebagianbesar instruksi ini digunakan di dalam kontrol hardware, mereka perlu disebutkandi sini. Kita membahas masalah ini dengan sangat rinei di dalam bab yang mem-bahas mengenai aplikasi hardware bentuk ini.

  • 5/9/2018 Bab5-Instruksi Kontrol Program

    21/41

    Instruksi Kontrol Program 165

    Mengontrol Carry Flag Bit (C)Carry flag digunakan selama penambahan dan pengurangan multipel-kata danmenunjukkan kondisi error di dalam subrutin. Ada tiga instruksi yang memung-kinkan programer untuk memilih kondisi dari bit carry flag (C): set carry (STC),clear carry (CLC), dan komplemen carry (CMC).WAITInstruksi WAIT menguji TEST pin hardware, yang digunakan untuk mengujiberbagai kejadian hardware eksternal. Jika pin TEST adalah logika 1, 8086/8088akan diam dan menunggu pin TEST menjadi logika O . (perhatikan bahwa sebuahinterupt juga akan mengeluarkan kondisi diam atau tunggu). TEST sering diguna-kan dengan coprosesor 8087 untuk menguji pin output BUSY dari sirkuit itu. Kitamembahas instruksi ini dengan lebih rinei di dalam hardware.HLTInstruksi berhenti (HLT) menghentikan pelaksanaan software. Hanya ada duacara untuk mengeluarkan halt: dengan interupt atau dengan mereset sistem hard-ware. Instruksi ini biasanya digunakan hanya pada kasus tertentu.NapBila mikroprosesor bertemu dengan NOP, dia membutuhkan tiga periode clokinguntuk berjalan. Namun, NOP tidak melakukan operasi apapun. Mengapa NOPdigunakan di dalam software? NOP menemukan aplikasi di dalam software delay.Di dalam program bahasa mesin, para programer sebaiknya membiarkan areapatch setiap 50 byte atau sejumlah itu kalau program membutuhkan modifikasipada masa mendatang. Area patch ini biasanya berisi instruksi NOP sehinggaoperasi program tidak akan terpengaruh oleh area patch ini.LOCK PrefixLOCK Prefix adalah sebuah byte yang ditempatkan di sebelum instruksi 8086/8088untuk mendiami coprosesor eksternal di dalam sistem untuk memperoleh akseske dalam sistem buses. Rincian lebih jauh mengenai LOCK ini akan diberikankemudian, di dalam bab mengenai coprosesor.

  • 5/9/2018 Bab5-Instruksi Kontrol Program

    22/41

    166 Pengantar Mikroprosesor

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

    5-5 PROGRAM SAM PELBagian ini menyajikan beberapa program sampel yang menggambarkan bagai-mana menata sebuah program untuk digunakan dengan makroperakit (MASM)atau perakit (ASM). Bagian ini juga menjelaskan beberapa teknik programingyang umum yang berguna dalam berbagai aplikasi.Membuat Program untuk EXE FileFile execute (EXE) sebenarnya sebuah perintah DOS (sistem operasi disk) yangbaru. 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-PCsebagai file execute, karena ini untuk mesin yang lain. Setiap segmen hams dije-laskan dan banyak rincian lainnya yang kecil yang harus diatasi atau perakit tidakakan menerima program itu. Contoh 5-11 menunjukkan sebuah template yangdigunakan untuk sebagian besar program bahasa rakitan bila program itu dansemua subrutin muncul bersamaan.

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

    CONTOH 5-11

  • 5/9/2018 Bab5-Instruksi Kontrol Program

    23/41

    Instruksi Kontrol Program 167

    = 0024= 0000OOOA0009

    M!S_ENDCRLFNINE EQUEQUEQUEQU ,$'13109 ." " " " " " " " " " " " " " " , , 1 " " " "Stack segment ." " " " " " " " " , , 1 1 1 ' , " " " " " " " "

    00000000 0100[????

    iSTAC~_SEG SEGMENT STACKo w 256 DUP (?)

    = 02000200

    STACK_TOPSTACK_SEG

    EQU THISWOROENDS ." " " " " " " " " " " " " " " " " " " " ,

    Data segment ." " " " " " " " " " " " " " " " " " " " ,i0000 OATA_SEG SEGMENT0000 00 MESSAGE_l 08 CR0001 0005[ 08 5 OUP (OAH)OA

    ]0006 42 41 52 52 59 20 08 'BARRY B. BREY'42 2E 20 42 52 45590013 00 08 CR0014 OA 08 LF0015 24 08 MES END0016 77 61 73 20 68 65 MESSAGE_2 D8 'was here! !'72 65 21 210020 24 08 MES end

    0021 OATA_SEG ENDS; ; i ; ; ; ; ; ; ; i ; ; ; ; ; ; ; ; ; -j ; i ; ; ; ; i ; ; ; ; ; ; ; ;

    Code segment ." " " " " " " " " " " " " " " " " "0000 iCOOE_SEG SEGMENT

    ASSUMEASSUME CS:SEG,SS:STACK_SEGDS:DATA_SEG0000 MAIN PRQC FAR

  • 5/9/2018 Bab5-Instruksi Kontrol Program

    24/41

    168 Pengantar Mikroprosesor

    0 0 0 0 BC 0 2 0 0 R MAIN MOV SP,OFFSET STACK_TOP0 0 0 3 B8 ---T MOV AX,DATA_SEG0 0 0 6 8 E 0 8 MOV DS,AX0 0 0 8 BA 0 0 0 0 R MOV DX,OFFSET MESSAGE_l0 0 0 6 8 E 0 0 1 8 R MOV AX,DATA_SEGOOOE BA 0 0 1 6 R MOV DX,OFFSET MESSAGE_20 0 1 1 E8 0 0 1 8 R CALL DISPLAY0 0 1 4 B4 4 C MOV AH,4CH0 0 1 6 CD 2 1 INT 2 lH0 0 1 8 MAIN ENDP0 0 1 8 DISPLAY PROC NEAR0 0 1 8 B4 0 9 MOV AH,NINEOOIA CD 2 1 INT 2 1 HOOIC C3 RET0 0 1 0 DISPLAY ENDP0 0 1 0 CODE_SEG ENDS

    END MAINSetelah program, yang disebut name (NAME,ASM) di dalam contoh ini,

    dimasukkan ke dalam file disket dengan editor, dia kemudian akan dirakit denganlangkah berikut ini:

    1. Ketikan MASM NAME; atau ASM NAME; (bergantung pada yang manayang anda miliki) untuk merakit program itu. Ini menciptakan file barnbemama NAME.OBJ, yang tidak bisa dilakukan.

    2. Ketikan LINK NAME; untuk menghubungkan program ini dengan modullainnyajika ada dan mengubahnya ke dalam file execute, NAME. EXE.

    3. Ketikan NAME untuk melaksanakan program ini. Apa yang akan anda lihatdi layar setelah 5 line feeds adalah LIST DATA

    BARRY B. BREYwas here!!

    Prosedur yang sarna akan merakit, menghubungkan dan melaksanakan setiapXXXXXXXX yang diedit. File program ASM yang anda buat dengan editor apapun

  • 5/9/2018 Bab5-Instruksi Kontrol Program

    25/41

    Instrukst Kontrol Program 169

    akan anda miliki pada disposal anda. Editor berkisar dari sistem yang sederhana, sepertiEDLIN, hingga prosesor kata yang rumit, seperti WORDSTAR uang digunakan didalam mode operasi nondokumen. Setelah anda menggunakan prosesor kata untukmembuat dan mengedit program, anda tidak akan pemah lagi menggunakan sebuaheditor seperti EDLIN. Prosesor kata jauh lebih mudah digunakan dan mereka me-mungkinkan informasi di dalam sebuah program dipindahkan dengan mudah.Program Equates. Bagian pertama dari program listing adalah yang disebut pro-gram equates. Bagian ini digunakan untuk menyamakan (equate) (EQU) labeldengan berbagai nilai yang digunakan di dalam seluruh program. EQU ini menje-laskan instruksi yang digunakan di dalam program utama dan juga di dalamprosedur dan bagian definisi data dari program listing. Program equates bersifatopsional, namun mereka membuat program ini lebih bisa terbaca dan sebab itulebih bisa terdokumentasi sendiri. Perhatikan betapa lebih bisa terbacanya MES-SAGE_END daripada hanya '$' MESSAGE_END yang berarti sesuatu bagi parapembaca awam; '$' lebih berarti hanya bagi para pembaca yang telah akrabdengan komouter dan sistem operasi. Coba anda lihat pada Apendiks A, yangmembahas mengenai DOS dengan lebih rinci.Stack Segmen. Bagian berikutnya dari program listing adalah stack segmen. Disini stack area dibentuk untuk memungkinkan program menggunakan instruksiCALL dan return (RET) dan operasi stack lainnya (PUSH dan POP) yang mung-kin perlu untuk operasi.Pernyataan pertama di dalam stack segmen adalah SEGMENT pseudo-operasi

    (pernyataan yang tidak menghasilkan kode mesin, namun menginstruksikan pera-kit atau penghubung/linker). SEGMENT pseudo-operasi mengidentifikasi dimu-lainya segmen untuk perakit dan menunjukkan bahwa sudah saatnya dimulai padaparagraph boundary (PARA), yang muncul pada setiap 16 bytes di seluruh memori8086/8088.Pernyataan SEGMENT juga menunjukkan kepada linker bahwa segmen yang

    disebut STACK_SEG adalah PUBLIC- yaitu, dia bisa dikombinasikan dengansegmen lainnya dari nama yang sarna. Meskipun ini bukanlah ciri dari programini, segmen memungkinkan program ini oleh masyarakat ditambahkan atau dihu-bungkan dengan segmen lainnya dengan nama yang sarna jika mereka digabung-kan dengan program ini dengan program linker.Pernyataan berikutnya adalah DB 256 DUP (?), yang menentukan byte me-mori. Dalam contoh ini, 256 bytes memori telah disiapkan untuk stack segmen

  • 5/9/2018 Bab5-Instruksi Kontrol Program

    26/41

    170 Pengantar Mikroprosesor

    dan stack dari semua nilai untuk pernyataan ini.? yang digunakan untuk pernya-taan duplikat (DUP) menunjukkan bahwa perakit tidak boleh mengisi byte inidengan data apapun; melainkan mereka tetap tidak berubah.Bila linker mengubah file ke EXE, dia secara otomatis membentuk stack seg-

    men register (SS) untuk menunjuk pada segmen ini dan program ini menginisiali-sasi stack pointer (SP), yang selalu diinisialisasi pada lokasi area yang disiapkanuntuk stack di dalam stack segmen. Nama STACK _SEG sering digunakan untukmenjelaskan stack segmen seperti yang digambarkan.Pernyataan terakhir di dalam stack segmen, end segmen (ENDS), mengidenti-fikasi akhir segmen. Ini hams digunakan untuk mengakhiri setiap segmen yang

    diidentifikasi di dalam sebuah program, dan dia hams memiliki label yang sarnaseperti pernyataan SEGMENT selanjutnya yang digunakan untuk membuka seg-men.Segmen Data. Segmen data di dalam contoh ini disebut DATA_SEG, namun diabisa disebut apa saja sesuka si programer. Seperti di dalam stack segmen, pernya-taan pertama haruslah SEGMENT, dan pernyataan terakhir haruslah ENDS.

    Segmen data membentuk semua variabel segmen data yang digunakan denganprogram. Dalam contoh ini, segmen data mengandung sejumlah pernyataan DByang menyimpan string atau data ASCII di dalam segmen data.Program sampel ini tidak mengandung segmen tambahan. Jika dia mengan-

    dung se~men tam bahan, dia juga akan dimulai dengan pernyataan SEGMENTdan berakhir dengan ENDS. Programer juga bebas untuk memilih nama segmentambahan.Segmen Kode. Segmen kode mengandung program tersebut. Pemilihan nama-nya bersifat opsional. Perhatikan bahwa segmen kode juga dimulai dengan per-nyataan 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_SEGdan nama untuk segmen data (DS) adalah DATA_SEG. Diajuga memberitahuperakit (SS) adalah STACK_SEG. Jika program ini telah mencakup segmen. tambahan (ES), dia juga akan dinyatakan kepada perakit pada bagian ini denganpernyataan ASSUME .. , Software riil yang pertama di dalam segmen kode adalah program utama pro-sedur, yang diidentifikasi sebagai prosedur jauh yang disebut MAIN. (Prosedurutama biasanya diidentifikasi sebagai prosedur jauh).

  • 5/9/2018 Bab5-Instruksi Kontrol Program

    27/41

    Instruksi Kontrol Program 171

    Pernyataan pertama menginisialisasi pointer stack. Dua pern'yataan berikutnyamembentuk register DS. (Register segmen yang hanya secara otomatis dimasuk-kan oleh DOS adalah CS dan SS). Di dalam contoh ini, register DS dimasukkandengan DATA_SEG, awal dari segmen data. Jika segmen tambahan di dalam se-buah program, dia harus dimasukkan dengan cara yang sarna.Akhirnya, program riil muncul. Dua pesan disajikan oleh program ini: MES-

    SAGE 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 padalayar CRT. Fungsi yang terpadu disebut dengan instruksi INT 21H, denganbilangan fungsi ditempatkan pada AH sebelum call. Dalam hal ini, fungsi terpadu9 menyajikan string karakter yang ditangani oleh register DX. Jika anda kembalike MAIN, anda akan tahu bahwa address pesan dimasukkan ke dalam DXsebelum 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 dimana pernyataan pertama dari program ini berada.

    Program Sampel Input/OutputProgram sampel pertama ini (lihat Contoh 5-12) membuat IBM-PC tampakseperti mesin ketik. Ini adalah program yang sangat seder hana, namun dia meng-gambarkan bagaimana template pertama kali disajikan di dalam Contoh 5-11digunakan, 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 menyim-pan data di dalam memori, atau juga dia tidak membaca data dari memori. Diahanya melanjutkan membaca key dari keyboard hingga tanda dolar diketik, me-ngembalikan 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, fungsiinput keyboard, dan kembali dengan karakter yang diketik di dalam register AL.Diajuga menyajikan karakter apapun yang telah diketik.

  • 5/9/2018 Bab5-Instruksi Kontrol Program

    28/41

    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 """" '" '" r r r r r r r r r I ' " I " , , ,

    00060024 SIXDOLLAR EQUEQU 6,$'

    Stack segment ." " " " " " " " , ' , 1 1 , " " " " " , , , , " ' " ., , " " " " " " " " " " , " " " " " " " " , ,

    00000000 0100( ????STACK_SEG SEGMENT STACK

    0200STACK_TOPSTACK_SEG

    EQUENDS

    THIS WORD

    iiiiiijiiiiiijjiiijiiiiijiiiijiiiijiijiiiCode segment

    G " " " " " ' / " " ' 1 " " " " " " " " " " ' ";CODE SEG SEGMENTASsuME CS:CODE_SEG,SS:STACK_SEG000000000000 BC 0200 R00030003 E8 OOOE R0006 3C 240008 7 5 F9OOOA 84 4COOOC CD 21DaDEDaDE

    CONTOHS-12

    MAIN PROCMOV SP,OFFSET STACK_TOP

    FAR

    AGAIN:CALLCMPJNEMOVINT

    MAIN ENDPREAD KEY PROC

    READ_KEYAL,DOLLAR SIGNAGAIN _AH,4CH21H

    NEAR

  • 5/9/2018 Bab5-Instruksi Kontrol Program

    29/41

    Instruksi Kontrol Program 173

    OOOE B4 06 MOV AH,SIX0010 B2 FF MOV DI,OFFH0012 CD 21 INT 21H0014 74 F8 JZ READ_KEY0016 8A DO MOV DL,AL0018 CD 21 RET001B READ_KEY ENDPOOlB CODE_SEG ENDS

    END MAIN

    Bila key telah diketik, program MAIN memanggil prosedur key read dabmengecek untuk melihat apakah ini adalah lambang dolar. Jika lambang dolartelah diketik, dia akan kembali ke DOS: jika tidak, dia akan membaca key laindari keyboard.Program Penambahan Dua Bilangan SampelProgram sampel ini (lihat Contoh 5-13) menerima dua bilangan dari keyboard,menambahkannya, dan menyajikan hasilnya pada layar CRT. Ini program yanglebih 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. Inidilakukan karen a operasi string digunakan di dalam program ini, dan kurangcocokjika 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: bilangankedua diterima hingga tanda sarna dengan (=) diketik. Setelah tanda sarna dengandiketik, program menambahkan kedua bilangan itu dengan penambahan ASCII.Hasilnya ditempatkan dio buffer yang disebut ANSWER dan disajikan di moni-tor. Bentuk data yang dimasukkan ke dalam program itu adalah

    23 + 33 = 56

    Menciptakaan Modul KepustakaanSatu keuntungan utama dari komputer dengan disk drive, perakit dan linkeradalah modul kepustakaan bisa di bentuk dan secara permanen disimpan di dalam

  • 5/9/2018 Bab5-Instruksi Kontrol Program

    30/41

    174 Pengantar Mikroprosesor

    disket. Nantinya pada satu waktu, modul ini bisa digunakan untuk membentukbanyak bagian dalam sebuah program. Modul kepustakaan adalah cara yangpaling 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 PC-DOS 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 diamengalami debugged dan disimpan di dalam disket. Juga perhatikan bahwapernyataan LIB _SEG adalah PUBLIC dan juga disebut CODE. Bila prosedur ini

    ;; ;;;;;; i; i;;; iii i;;;;;;;;;;;; iii i;;;;;;;;;;;;;Example program that will add two numbe~sithat are entered through the keyboard andithen 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 ;

    0006000900020000OOOA00240021004E0059002B003000300039

    ;SIX EQU 6NINE EQU 9TWO EQU 2CR EQU 13LF EQU 10EOM EQU '$ ,OOS_FUNC EQU 21HNO EQU 'N'YES EQU 'Y'PLUS EQU '+'EQUAL EQU '='ZERO ASCII EQU '0'NINE=ASCII EQU '9'.........................................., , , I , I I , , I I I , , , , , , , , , , I , , , , I , , , , , I I , , , , , IStack segment.........................................." " " " " " " " " " " " " " " 1 1 " " " " ' /

    00000000 0100[

    ;STACK_SEG SEGMENT STACKo w 256 OUP (?)

    CONTOH5-13

  • 5/9/2018 Bab5-Instruksi Kontrol Program

    31/41

    Instruksi Kontrol Program 175

    = 02000200

    00000000 00 OA OA0003 41 64 64

    6F 20 6E65 72 732F 4E 29OOlB 24OOlC 00 OA OA0020 0002[ ??0022 0002[ ??0024

    0000

    00000000 BC 0200 R0003 B8 R0006 8E 080008 8E COOOOAOOOA BA 0000 R0000 E8 00A4 R00100010 E8 OOBO R00A9 8A DOOOAB B4 06OOAD CO 21OOAF C3OOBOOOBO

    1???STACK_TOPSTACK_SEG

    THISWOROQUENDS

    i;;;i;i;ii;;;;;;;;;;;;;;;;;;;;;;ii;;;;;;;Data segment;;;;;;;;;;;;;;;;;;;; i i;;; i;;;;;; i;;; il;;;;OATA_SEG SEGMENTSIGN ON DB CR,LF,LF20 74 i7 DB 'Add two numbers(Y/N)?' ,a

    75 60 6220 28 593F 20 00 DB EOM24 NEXT MES DB CR,LF,LF,EOMNUMB I DB 2 DUP (?)

    NUMB 2 DB 2 DUP (? )

    OATA_SEG ENDS

    ........................................."", """ '" "" r r r r r r r I " " " " " " ' "Code segment........................................." " " " " " " " " " " " " " " 1 " " " " "CODE_SEG SEGMENT

    ASSUME CS:CODE SEG,SS:STACK SEGASSUME OS:DATA:SEG _MAIN PROC FARMOV SP,OFFSET STACK TOPMOV AX,DATA_SEGMOV DS,AXMOV ES,AX

    TOP:MOV DX,OFFSET SIGN_ONCALL DISP_MES

    AGAIN:CALL READ_KEYMOV DL,ALMOV AH,SIXINT DOS_FUNCRET

    OUT_CHAR ENDPREAD_KEY PROC NEAR

  • 5/9/2018 Bab5-Instruksi Kontrol Program

    32/41

    176 Pengantar Mikroprosesor

    OOBO B4 06 MOV AH,SIX00B2 B2 FF MOV DL,OFFH00B4 CD 21 INT DOS FUNC00B6 74 F8 JZ READ_KEY00B8 C3 RET00B9 READ_KEY ENDP00B9 CODE_SEG ENDS

    END MAINNEXT1 :0077

    0077 58 POP AX0078 E8 00A9 R CALL OUT_CHAR007B FE C9 DEC CL0070 75 F8 JNE NEXT1007F EB 89 JMP TOP0081 l-f.AIN_END:0081 B4 4C MOV AH,4CH0083 CD 21 INT DOS_FUNC0085 MAIN ENDP0085 READ_Nm.fB PROC NEAR0085 B5 02 MOV CH,TWO0087 READ_NUMB1 :0087 E8 OOBO R CALL READ KEY008A 2C 30 SUB AL, ZERO_ASC I!008C 8C 8C 72 F9 JB READ NUMB1008E 3C 39 CMP AL ,NINE ASC I!0090 7 -7 F5 JA READ NUMB10092 88 05 MOV [DIj-;AL0094 04 30 ADD AL, ZERO_ASCI!009A FE CD DEC CH09C 75 E9 JNE READ_NUMB 1009E 8A C3 MOV AL,BLOOAO E8 00A9 R CALL OUT_CHAR00A3 C3 RET00A4 READ_NUMB ENDP00A4 DISP_MES PROC NEAR00A4 B4 09 MOV AH,NINE00A6 CD 21 INT DOS_FUNC00A8 C3 RET00A9 DISP MES ENDP00A9 OUT_CHAR PROC NEAR0013 24 OF AND AL,ODFH0015 3C 4E CMF AL,NO0017 74 68 JE MAIN_END

  • 5/9/2018 Bab5-Instruksi Kontrol Program

    33/41

    Instruksi Kontrol Program 177

    0019 3C 59 CMP AL,YES001B 75 F3 JNE AGAIN0010 E8 00A9 R CALL OUT_CHAR0020 BA 001C R MOV OX,OFFSET NEXT_MES0023 E8 OOM R CALL OISP_MES0026 32 CO XOR AL,AL028 A2 0020 R MOV NUMB1,AL002B A2 0021 R MOV NUMB1+1,AL002E A2 0022 R MOV NUMB2,AL0031 A2 0023 R MOV NUMB 2+1"AL0034 B3 2B MOV BI,PLUS0036 BF 0200 R MOV OI,OFFSET N1Jlof..B10039 E8 0085 R CALL READ_NUMB.003C B3 30 MOV CL,2003E BF 0022 R MOV BL,O0041 E8 0085 R CALL READ NUMB0044 B1 02 MOV CL,20046 B3 00 MOV BL,O0048 AO 0021 R MOV AL,NUMB1+1004B 02 06 0023 R ADD AL,NUMB2+1004F 27 OAA0050 8A F8 MOV BH,AL0052 OC 30 OR AL,ZERO_ASCII0054 50 PUSH AX0055 8A C7 MOV AL,BH0059 3C OA CMP AL,10005B B3 01 MOV BL,l0050 NEXT:0050 AO 0020 R MOV AL,NUMB10060 02 06 0022 R ADD AL,NUMB20064 02 C3 ADO AL,BL0066 27 OAA0067 8A 08 MOV BL,AL0069 OC 30 OR AL, ZERO_ASCII006B 50 PUSH AX006C 8A C3 MOV AL,BL006E 3C OA CMP AL,100070 72 05 JB NEXT10072 BO 31 MOV AL,' l'0074 50 PUSH AX0075 FE C1 INC CL

  • 5/9/2018 Bab5-Instruksi Kontrol Program

    34/41

    178 Pengantar Mikroprosesor

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

    = 00090000

    00000000 530001 510002 520003 550004 560005 570006 B4 090008 CD 21OOOA SFOOOB 5EOOOC 5DOOOD SAOOOE 59OOOF 5B0010 CB00110011

    CONTOH 5-14

    . ." " " " " " " " " " " " " " " " " " " ,;;Library Module;DISPLAY message addressed by DX......................................." " " " " " " " " , , " " " , , , " " " " "NINE PUBLICEQU DISPLAY9

    LIB_SEG SEGMENTASSUME CS:LIB_SEG

    DISPLAY PROC FARPUSH BXPUSH CXPUSH DXPUSH BPPUSH SIPUSH DIMOV AH,NINEINT 21HPOP DIPOP SIPOP BPPOP DXPOP CXPOP BXRET

    DISPLAY ENDPLIB_SEG ENDS

    END

  • 5/9/2018 Bab5-Instruksi Kontrol Program

    35/41

    Instruksi Kontrol Program 179

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

    .............................................." " " " " " " " " " " " , , , " " " " , " " " " , ,iiPROGRAM to display HELLO on the CRTiuses DISPLAY.............................................., , , " " " " " " " " " " " " " " " " , , , , " " " ,

    = 0 0 2 4 EOM EQU ' $'= 0 0 0 0 ZERO EQU 00 0 0 0 DATA_SEG SEGMENT0 0 0 0 4 8 4 5 4 C 4 C 4 F MESSAGE DB DB 'HELLO'0 0 0 5 2 4 DB EOM0 0 0 6 DATA_SEG ENDS0 0 0 0 CODE_SEG SEGMENT

    ASSUME CS:CODE_SEG,DS:DATA_SEGEXTRNDISPLAY:FAR

    0 0 0 0 PROGRAM PROC FAR0 0 0 0 B8 --- R MOV AX,OATA_SEG0 0 0 3 8 E 0 8 MOV DS,AX0 0 0 5 BA 0 0 0 0 R MOV OX,OFFSET MESSAGE0 0 0 8 9A 0 0 0 0 E CALL DISPLAY0 0 0 0 B4 4 C INT 2 1 H0 0 1 1 PROGRAM ENDP0 0 1 1 CODE_SEG ENDS

    END PROGRAM

    CONTOH5-15

  • 5/9/2018 Bab5-Instruksi Kontrol Program

    36/41

    180 Pengantar Mikroprosesor

    Pernyataan EXTRN menyatakan prosedur eksternal - prosedur yang ditemu-kan di dalam file kepustakaan. Dia muncul di dalam segmen yang disebutLIB_SEG, yang memiliki nama yang sarna seperti yang ada di dalam segmenkepustakaan. Bila linker menggabungkan modul, kode dari modul kepustakaandengan DISPLAY_MESSAGE akan dimasukkan, Dia kemudian akan dipindah-kan ke dalam segmen yang disebut CODE-SEG karena keduanya adalah PUBLICdan keduanya diberi tanda 'CODE.'Linkage. Bagi modul kepustakaan untuk dihubungkan dengan modul program,keduanya harus menerima nama-nama dari editor. Misalkan anda telah mencipta-kan modul kepustakaan itu yang mengandung DISPLA Y_MESSAGE dan mena-makannya LIBRARY.ASM. Dia dirakit dengan MASM LIBRARY: untukmengubahnya 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 sebuahfile 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 padadisplay. Anda bisa menghubungkan sebanyak mungkin file kepustakaan sesukaanda pada file program.

    5-6 RINGKASAN1. Ada tiga tipe instruksi jump takbersyarat: pendek, dekat dan panjang. Jumppendek memungkinkan adanya cabang antara + 127 hingga -128 byte, jumpdekat memungkinkan untuk di mana saja di dalam segmen (intrasegmen),dan jump jauh dimungkinkan pada di mana saja di dalam memori (interseg-men).

    2. Label dekat berakhir dengan titik dua (LABEL:). Tidak ada titik dua setelahlabeljauh (LABEL).

    3. Displacement yang mengiktuijump pendek adalahjarak dari instruksi selan-jutnya ke lokasi jump.

  • 5/9/2018 Bab5-Instruksi Kontrol Program

    37/41

    Instruksi Kontrol Program 181

    4. Jump tidak langsung tersedia dalam dua bentuk: (1) jump ke lokasi yangdisimpan di dalam register (hanya intrasegmen), dan (2) jump ke lokasi yangdisimpan di dalam kata memori atau kata ganda (intrasegmen atau interseg-men).

    5. Jump bersyarat semuanya adalahjump pendek yang menguji satu atau lebihbit flag: C, Z, 0, P dan S. Jika syaratlkondisinya benar, terjadijump, danjikasyaratlkondisinya 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 mencakupLOOPE, LOOPNE, LOOPZ, dan LOOPNZ. LOOPE adalah loop sewaktuflag menunjukkan kondisi yang sarna dan register CX bukanlah O .

    7. Subrutin atau prosedur adalah kelompok instruksi yang melakukan satu tugasdan digunakan dari bagian mana saja di dalam program. Instruksi CALL di-gunakan untuk menghubungkan dengan subrutin dan instruksi return (RET)digunakan untuk kembali dari subrutin. Dalam bahasa rakitan, nama prose-dur dinyatakan dengan pseudo-opcode PROC, dan akhir dari prosedur dinya-takan dengan pseudo-opcode ENDP.8. Instruksi CALL, yang memanggil subrutin, pada dasarnya adalah suatu kom-binasi dari dua instruksi: PUSH dan JMP. CALL mendorong address dariinstruksi selanjutnya - adrress return - ke dalam stack dan kemudian jumpke subrutin. CALL dekat menempatkan IP pada stack, dan CALL jauh me-nempatkan baik IP maupun CS pada stack.

    9. Instruksi return (RET) digunakan untuk kembali ke subrutin. Dia melakukan-nya dengan menarik kernbali return address dari stack dan menempatkannyakembali ke IP (RET dekat) atau IP dan CS (RET jauh). RET juga bisa memo-difikasi pointer stack dengan menambahkan bilangan 16-bit bertandapadanya. Prosedur ini sering digunakan untuk menghapus data stack sebelumkembali ke program calling.

    10. Interupt bisa merupakan instruksi software yang mirip dengan CALL mau-pun sinyal hardware yang digunakan untuk memanggil subrutin. Proses inimenginterupsi program yang sedang dilaksanakan bila sebuah sinyal hard-ware meminta perhatian.

    11. Vektor interupt adalah area memori 4-byte yang mengandung address (IPdan CS) dari subrutin servis interupt. 8086/8088 memiliki 256 vektor in-terupt semacam itu di mana 32 di antaranya dicadangkan untuk fungsi ter-padu atau masa depan dan sisanya masih bisa dipakai oleh si pemakai.

  • 5/9/2018 Bab5-Instruksi Kontrol Program

    38/41

    182 Pengantar Mikroprosesor

    12. Bila sebuah interupt mulai berfungsi, mikroprosesor mendorong register flagke dalam stack, mendorong return address (lP dan CS) ke dalam stack, mem-bebaskan T dan I, dan menjemput vektor interupt sehingga dia bisa melompatke subrutin servis interupt.

    13. Instruksi interupt software (INT), yang sering digunakan untuk mengganti-kan panggilan sistem, panjangnya 2 byte, sedangkan instruksi CALL yangdigantikannya panjangnya 5 byte. Sebab itu interup software menghemat 3byte ruang memori.

    14. Instruksi return khusus (lRET) harus diginakan untuk kembali dari interuptyang bertujuan untuk memindahkan isi register flag dari stack sebelum returnaddress.

    15. Interupt pada overflow (INTO) adalah interupt bersyarat yang memanggilsubrutin servis interuptjika flag overflow (0) telah siap dan tidak melakukanapa-apajika dia dibebaskan.

    16. Instruksi flag interupt yang bebas (CLI) dan flag interupt set (STI) diguna-kan, secara berurutan, untuk melumpuhkan dan menggerakan pin INTR pada8086/8088. Pin INTR adalah satu dari dua inout interupt hardware padamikroprosesor. Input lainnya, non-maskable interupt (NMI), tidak dipenga-ruhi 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 didalam sebah program, dan TEST adalah logika 1, 8086/8088 menungguTEST untuk menjadi logika o .

    19. LOCK dan ESC digunakan terutama dengan coprosesor eksternal.20. File execute (EXE) dibuat dengan linker setelah perakit telah menghasilkansebuah file obyek (OJB). Setelah file EXE dibuat, si pemakai bisa melaksa-nakannya dengan mengetik nama file.

    21. Bila membuat program bahasa rakitan 8086/8088 kita perlu membagi pro-gram itu menjadi bagian yang terpisah: equates, stack segmen, data segmen,dan code segmen. Jika segmen tambahan dibutuhkan, dia juga dimasukkan,seperti halnya data tambahan, kode dan segmen tambahan lainnya.

    22. Pseudo-opcode SEGMENT menjelaskan awal dari sebuah segmen dan pseu-do-opcode ENDS menunjukkan akhirnya.23. Pseudo-opcode ASSUME memberitahu perakit nama segmen apa yang telah

    dipilih untuk setiap segmen kecuali segmen stack.

  • 5/9/2018 Bab5-Instruksi Kontrol Program

    39/41

    Instruksi Kontrol Program 183

    24. Modul kepustakaan adalah bagian yang sangat penting dari pengembanganprogram bahasa rakitan karena prosedur yang biasanya digunakan tersimpandi dalam kepustakaan pada disket. Si pemakai bisa CALL (memanggil) salahsatu subrutin ini dengan menghubungkan program tersebut dan menyatakanekstemal nama prosedur (EXTRN).

    25. Pemyataan pertama dari file kepustakaan adalah pesudo-opcode PUBLIC.PUBLIC memberitahu penghubung bahwa sebuah prosedur atau proseduryang terdapat di dalam kepustakaan bisa dihubungkan ke program lainnya.

    5-7 PERTANYAAN DAN SOAL1. 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 pelak-

    sanaannya 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 WATERb. SEND DATAc. OUTPUTd. SEND STRINGe. SANTA CLAUSf. WINTER SPRING6. 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 indentifikasiapakah 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?

  • 5/9/2018 Bab5-Instruksi Kontrol Program

    40/41

    184 Pengantar Mikroprosesor

    16. LOOP akan selalu mengurangi dan mengujinya untuk 0untuk 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 tam-bahanDATA.

    19. Buatlah urutan instruksi yang menguji bilangan di dalam register CX untukmenentukan apakah nilainya yang takbertanda di atas 0400H. Jika nilai itu diatas 0400H, maka melompat ke label NEXT; jika tidak, lanjutkan denganinstruksi 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 diAX setelah kernbali dari prosedur, dan juga pastikan bahwa tidak satupunregister atau flag lainnya berubah.

    30. Apa itu interupt?31. Instruksi software apa yang digunakan untuk rnernanggil subrutin servisinterupt?

    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-rna-

    sing byte.35. Jelaskan apa yang dilakukan instruksi INT 40H, pastikan untuk rnenunjuk-

    kan 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?

  • 5/9/2018 Bab5-Instruksi Kontrol Program

    41/41

    Instruksi Kontrol Program 185

    39. Instruksi apa yang digunakan untuk mengecek pin TEST?40. Apa itu file EXE?41. Apa itu file OBJ?42. Apa yang ditunjukkan oleh akronim DOS?43. Jelaskan langkah yang dibutuhkan untuk mengubah sebuah file bahasa rakit-

    an menjadi file execute.44. Mengapa equate digunakan di dalam program bahasa rakitan?45. Apa tujuan dari pseudo-opcode SEGMENT?46. Apa arti dari pesudo-opcode PUBLIC?47. Bagaimana akhir dari segmen yang ditunjukkan di dalam bahasa rakitan?48. Jika segmen kode diberi label PROGRAM, segmen data diberi label DATA,

    dan segmen tambahan diberi label DATA_OLD, buatlah sebuah pernyataanASSUME untuk memberitahu perakit nama-nama dari segmen ini.

    49. Bagaimana return address untuk DOS dibuat di dalam segmen kode?50. Apa itu modul kepustakaan?51. Apa yang mengubah sebuah file menjadi modul kepustakaan?52. Bagaimana prosedur kepustakaan dijelaskan dalam sebuah program?53. Peranan apa yang dimainkan oleh penghubung (linker) dalam menggunakan

    modul kepustakaan?54. Jika sebuah program dinamakan MINE dan dua kepustakaan (LIB 1 dan LIB

    2) digunakan dengannya, buatlah pernyataan linker yang benar untuk meng-gabungkan mereka.