Seperti program COM, program EXE juga yaitu suatu bentuk program
yang dapat langsung dijalankan pada prompt DOS. Bentuk program EXE tidak
dibatasi oleh satu segment, seperti halnya pada program COM. Oleh sebab nya
besarnya file untuk program EXE bisa melebihi 64 KB.
program EXE yaitu program yang lebih lengkap dibandingkan dengan
program COM, selain itu pemakaian memory juga lebih mudah pada program EXE.
Catatan:
Pada program EXE, segala bentuk JUMP dan CALL dipakai jenis
FAR(program COM berbentuk NEAR). ini dipicu program EXE yang bisa
mengakses segment lain, sehingga perintah JUMP dan CALL membutuhkan informasi
alamat dari segment(CS) selain offset(IP).
Pada program COM, pelajar tidak perlu mengartikan tempat tertentu untuk
segment DATA dan STACK sebab program COM hanya memakai 1 segment. Dengan
demikian segment untuk DATA, STACK dan CODE pada program COM yaitu sama,
stack memakai akhir dari segment yang dipakai oleh segment CODE.
Berbeda dengan program COM, pada program EXE kita harus mengartikan
tempat untuk segment DATA, CODE dan STACK. Untuk membuat program EXE ini, kita
bisa memakai model pada gambar kode 26.1.xxxx .
-----------------------------------------------------------
.MODEL SMALL
.STACK 200h
.DATA
+--------------+
| Tempat |
| Data program |
+--------------+
.CODE
Label1:
MOV AX,@DATA
MOV DS,AX
+---------------+
| |
| Tempat |
| program |
| |
+---------------+
MOV AX,4C00h
INT 21h
END Label1
----------------------------------------------------------
gambar kode Model program EXE
Pada program EXE, pelajar tidak perlu memakai perintah:ORG 100h, sebab
program EXE bisa menempatkan dirinya pada alamat yang sudah ditentukan.
Pada program EXE, register segment CS dan SS diinialisasi secara
otomatis, namun register segment DS dan ES tidak demikian. Register
segment DS dan ES pada awalnya menunjuk pada awal program , yaitu PSP.
sebab nya register DS perlu pelajar inialisasi secara manual agar menunjuk pada
segment data melalui perintah:
MOV AX,@DATA
MOV DS,AX
Pada program EXE, pelajar perlu mengartikan tempat untuk stack.
Pendefinisian tempat untuk stack dipakai tanda directive: .STACK yang
diikuti dengan banyaknya stack yang didiartikan untuk program . Pada model
yang pelajar pakai didiartikan tempat untuk stack sebanyak 200h Word yang
tentunya sudah lebih dari cukup untuk dipakai oleh program -program pada
umumya.
Berbeda dengan program COM, yang selalu pelajar akhiri dengan interupsi
20h, pada program EXE interupsi 20h tidak bisa dipakai . Pada program EXE
dipakai interupsi 21h fungsi 4Ch dengan register AL berisi kode return.
Interupsi 21h fungsi 4Ch ini lebih fleksibel untuk dipakai , sebab selain
kontrol akan dikembalikan kepada DOS, file-file yang terbuka juga akan ditutup
oleh fungsi ini. Fungsi ini juga akan mengembalikan vektor interupsi default
22h, 23h dan 24h. kita juga bisa mengakhiri program COM dengan fungsi ini.
Sesuai dengan model program EXE pada gambar kode akan pelajar buat sebuah
program yang sederhana. program berikut akan memperlihatkan kepada kita ,
bagaimana caranya merubah huruf kecil menjadi huruf besar.
;/=======================/;
.MODEL SMALL
.STACK 200h
.DATA
Klm DB 'Cinta memicu rindu yang paling sengsara $'
.CODE
Proses:
MOV AX,@DATA ; Inialisasi, agar
MOV DS,AX ; DS menunjuk pada data
XOR BX,BX
MOV CX,47
Ulang:
CMP Klm[BX],'a' ; Apakah huruf kecil ?
JB Tidak ; Tidak, cek berikutnya
CMP Klm[BX],'z' ; Apakah huruf kecil ?
JA Tidak ; Tidak, cek berikutnya
SUB Klm[BX],'a'-'A' ; Jadikan huruf besar
Tidak:
INC BX ; Akses huruf berikutnya
LOOP Ulang ; Ulangi
Cetak:
MOV AH,09 ; Cetak kalimat yang sudah
LEA DX,Klm ; dirubah menjadi huruf besar
INT 21h ; semuanya
Exit:
MOV AX,4C00h ; Selesai,
INT 21h ; kembali ke DOS
END Proses
program 26.1.xxxx . Merubah huruf kecil menjadi huruf besar
Sesudah program 26.1.xxxx . kita ketikkan, compilelah menjadi bentuk EXE,
dengan cara:
C:\>TASM UPCASE
Turbo Assembler Version 2.0 Copyright © 1980 1990
Borland international computer
Assembling file: UPCASE.ASM
Error messages: None
Warning messages: None
Passes: 1
Remaining memory: 326k
Sesudah source program di TASM, kita bisa me-LINK objek file dengan:
C:\>TLINK UPCASE
Turbo Link Version 3.0 Copyright (© 1980-1990
Borland international computer
Sesudah kedua proses ini selesai, maka kita akan memperoleh sebuah
program EXE yang siap dijalankan.
Bila program 26.1.xxxx . dieksekusi, maka pada layar akan ditampilkan kalimat
yang semua huruf nya sudah dirubah menjadi huruf besar, seperti:
CINTA memicu RINDU YANG PALING SENGSARA
TURBO DEBUGGER
Dalam membuat program , pelajar biasanya akan selalu mengalami suatu
kesalahan. Kesalahan dalam pembuatan sebuah program dapat dibagi menjadi dua,
yaitu kesalahan syntax dan kesalahan logika. Kesalahan syntak biasanya berupa
kesalahan tata cara atau aturan penulisan seperti perintah: "MOV AH,AX" (kedua
operand tidak sama besar bitnya). Kesalahan syntax yaitu mudah untuk dicari
dan diperbaiki. Bentuk kesalahan yang kedua, yaitu kesalahan logika yaitu
kesalahan program yang berjalan tidak sesuai dengan yang diinginkan. Kesalahan
seperti ini tidak ditampilkan oleh compiler seperti pada kesalahan syntax.
Ingatlah, program akan selalu berjalan sesuai dengan yang diperintahkan
bukannya seperti yang diinginkan.
Untuk mencari kesalahan logika, Turbo Debugger yaitu salah satu
debugger yang paling canggih pada saat ini. Dengan Turbo Debugger kita bisa
melihat jalannya program perintruksi, melihat isi register, melihat isi stack,
melihat dan mengubah isi flags register, mengubah isi memory, mentrace program
residen, mentrace device driver dan sebagainya. Dengan mengusai Turbo debugger
banyak yang dapat kita lakukan, seperti melihat program pelajar lain, mengubah
suatu program yang sudah jadi, membongkar suatu kode proteksi, dan
membongkar virus.
sebab Turbo Debugger cukup besar untuk pelajar bicarakan secara lengkap
dan mendetail, maka pada bagian ini hanya akan dibahas beberapa hal penting
yang kita perlukan saja.
bila kita ingin melacak kesalahan ataupun jalannya program kita , pada
saat source program di TASM dan di LINK pakai parameter sebagai berikut:
TASM/ZI UPCASE
TLINK/V UPCASE
Dengan cara ini, pada akhir file EXE yang dihasilkan akan ditambahkan
informasi yang dapat dipakai oleh Turbo Debugger. Informasi ini antara lain,
nama variabel dan lokasi baris dari source code yang akan dieksekusi. bila
parameter ZI dan V tidak didan kan, Turbo Debugger hanya akan menampilkan
intruksi yang dijalankan tanpa embel-embel lain sehingga banyak kelebihan dari
Turbo Debugger yang tidak bisa pelajar manfaatkan.
Untuk memakai Turbo Debugger, kita dapat langsung menyertakan nama
file yang akan dilacak malalui parameter, seperti:
TD UPCASE
bila Ektensi file tidak kita dan kan, maka secara default Turbo
Debugger akan mencari file itu dengan ektensi EXE terlebih dahulu.
Bagi kita pemakai Turbo Pascal, tentunya tidak akan terlalu asing dengan
tampilan Turbo Debugger ini. Tampilan pada Turbo Debugger hampir sama dengan
tampilan pada Turbo Pascal, selain itu banyak pula tombol fungsi yang sama
persamaanya(gambar kode 27.1.)
<<<<< Gbr271.PIX >>>>>>
gambar kode 27.1. Tampilan Menu Turbo Debugger
Pada lingkungan Turbo Debugger ini, mouse dapat kita pakai dengan
mudahnya namun bila kita tidak memiliki nya, keyboard juga dapat dipakai .
27.3. memakai TURBO DEBUGGER
Pada bagian ini akan pelajar coba memakai Turbo Debugger untuk melihat
jalannya program UPCASE.EXE(program 26.1.xxxx ). Ingatlah untuk menyertakan
parameter ZI dan V pada saat source program UPCASE.ASM kita jadikan EXE.
Sesudah kita masuk pada lingkungan Turbo Debugger dengan perintah:
C:\TD UPACASE.EXE
Kini, cobalah pilih menu "View" lalu pilih "Variabel", maka semua
isi variabel program akan ditampilkan. Mungkin penempatan window variabel ini
agak mengganggu kita , untuk itu kita dapat memindahkannya dengan menekan
tombol Ctrl+F5 dan digeser dengan tombol panah. Sesudah pergeseran selesai
dilakukan tekanlah enter, maka window variabel itu akan segera berpindah.
Sesudah itu dari menu utama, pilihlah menu "View" lalu pilih
"Registers", maka seluruh nilai register dan flag akan dapat kita lihat. Bila
kita ingin juga melihat nilai dari register 32 bit, aktifkanlah menu local
dari registers dengan menekan tombol ALT+F10 lalu pilihlah "Registers 32-
Bit". Bila pada saat itu, register 32 Bit belum ditampilkan maka akan segera
ditampilkan, sebaliknya bila register 32 Bit sudah ditampilkan maka register
32 bit itu akan segera dihilangkan.<<<<< Gbr272.PIX >>>>>
gambar kode 27.2. Tampilan Turbo Debugger
Cobalah kita Trace jalannya program kita dengan menekan tombol F7 atau
dengan memilih menu Run lalu Trace. Setiap penekanan tombol F7 akan
melakukan satu intruksi yang ditunjukkan oleh tanda panah(CS:IP) dan tanda
panah akan segera bergeser pada intruksi selanjutnya yang siap dieksekusi.
Tekanlah terus tombol F7 dan perhatikan perubahan nilai register dan perubahan
huruf-huruf pada variabel "Klm". Sesudah program selesai dieksekusi kita bisa
melihat tampilan dari program dengan menekan tombol ALT+F5. Untuk keluar dari
lingkungan Turbo Debugger, tekanlah tombol ALT+X.
Bila kita masih ingin mencoba, tekanlah tombol Ctrl+F2 maka file akan
segera direset atau diLoad kembali dan siap diTrace lagi dari permulaan.
kita bisa melihat dan mengubah semua nilai register pada komputer,
termasuk flags register dengan mudahnya. Caranya yaitu:
1. Aktifkan Turbo Debugger.
2. Pilih menu "View".
3. Pilih menu "Registers", maka semua nilai register bisa kita lihat. Dengan
tombol panah, kita bisa menggerakkan sorotan pada register dan dengan tombol
Tabulasi kita bisa berpindah dari sorotan register ke sorotan Flags. kita bisa
mengubah nilai flags dengan menyorot flag yang ingin diganti dan tekan tombol
Enter.
<<<<<< Gbr273.PIX >>>>>>>
gambar kode 27.3. Menu Registers
Kini aktifkanlah Menu Local dari menu Registers dengan menekan tombol ALT+F10
yang terdiri atas:
- Increment: Untuk menambah nilai register yang sedang disorot dengan satu.
- Decrement: Untuk mengurangai nilai register yang sedang disorot dengan satu.
- Zero : Untuk menolkan nilai register yang sedang disorot.
- Change : Pilihan ini akan menampilkan sebuah kotak yang akan meminta kita
untuk memasukkan angka baru untuk register yang sedang disorot. Selain mengganti nilai
register dengan cara ini, kita bisa mengganti nilai
register yang sedang disorot dengan secara langsung
mengetikan nilainya tanpa mengaktifkan SubMenu.
- Register 32-Bit: Pilihan ini akan menampilkan register 32 bit
bila belum ditampilkan, sebaliknya register 32
bit akan dihilangkan bila sebelumnya sudah
ditampilkan.
Dengan Turbo Debugger, kita bisa melihat, mengganti, merubah, mencatat
atau menulisi data dimemory dengan mudahnya. sedang caranya yaitu:
1. Aktifkan Turbo Debugger.
2. Pilih menu "View".
3. Pilih menu "Dump", maka secara default akan ditampilkan data pada segment
data(DS). Besarkanlah windownya dengan menekan tombol F5(Penekanan F5
sekali lagi akan mengecilkan windownya). kita bisa menggerakkan posisi
kursor dengan tombol panah. Data pada posisi kursor bisa diubah dengan
langsung mengetikkan angka barunya atau mengetikkan huruf dengan diapit
oleh tanda petik. kita bisa menekan tombol Ctrl+G untuk menampilkan alamat
baru, contoh alamat stack, dengan memasukkan kode SS:SP pada input Box.
kita juga bisa memakai angka secara langsung pada input Box, seperti
0000:0000 untuk menampilkan Interrupt Vektor Table.
<<<<< Gbr274.PIX >>>>>>
gambar kode 27.4. Manipulasi Data Memory
4. Kini aktifkanlah Menu Local dari menu Dump dengan menekan tombol ALT+F10.
kita akan akan melihat menu:
- Goto : Untuk menampilkan data pada suatu alamat. Perintah
ini sama dengan penekanan tombol Ctrl+G yang sudah
pelajar lakukan sebelumnya.
- Search : Untuk mencari byte atau string pertama yang cocok
dengan deskripsi yang pelajar berikan.
- Next : Untuk mencari byte atau string selanjutnya yang
cocok, sesudah kita mencari dengan Search.
register yang sedang disorot. Selain mengganti nilai
register dengan cara ini, kita bisa mengganti nilai
register yang sedang disorot dengan secara langsung
mengetikan nilainya tanpa mengaktifkan SubMenu.
- Register 32-Bit: Pilihan ini akan menampilkan register 32 bit
bila belum ditampilkan, sebaliknya register 32
bit akan dihilangkan bila sebelumnya sudah
ditampilkan.
Dengan Turbo Debugger, kita bisa melihat, mengganti, merubah, mencatat
atau menulisi data dimemory dengan mudahnya. sedang caranya yaitu:
1. Aktifkan Turbo Debugger.
2. Pilih menu "View".
3. Pilih menu "Dump", maka secara default akan ditampilkan data pada segment
data(DS). Besarkanlah windownya dengan menekan tombol F5(Penekanan F5
sekali lagi akan mengecilkan windownya). kita bisa menggerakkan posisi
kursor dengan tombol panah. Data pada posisi kursor bisa diubah dengan
langsung mengetikkan angka barunya atau mengetikkan huruf dengan diapit
oleh tanda petik. kita bisa menekan tombol Ctrl+G untuk menampilkan alamat
baru, contoh alamat stack, dengan memasukkan kode SS:SP pada input Box.
kita juga bisa memakai angka secara langsung pada input Box, seperti
0000:0000 untuk menampilkan Interrupt Vektor Table.
<<<<< Gbr274.PIX >>>>>>
gambar kode 27.4. Manipulasi Data Memory
4. Kini aktifkanlah Menu Local dari menu Dump dengan menekan tombol ALT+F10.
kita akan akan melihat menu:
- Goto : Untuk menampilkan data pada suatu alamat. Perintah
ini sama dengan penekanan tombol Ctrl+G yang sudah
pelajar lakukan sebelumnya.
- Search : Untuk mencari byte atau string pertama yang cocok
dengan deskripsi yang pelajar berikan.
- Next : Untuk mencari byte atau string selanjutnya yang
cocok, sesudah kita mencari dengan Search.
- Change : Untuk mengganti data 1 byte atau lebih data pada
posisi kursor.
- Follow : Untuk mengganti alamat code atau data tampilan dengan
data pada posisi kursor.
- Previous: Untuk mengembalikan tampilan pada alamat sebelum
terjadi perubahan. Perintah ini biasanya dipakai
untuk membatalkan hasil dari perintah Follow dan
Goto. Pekerjaan ini dapat dilakukan sebab Turbo
Debugger menyimpan alamat terakhir pada saat terjadi
perubahan alamat.
- Display As: Untuk merubah format tampilan yang secara default
yaitu Byte. Perintah ini memiliki pilihan: Byte,
Word, LongInt(4 byte), Composite(8 byte),
Float(Format data C), Real(6 byte), Double(Format
data C) dan Extended(10 byte).
- Block : Untuk manipulasi blok memory. Perintah ini memiliki pilihan:
* Clear : Untuk menolkan data pada suatu block memory yang
ditentukan.
* Move : Untuk memindahkan suatu block memory pada alamat
baru.
* Set : Untuk merubah semua nilai pada suatu block memory.
* Read : Untuk membaca file ke suatu block memory yang
ditentukan. kita harus menentukan nama file, alamat
awal penyimpanan dan banyaknya byte yang akan
dibaca.
* Write : Untuk membaca suatu Data blok yang ditentukan dan
ditulis ke file yang ditentukan. Pada menu ini,
kita juga harus menentukan alamat awal dari data
yang akan dicatat, banyaknya byte dan nama file.
Pada bagian 27.3. kita sudah memakai tombol F7 untuk mentrace
program . Pada bagian ini akan pelajar lihat fungsi-fungsi lain yang disediakan
oleh Turbo Debugger untuk mentrace program . Macam-macam fungsi trace ini
biasanya ada pada menu Run(gambar kode 27.5.).
<<<<< Gbr275.PIX >>>>>
gambar kode 27.5. Menu Run
Pada menu Run ini, dapat kita lihat ada lagi submenu:
1. Run : Untuk menjalankan program dengan kecepatan penuh. program akan
dijalankan sampai selesai atau pada posisi Break Point. kita bisa memakai
fungsi ini dengan menekan tombol F9 secara langsung.
2. Go To Cursol : Untuk menjalankan program sampai posisi kursor. Untuk
memakai fungsi ini, gerakkanlah posisi kursor dengan tombol panah menuju
posisi yang diiginkan, lalu pilihlah menu Run dan Go To Cursol atau dengan
menekan tombol F4. Maka program akan dijalankan sampai posisi kursor itu .
3. Trace Into : Untuk menjalankan satu intruksi. Bila ada pemanggilan
pada suatu procedure, fungsi ini juga akan melompat dan menjalankan
intruksi pada procedure itu. Fungsi ini dapat dipakai secara langsung dengan
menekan tombol F7.
4. Step Over : Sama dengan fungsi F7 perbedaannya bila ada pemanggilan
pada suatu procedure, fungsi ini akan langsung menyelesaikan seluruh
intruksi pada procedure itu . Fungsi ini dapat dipakai secara langsung
dengan menekan tombol F8.
5. Execute To : Untuk menjalankan program sampai pada posisi yang ditentukan.
kita bisa menentukan alamat segment:offset ataupun dengan nama label program
sebagai tempat berhenti. Fungsi ini dapat dipakai secara langsung dengan
menekan tombol Alt+F9.
6. Until Return : Untuk menjalankan program sampai akhir dari suatu procedure
atau procedure kembali pada pemanggilnya. Fungsi ini biasanya dipakai pada
saat kita mentrace program dengan tombol F7 dan masuk pada suatu procedure,
ternyata kita ingin segera melewatinya. Fungsi ini dapat dipakai secara
langsung dengan menekan tombol Alt+F8.
7. Animate : Untuk menjalankan program secara otomatis sampai program selesai
atau ditekan sembarang tombol. Fungsi ini sama dengan penekanan tombol F7
secara otomatis. Fungsi ini biasanya dipakai oleh pelajar yang memiliki mata
elang atau pada program yang ada intruksi yang akan mengunci keyboard
sementara.
8. Back Trace : Untuk menjalankan intruksi sebelumnya yang sudah dijalankan.
Fungsi ini dapat dipakai secara langsung dengan menekan tombol Alt+F4.
9. Instruktion Trace : Sama dengan tombol F7, perbedaannya bila ada suatu
interupsi maka fungsi ini akan masuk dan menjalankan program interupt handler
perintruksi. Dengan fungsi ini kita dapat melihat interrupt handler suatu
interupsi. Fungsi ini dapat dipakai secara langsung dengan menekan tombol
Alt+F7.
10. Argumen : Untuk merubah atau mengganti command line.
11. program Reset : Untuk mereset program . Fungsi ini biasanya dipakai bila
kita ingin mentrace kembali program dari permulaaan. Fungsi ini dapat
dipakai secara langsung dengan menekan tombol Ctrl+F2.
27.3.4. MELIHAT VARIABEL program
Semua isi ataupun nilai dari variabel program bisa kita lihat dengan
tombol Ctrl+F7 ataupun dengan memilih menu Data lalu pilih menu Add Watch.
Sesudah itu isilah dengan nama variabel yang ingin kita lihat isinya(Gambar
27.6.).
<<<<<< Gbr276.PIX >>>>>>
gambar kode 27.6. Melihat Variabel program
Bila kita memasukkan nama dari suatu label program , maka alamat dari
label itu akan ditampilkan. Bila kita merasa wimdow watch ini terlalu
kecil, tombol F6 dapat kita pakai untuk berpindah ke window watch ini dan
membesarkannya(F5). Penekanan tombol F5 akan membesarkan atau mengecilkan
window.
Breakpoints yaitu titik-titik tempat yang mana program akan dihentikan.
Untuk itu kita bisa melakukannya dengan:
1. Aktifkan Turbo Debugger
2. Tempatkan kursor pada posisi yang ingin kita beri tanda breakpoints.
3. Pilih menu BreakPoints lalu Toggle, atau langsung menekan tombol F2.
Maka pada posisi itu akan ditanda i dengan sebuah sorotan garis
merah(gambar kode 27.7). Bila kita ingin membatalkan titik brekpoints, tekanlah
tombol F2 sekali lagi pada tempat yang sama.
<<<<<< Gbr277.PIX >>>>>>
gambar kode 27.7. memberi posisi BreakPoints
Selain pemberian posisi BreakPoints dengan F2, kita bisa juga memberi
posisi BreakPoints melalui alamatnya. Untuk itu tekanlah tombol Alt+F2 dan
berikan alamat untuk titik BreakPoints itu .
4. Tekanlah tombol F9 untuk mengeksekusi program kita . Setiap mencapai titik
BreakPoints program akan segera berhenti, untuk melanjutkannya kembali
tekanlah tombol F9 lagi.
bila kita ingin melacak suatu program yang besar, kebutuhan akan memory
komputer menjadi penting sekali. Pada kasus seperti ini, Turbo Debugger
menyediakan 2 cara yang dapat memecahkan masalah ini, yaitu:
1. Untuk kita yang memiliki komputer 80286, disediakan program TD286.EXE yang
dapat berjalan pada modus proteksi. TD286.EXE akan menyimpan dirinya pada High
Area, sehingga memory konvensional hanya dipakai sedikit sekali. program
TD286 dapat juga berjalan pada semua prosesor diatasnya, seperti 80386 dan
80486.
2. Untuk kita yang memiliki komputer 80386 dengan memory extended minimal 640
KB, disediakan TD386.EXE dengan Driver TDH386.SYS. Driver TDH386.SYS akan
membuat Turbo Debugger dijalankan pada modus Virtual sehingga membebaskan
memory konvensional. kita bisa memakai driver ini
melalui CONFIG.SYS
dengan menyertakan: DEVICEHIGH=TDH386.SYS. Ingatlah, driver TDH386.SYS ini
biasanya akan konflik dengan memory manager yang memakai virtual memory,
seperti QEMM.SYS. Baik TD286.EXE atau TD386.EXE dapat dijalankan persis
dengan program TD.EXE.
Selain dengan cara diatas, masih ada cara lain yaitu dengan
memakai TDREMOTE.EXE. program ini memungkinkan pelacakan sebuah program
dengan memakai 2 komputer yang dihubungkan melalui serial port. Dengan
cara ini, sebuah program dapat memakai memory konvensional secara optimal
sementara TDREMOTE memakai memory dari komputer yang lain.
DAFTAR INSTRUKSI ASSEMBLY
Mnemonic : AAA (ASCII Adjust For Addition)
Tersedia pada : 8088 keatas
Syntax : AAA
Pengaruh flag : AF, CF
Fungsi : Mengatur format bilangan biner/hexa ke bentuk BCD sesudah
dilakukan operasi penjumlahan dua bilangan BCD. AAA hanya dapat dilakukan
untuk bilangan sebesar 4 bit, maksimal hexa F dan diletakkan di register AL.
Bila AL bernilai lebih dari 9, maka AL akan dikurangi 10 dan 4 bit tinggi
dari AL akan dijadikan 0. Sesudah itu AH akan ditambah dengan 1. CF dan AF
akan diset 1.
Contoh:
Bilangan BCD 8 + 6 = ...
MOV AL,8h
MOV AH,6h
ADD AL,AH ; AX = 060Eh
AAA ; AX = 0704h
Jadi bilangan 0E dijadikan BCD menjadi 14, yang mana bilangan di AX dibaca
BCD 14 --> AH = 1(7-6), AL = 4
Mnemonic : AAD (ASCII Adjust For Division)
Tersedia pada : 8088 keatas
Syntax : AAD
Pengaruh flag : SF, ZF, PF
Fungsi : Mengkonversi bilangan BCD ke biner atau
hexa. sedang cara yang dilakukan yaitu mengalikan AH dengan 10 dan
menambahkan isi AL dengan hasilkali AH. Hasil pertambahan itu akan
diletakkan di register AL lalu AH akan dinolkan.
Contoh:
Hexa dari BCD 53 yaitu ...
MOV AH,05
MOV AL,03
AAD ; AL=0035h yaitu hexa dari BCD 53
Mnemonic : AAM (ASCII Adjust For Multiplication)
Tersedia pada : 8088 keatas
Syntax : AAM
Pengaruh flag : OF, SF, ZF, AF, PF, CF
Fungsi : Mengkonversi bilangan biner atau hexa ke BCD. sedang cara
yang dilakukan yaitu membagi AL dengan 10, lalu hasilnya dimasukkan ke
register AH sedang sisanya ke register AL.
Contoh:
Bilangan BCD ; 12 * 9 = ...
MOV AL,12h
MOV BL,09h
MUL BL ; AX = 00A2h
AAM ; AX = 1002h
Bilangan 1002h pada AX dibaca sebagai desimal 162 :
- AH = 10h = 16
- AL = 02h = 2
Mnemonic : AAS (ASCII Adjust For Subtraction)
Tersedia pada : 8088 keatas
Syntax : AAS
Pengaruh flag : AF, CF
Fungsi : Mengatur format bilangan biner/hexa hasil pengurangan ke
bentuk BCD. AAS ini berlaku untuk hasil pengurangan yang tidak lebih dari 4
bit. bila 4 Bit rendah dari AL lebih besar dari 9, maka AL akan dikurangi
dengan 6 dan register AH akan dikurangi 1. 4 bit atas register AL akan
dijadikan nol sedang 4 bit rendahnya akan bernilai 0-9.
Contoh:
Bilangan BCD 11 - 5 = ...
MOV AL,11h
MOV BL,5h
SUB AL,BL ; AX = 000C
AAS ; AX = FF06
Mnemonic : ADC (Add With Carry)
Tersedia pada : 8088 keatas
Syntax : ADC Tujuan,Sumber
Pengaruh flag : OF, SF, ZF, AF, PF
Fungsi : Menambahkan "Sumber", "Tujuan" dan Carry Flag (1=on, 0=off),
hasilnya diletakkan pada "Tujuan". Intruksi ini biasanya dipakai sesudah
operasi pada pertambahan atau perkalian yang memicu Carry. contoh
pertambahan yang melibatkan bilangan yang besar, seperti pada contoh dibawah
ini:
Contoh:
12345678h + 9ABCDEF0 = ......
Kedua operand di atas berukuran 4 byte. Jelas sudah melebihi kapasitas
register. Di sinilah dipakai mnemonic ADC.
Contoh:
MOV AX,1234h ; AX = 1234
MOV BX,9ABCh ; BX = 9ABC
MOV CX,5678h ; BX = 5678
MOV DX,0DEF0h ; DX = DEF0
ADD CX,DX ; CX = 3568 CF = 1
ADC AX,BX ; AX = AX+BX+CF = ACF1
Hasil penjumlahan tertampung di AX:CX yaitu ACF13568h.
Mnemonic : ADD
Tersedia pada : 8088 keatas
Syntax : ADD Tujuan,Sumber
Pengaruh flag : OF, SF, ZF, AF, PF, CF
Fungsi : Menambahkan "Sumber" dan "Tujuan" lalu hasilnya disimpan
pada "Tujuan". Bila hasil penjumlahan tidak tertampung seluruhnya pada MOV BL,5h
SUB AL,BL ; AX = 000C
AAS ; AX = FF06
Mnemonic : ADC (Add With Carry)
Tersedia pada : 8088 keatas
Syntax : ADC Tujuan,Sumber
Pengaruh flag : OF, SF, ZF, AF, PF
Fungsi : Menambahkan "Sumber", "Tujuan" dan Carry Flag (1=on, 0=off),
hasilnya diletakkan pada "Tujuan". Intruksi ini biasanya dipakai sesudah
operasi pada pertambahan atau perkalian yang memicu Carry. contoh
pertambahan yang melibatkan bilangan yang besar, seperti pada contoh dibawah
ini:
Contoh:
12345678h + 9ABCDEF0 = ......
Kedua operand di atas berukuran 4 byte. Jelas sudah melebihi kapasitas
register. Di sinilah dipakai mnemonic ADC.
Contoh:
MOV AX,1234h ; AX = 1234
MOV BX,9ABCh ; BX = 9ABC
MOV CX,5678h ; BX = 5678
MOV DX,0DEF0h ; DX = DEF0
ADD CX,DX ; CX = 3568 CF = 1
ADC AX,BX ; AX = AX+BX+CF = ACF1
Hasil penjumlahan tertampung di AX:CX yaitu ACF13568h.
Mnemonic : ADD
Tersedia pada : 8088 keatas
Syntax : ADD Tujuan,Sumber
Pengaruh flag : OF, SF, ZF, AF, PF, CF
Fungsi : Menambahkan "Sumber" dan "Tujuan" lalu hasilnya disimpan
pada "Tujuan". Bila hasil penjumlahan tidak tertampung seluruhnya pada
(205)
"Tujuan", maka CF akan diset 1.
Contoh:
ADD AX,BX ; Jumlahkan 2 register
ADD AL,[350] ; Jumlahkan register dengan isi memori
ADD [350],AL ; Jumlahkan isi memory dengan register
ADD AH,10h ; Jumlahkan register dengan immediate
ADD [350],10h ; Jumlahkan isi memori dengan immediate
Mnemonic : AND
Tersedia pada : 8088 keatas
Syntax : AND Tujuan,Sumber
Pengaruh flag : OF, SF, ZF, PF, CF
Fungsi : Melakukan logika AND antara "Tujuan" dan "Sumber". Hasil dari
operasi AND diletakkan pada "Tujuan". Instruksi AND biasanya dipakai untuk
melihat kondisi suatu bit dengan menolkan bit-bit lainnya.
Contoh:
AND AL,00001000b ; AL=0000?000
JZ Nol ; bila bit ketiga AL=0, maka lompat
Mnemonic : BOUND (Check Bounds Of Array Index)
Tersedia pada : 8088 keatas
Syntax : BOUND Tujuan,Sumber
Pengaruh flag : Tidak ada
Fungsi : Untuk memastikan bahwa index array bertanda negatif atau
positif masih masuk dalam batas limit yang didiartikan oleh Double Word blok
memory.
Mnemonic : CALL
Tersedia pada : 8088 keatas
Syntax : CALL nama-procedure
Pengaruh flag : Tidak ada
Fungsi : Melompat dan mengerjakan intruksi pada procedure program .
Pada saat instruksi Call diberikan, maka processor akan melakukan :
- PUSH CS ke stack bila procedure yang dipanggil bertipe Far.
- PUSH IP ke stack.
- Mengganti nilai CS dengan segmen dari procedure bila procedure
itu bertipe Far.
- Mengganti nilai IP dengan offset dari procedure. Lakukan
intruksi yang ada pada alamat baru(CS:IP) sampai bertemu
dengan intruksi RET, sesudah itu:
- POP IP
- POP CS bila procedure bertipe Far.
- Kembali ke program induk/pemanggil.
Contoh:
1CFE:0125 CALL N_PROC ; Push IP(=0128) ke stack, IP=1066
1CFE:0128 .......
1CFE:0155 CALL F_PROC ; Push CS(=1CFE)&IP(=0160) ke stack
; CS=1FFF,IP=0179
1CFE:0160 .......
1CFE:1066 N_PROC PROC NEAR
.......
.......
RET ; Pop IP(=0128)
N_PROC ENDP
1FFF:0179 F_PROC PROC FAR
.......
.......
RET ; Pop IP(=0160) & CS(=1CFE)
F_PROC ENDP
Mnemonic : CBW (Convert Byte To Word)
Tersedia pada : 8088 keatas
Syntax : CBW
Fungsi : Mengubah isi register AL menjadi AX dengan mengubah isi
register AH menjadi 0 bila AL benilai positif atau AH akan bernilai FF bila AL
negatif.
Contoh:
MOV AL,FFh
MOV BX,123Fh
CBW ; AX = FFFF
ADD AX,BX ; AX = 123F + (-1) = 123E
Pada bilangan bertanda , angka FFh pada AL yaitu -1 bagi Assembler
bukannya 255 desimal.
Mnemonic : CLC (Clear Carry Flag)
Tersedia pada : 8088 keatas
Syntax : CLC
Pengaruh flag : CF
Fungsi : Membuat carry flag menjadi 0.
Contoh:
Untuk menjaga agar dalam operasi RCR, rotasi pertamanya yang masuk
yaitu 0 maka dipakai CLC dahulu.
CLC
RCR AX,1
Mnemonic : CLD (Clear Direction Flag)
Tersedia pada : 8088 keatas
Syntax : CLD
Pengaruh flag : DF
Fungsi : Membuat direction flag berisi 0. Bila direction flag berisi 0
maka pembacaan string akan berlangsung dari memory rendah ke tinggi.
Sebaliknya bila direction flag bernilai 1 maka string akan diproses dari
memory tinggi ke rendah.
Contoh:
CLD ; Arah Operasi string ke kanan
MOV CX,0Fh ; Bandingkan 16 byte dari string
REPE CMPSB ; sampai ada satu yang tidak sama
Mnemonic : CLI (Clear Interrupt Flag)
Tersedia pada : 8088 keatas
Syntax : CLI
Pengaruh flag : IF
Fungsi : Membuat interrupt flag menjadi 0. Bila IF berisi 0 maka semua
interupsi akan diabaikan oleh komputer, kecuali Nonmaskable Interrupt(NMI).
biasanya CLI diberikan pada saat akan dilakukan proses yang fatal, yang mana
terjadinya interupsi akan menghancurkan proses itu .
Contoh:
pelajar akan mengubah alamat sebuah stack, dengan mengubah SS dan SP.
Selama SS dan SP diubah, interupsi tidak boleh terjadi. ini disebab kan
pada saat terjadi interupsi, register CS, IP dan Flags disimpan pada stack
sebagai alamat kembali nantinya.
MOV AX,AlmStack
MOV DX,AlmOffset
CLI
MOV SP,DX
MOV SS,AX
STI
Mnemonic : CMC (Complement Carry Flag)
Tersedia pada : 8088 keatas
Syntax : CMC
Pengaruh flag : CF
Fungsi : Mengubah Carry flag menjadi kebalikan dari isi semulanya,
seperti dari 0 menjadi 1 dan sebaliknya.
Contoh:
Pada kebanyakan operasi, Carry flag dijadikan sebagai tanda berhasil
atau tidaknya operasi itu . Biasanya Carry flag akan bernilai 0 bila
operasi berhasil dan bernilai 1 bila operasi mengalami kegagalan. Dengan
memakai perintah CMC ditambah dengan ADC(pertambahan dengan carry flag),
kita dapat memanfaatkannya untuk menghitung banyaknya keberhasilan operasi
yang dilakukan, seperti:
MOV CX,Counter
XOR AX,AX
Ulang:
PUSH AX
Operasi
POP AX
CMC
ADC AX,0
LOOP Ulang
Pada hasil akhir dari proses ini register AX akan berisi banyaknya
operasi yang berhasil dilakukan.
Mnemonic : CMP (Compare)
Tersedia pada : 8088 keatas
Syntax : CMP operand1,operand2
Pengaruh flag : OF, SF, ZF, AF, PF, CF
Fungsi : Membandingkan "operand1" dengan "operand2". sedang cara yang
dilakukan yaitu dengan mengurangkan "operand1" dengan "operand2" (operand1-
operand2). "Operand1" dan "operand2" yang dibandingkan harus memiliki tipe
data yang sama, seperti byte dengan byte (AL,AH,BL,BH,..) atau word dengan
word (AX,BX,CX,..). Perintah CMP hanya mempengaruhi flags register tanpa
merubah isi "operand1" dan "operand2".
Contoh:
Ulang:
CMP CX,AX
JE Exit
LOOP Ulang
Mnemonic : CMPSB (Compare Strings Byte)
Tersedia pada : 8088 keatas
Syntax : CMPSB
Pengaruh flag : OF, SF, ZF, AF, PF, CF
Fungsi : Untuk membandingkan satu byte pada alamat DS:SI dengan ES:DI.
bila direction flag bernilai 1 maka setiap selesai perbandingan register SI
dan DI akan ditambah dengan 1, sebaliknya bila direction flag bernilai 0 maka
setiap selesai perbandingan register SI dan DI akan dikurang dengan 1.
Mnemonic : CMPSW (Compare Strings Word)
Tersedia pada : 8088 keatas
Syntax : CMPSW
Pengaruh flag : OF, SF, ZF, AF, PF, CF
Fungsi : Untuk membandingkan satu word pada alamat DS:SI dengan ES:DI.
bila direction flag bernilai 1 maka setiap selesai perbandingan register SI
dan DI akan ditambah dengan 2, sebaliknya bila direction flag bernilai 0 maka
setiap selesai perbandingan register SI dan DI akan dikurang dengan 2.
Mnemonic : CWD (Convert Word To Doubleword)
Tersedia pada : 8088 keatas
Syntax : CWD
Pengaruh flag : Tidak ada
Fungsi : Mengubah tipe word(AX) menjadi double word(DX). Bila AX
positif maka DX akan berisi 0000, bila AX negatif maka DX berisi FFFF.
Contoh:
kita dapat memanfaatkan fungsi CWD ini untuk memperoleh bilangan
absolute.
Absolut MACRO Bil
MOV
TEST AX,10000000b ; Apakah AX negatif?
JZ Selesai ; Ya, selesai
CWD ;
XOR AX,DX ; Jadikan positif
SUB AX,DX ;
Selesai:
ENDM
Mnemonic : DAA (Decimal Adjust After Addition)
Tersedian pada : 8088 keatas
Syntax : DAA
Pengaruh flag : OF, SF, ZF, AF, PF, CF
Fungsi : Mengubah hasil penjumlahan 2 bilangan bukan BCD pada register
AL menjadi bentuk BCD. bila 4 bit rendah dari AL lebih besar dari 9 maka AL
akan dikurangi dengan 10 dan AF diset menjadi 1, sebaliknya bila 4 bit rendah
AL lebih kecil atau sama dengan 9 maka AF akan dijadikan 0. DAA sebetulnya
yaitu sama dengan AAA kecuali dalam hal bahwa DAA dapat mengatur baik
bilangan 8 bit atau 4 bit pada AL, sementara AAA hanya 4 bit.
Contoh:
Bilangan BCD : 27h + 45h = ...
MOV AH,45h
MOV AL,27h
ADD AL,AH ; AL = 6C
DAA ; AL = 72
Mnemonic : DAS (Decimal Adjust After Substraction)
Tersedia pada : 8088 keatas
Syntax : DAS
Pengaruh flag : OF, SF, ZF, AF, PF, CF
Fungsi : Mengubah hasil pengurangan 2 bilangan pada AL menjadi bentuk
BCD. bila 4 bit rendah dari AL lebih besar dari 9 maka AL akan dikurangi
dengan 6 dan AF diset menjadi 1, sebaliknya bila 4 bit rendah dari AL lebih
kecil atau sama dengan 9 maka AF akan dijadikan 0.
Contoh:
Bilangan BCD: 50h - 23h = ...
MOV AX,50h
SUB AX,23h ; AX = 002D
DAS ; AX = 0027
Mnemonic : DEC (Decrement)
Tersedia pada : 8088 keatas
Syntax : DEC Tujuan
Pengaruh flag : OF, SF, ZF, AF, PF
Fungsi : Untuk mengurangi "Tujuan" dengan 1. "Tujuan" dapat berupa
register 8 bit, 16 bit, 32 bit atau memory. Bila kita ingin mengurangi suatu
register ataupun memory dengan 1, pakai lah perintah DEC ini sebab selain
lebih cepat, perintah DEC juga memakai memory lebih sedikit dibandingkan
dengan perintah SUB.
Contoh:
pelajar dapat mengimplementasikan perintah Loop dengan memakai DEC. Di
bawah ini pelajar akan menjumlahkan bilangan BX sampai 1. contoh bila BX = 5
maka dijumlahkan 5+4+3+2+1 = ....
XOR AX,AX
Loop1 :
ADD AX,BX
DEC BX
CMP BX,0
JNZ Loop1
Mnemonic : DIV (Divide)
Tersedia pada : 8088 keatas
Syntax : DIV Sumber
Pengaruh flag : OF, SF, ZF, AF, PF, CF
Fungsi : Bila "sumber" bertipe 8 bit maka dilakukan pembagian AX
dengan "Sumber" (AX / Sumber). Hasil pembagian akan disimpan pada register AL
sedang sisa pembagian akan disimpan pada regiser AH.
bila "sumber" bertipe 16 bit maka dilakukan pembagian DX:AX dengan "Sumber"
(DX:AX / Sumber). Hasil pembagian akan disimpan pada register AX sedang
sisa pembagian akan disimpan pada regiser DX.
Contoh:
Untuk memeriksa apakah suatu bilangan yaitu kelipatan 3 atau bukan,
kita bisa membaginya dengan tiga. Bila yaitu kelipatan 3, maka sisa
pembagian akan 0, sebaliknya bila bukan kelipatan tiga, sisa pembagian tidak
akan 0. Macro ini akan menjadikan AL=1 bila bilangan yang ditest yaitu
kelipatan tiga dan sebaliknya akan bernilai 0.
Lipat3 MACRO Bil
MOV AX,Bil
MOV BX,3
DIV BX
CMP AX,0 ; Apakah ada sisa pembagian ?
JE Tiga ; Tidak ada sisa , kelipatan 3
MOV AL,0
Tiga :
MOV AL,1
ENDM
Mnemonic : ENTER (Make Stack Frame)
Tersedia pada : 8088 keatas
Syntax : Enter Operand1,operand2
pengaruh flag : Tidak ada
Fungsi : Untuk memesan tempat pada stack yang dibutuhkan oleh bahasa
tingkat tinggi.
Mnemonic :ESC (Escape)
Tersedia pada : 8088 keatas
Syntax : ESC Operand1,Operand2
Pengaruh flag : Tidak ada
Fungsi : Perintah ini dipakai terutama pada komputer yang memiliki
procesor lebih dari satu dan dirangkai secara paralel. Perintah ESC akan
memicu procesor yang sedang aktif dinonaktifkan sehingga procesor yang
lain dapat dipakai .
Mnemonic : HLT (Halt)
Tersedia pada : 8088 keatas
Syntax : HLT
Pengaruh flag : Tidak ada
Fungsi : Untuk menghentikan program atau membuat procesor dalam
keadaan tidak aktif. Sesudah memperoleh perintah ESC ini, procesor harus
memperoleh interrupt dari luar atau direset untuk berjalan secara normal
kembali.
Mnemonic : IDIV (Signed Divide)
Tersedia pada : 8088 keatas
Syntax : IDIV Sumber
Pengaruh flag : OF, SF, ZF, AF, PF, CF
Fungsi : IDIV dipakai untuk pembagian pada bilangan bertanda . Bila
"sumber" bertipe 8 bit maka dilakukan pembagian AX dengan "Sumber" (AX /
Sumber). Hasil pembagian akan disimpan pada register AL sedang sisa
pembagian akan disimpan pada regiser AH.
bila sumber bertipe 16 bit maka dilakukan pembagian DX:AX dengan Sumber(DX:AX
/ Sumber). Hasil pembagian akan disimpan pada register AX sedang sisa
pembagian akan disimpan pada regiser DX.
Contoh:
MOV BL,10h
MOV AX,-10h
IDIV BL ; AX = 00FFh(-1)
Mnemonic : IMUL (Signed Multiply)
Tersedia pada : 8088 keatas
Syntax : IMUL Sumber
Khusus 80386:
IMUL Tujuan,Sumber
IMUL Tujuan,Pengali,Sumber
Pengaruh flag : OF, SF, ZF, AF, PF, CF
Fungsi : IMUL dipakai untuk perkalian pada bilangan bertanda . Bila
"sumber" bertipe 8 bit maka akan dilakukan perkalian pada register AL dengan
"sumber" lalu hasilnya disimpan pada AX. Bila "sumber" bertipe 16 bit maka
akan dilakukan perkalian pada register AX dengan "sumber" lalu hasilnya
disimpan pada DX:AX.
Contoh:
MOV AX,100h ; AX=100h
MOV BX,-2 ; BX=FFFEh
IMUL BX ; DX=FFFFh, AX=FE00h
Mnemonic : IN (Input From Port)
Tersedia pada : 8088 keatas
Syntax : IN Operand,NoPort
Pengaruh flag : Tidak ada
Fungsi : Untuk mengambil data pada port. bila "Operand" yaitu
register AL maka akan diambil data pada port sebanyak 1 byte, bila "operand"
yaitu register AX maka akan diambil data pada port sebanyak 1 word.
"NoPort" mencatat nomor port yang akan dibaca datanya. "NoPort" bisa langsung
diberi nilai bila nomor port dibawah 255. Bila nomor port melebihi 255 maka
"NoPort" harus berupa register DX yang mencatat nomor port itu .
Contoh:
Interrupt dari keyboard diatur oleh PIC(program mable Interrupt
Controller) yang berada pada port 21h. bila bit ke 1 dari port 21h bernilai 1,
maka interupsi dari keyboard akan diabaikan.
NoKey MACRO
IN AL,21h
OR AL,00000010b
OUT 21h,AL
ENDM
Mnemonic : INC (Increment)
Tersedia pada : 8088 keatas
Syntax : INC Tujuan
Pengaruh flag : OF, SF, ZF, AF, PF
Fungsi : Untuk menambah "Tujuan" dengan 1. Bila kita ingin menambah
suatu register ataupun memory dengan 1, pakai lah perintah INC ini sebab
selain lebih cepat, perintah INC juga memakai memory lebih sedikit
dibandingkan dengan perintah ADD.
Contoh:
Untuk membuat suatu pengulangan, seperti pada perintah 'FOR I:=1 TO 10
DO' pada bahasa tingkat tinggi:
XOR AX,AX
Ulang:
CMP AX,10
JE Selesai
INC AX
JMP Ulang
Mnemonic : INS (Input From Port To String)
Tersedia pada : 8088 keatas
Syntax : INS Operand,NoPort
Pengaruh flag : Tidak ada
Fungsi : Untuk mengambil data dari "NoPort" yang dicatat oleh register
DX sebanyak 1 byte atau 1 word, sesuai dengan tipe "operand". Jadi "operand"
hanya berfungsi sebagai penunjuk besarnya data yang akan dibaca dari port.
Data yang diambil dari port akan disimpan pada lokasi ES:DI.
bila Direction flag bernilai 0(dengan CLD) maka sesudah intruksi INS
dijalankan register DI akan ditambah secara otomatis, sebaliknya bila
Direction flag bernilai 1(dengan STD) maka register DI akan dikurang secara
otomatis. kita bisa memakai intruksi pengulangan pada string ditambah
dengan perintah INS ini.
Contoh:
MOV DX,123h
MOV CX,30
Ulang:
INS AX,DX
LOOP Ulang
Mnemonic : INSB ( Input String Byte From Port)
Tersedia pada : 8088 keatas
Syntax : INSB
Pengaruh flag : Tidak ada
Fungsi : Untuk mengambil data dari nomor port yang dicatat oleh
register DX sebanyak 1 byte. Data yang diambil dari port akan disimpan pada
lokasi ES:DI.
bila Direction flag bernilai 0(dengan CLD) maka sesudah intruksi INS
dijalankan register DI akan ditambah dengan 1 secara otomatis, sebaliknya bila
Direction flag bernilai 1(dengan STD) maka register DI akan dikurang dengan 1
secara otomatis. kita bisa memakai intruksi pengulangan pada string
ditambah dengan perintah INSB ini.
Contoh:
REP INSB
Mnemonic : INSW
Tersedia pada : 8088 keatas
Syntax : INSW
Pengaruh Flag : Tidak ada
Fungsi : Untuk mengambil data dari nomor port yang dicatat oleh
register DX sebanyak 1 Word. Data yang diambil dari port akan disimpan pada
lokasi ES:DI.
bila Direction flag bernilai 0(dengan CLD) maka sesudah intruksi INS
dijalankan register DI akan ditambah dengan 2 secara otomatis, sebaliknya bila
Direction flag bernilai 1(dengan STD) maka register DI akan dikurang dengan 2
secara otomatis. kita bisa memakai intruksi pengulangan pada string
ditambah dengan perintah INSW ini.
Contoh:
REP INSW
Mnemonic : INT (Interrupt)
Tersedia pada : 8088 keatas
Syntax : INT NoInt
Pengaruh flag : IF, TF
Fungsi : Untuk membangkitkan perangkat lunak interrupt yang bernomor 0 sampai
255. Setiap terjadi suatu interupsi data flags, CS dan IP akan disimpan pada
stack. Data ini selanjutmya dipakai sebagai alamat kembali sesudah komputer
melakukan suatu rutin atau interrupt handler.
Mnemonic : INTO (Interrupt If Overflow)
Tersedia pada : 8088 keatas
Syntax : INTO
Pengaruh Flag : Tidak ada
Fungsi : bila Overflow flag bernilai 1, maka INTO akan melakukan
interrupt 04h, sebaliknya bila Overflow flag bernilai 0 maka interrupt 04h
tidak akan dilakukan . INTO hampir sama dengan INT hanya INTO khusus untuk
membangkitkan interrupt 04h bila OF=1.
Mnemonic : IRET (Interrupt Return)
Tersedia pada : 8088 keatas
Syntax : IRET
Pengaruh Flag : OF, DF, IF, TF, SF, ZF, AF, PF, CF
Fungsi : dipakai untuk mengakhiri suatu interrupt handler. IRET akan
mengambil IP, CS dan Flags yang disimpan pada stack pada saat terjadi suatu
interupsi(INT).
Mnemonic : JA (Jump If Above)
Tersedia pada : 8088 keatas
Syntax : JA Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Melakukan suatu loncatan menuju "tujuan" bila CF=0 dan ZF=0.
"Tujuan" dapat berupa nama label ataupun alamat memory. Pada lompatan
bersyarat ini, besarnya lompatan tidak bisa melebihi -128 dan +127 byte
kecuali pada 80386 yang mampu mencapai -32768 dan +32767. JA identik dengan
perintah JNBE yang biasanya dipakai sesudah dilakukan suatu perbandingan
dengan CMP.
Catatan : JA dan JNBE melakukan operasi pada bilangan tidak bertanda .
Contoh:
CMP AX,BX
JA Besar
Pada perintah diatas, loncatan menuju label "besar" akan dilakukan bila
pada perintah CMP diatasnya register AX lebih besar dari register BX. Perintah
JA beroperasi pada bilangan tidak bertanda atau bilangan yang tidak mengenal
tanda minus.
Mnemonic : JAE (Jump If Above or Equal)
Tersedia pada : 8088 keatas
Syntax : JAE Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Melakukan suatu loncatan menuju "tujuan" bila CF=0. "Tujuan"
dapat berupa nama label ataupun alamat memory. Pada lompatan bersyarat ini,
besarnya lompatan tidak bisa melebihi -128 dan +127 byte. JAE identik dengan
perintah JNB yang biasanya dipakai sesudah dilakukan suatu perbandingan
dengan CMP.
Catatan : JAE dan JNB melakukan operasi pada bilangan tidak bertanda .
Contoh:
CMP AX,BX
JAE BesarSama
Pada perintah diatas, loncatan menuju label "BesarSama" akan dilakukan
bila pada perintah CMP diatasnya register AX lebih besar atau sama dengan
register BX. Perintah JAE beroperasi pada bilangan tidak bertanda atau
bilangan yang tidak mengenal tanda minus.
Mnemonic : JB (Jump If Bellow)
Tersedia pada : 8088 keatas
Syntax : JB Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Melakukan suatu loncatan menuju "tujuan" bila CF=1. "Tujuan"
dapat berupa nama label ataupun alamat memory. Pada lompatan bersyarat ini,
besarnya lompatan tidak bisa melebihi -128 dan +127 byte. JB identik dengan
perintah JNAE dan JC .
Catatan : JB dan JNAE melakukan operasi pada bilangan tidak bertanda .
Contoh:
CMP AX,BX
JB Kecil
Pada perintah diatas, loncatan menuju label "Kecil" akan dilakukan bila
pada perintah CMP diatasnya register AX lebih kecil dibandingkan dengan
register BX.
Mnemonic : JBE (Jump If Below or Equal)
Tersedia pada : 8088 keatas