1. Karakteristik perintah bahasa assembler
Karakteristik perintah bahasa assembler :
LabelLabel bisa anda definisikan dengan ketentuan akhir dari nama label tersebut harus berupa tanda titik dua (:). Pemberian nama label bisa digunakan:
- Huruf : A..Z (Huruf besar dan kecil tidak dibedakan)
- Angka : 0..9
- Karakter khusus : @ . _ $
Nama pada label tidak terdapat spasi dan didahului oleh angka, Contoh dari penulisan label yang benar: mulai: MOV CX,7. Nama label terpanjang yang dapat dikenali oleh assembler adalah 31 karakter.
KomentarUntuk memberikan komentar pada source file digunakan tanda ';'. Apapun yang dtuliskan dibelakang tanda ';' akan dianggap sebagai komentar, Contoh : mulai: MOV BX,7 ; berikan nilai 7 pada BX
Perintah MOVPerintah MOV digunakan untuk mengcopy nilai atau angka menuju suatu register,variabel atau memory. Adapun syntax untuk perintah MOV ini adalah :
MOV Tujuan,Asal
Sebagai contohnya : MOV AL,9 ; masukkan nilai 9 pada AL.
MOV AH,AL ; nilai AL=9 dan AH=9
MOV AX,9 ; AX=AH+AL hingga AH=0 dan AL:=9
Pada baris pertama(MOV AL,9), kita memberikan nilai 9 pada register AL. Kemudian pada baris kedua(MOV AH,AL) kita mengcopykan nilai register AL untuk AH. Jadi setelah operasi ini register AL akan tetap bernilai 9, dan register AH akan sama nilainya dengan AL atau 9. Pada baris ketiga(MOV AX,9), kita memberikan register AX nilai 9. Karena AX terdiri atas AH dan AL, maka register AH akan bernilai 0, sedangkan AL akan bernilai 9.
Perintah MOV akan mengcopykan nilai pada sumber untuk dimasukan ke Tujuan, nilai sumber tidaklah berubah. Inilah sebabnya MOV(E) akan kita terjemahkan disini dengan mengcopy, dan bukannya memindahkan.
Perintah INT
Didalam pemrograman assambler, kita akan banyak sekali menggunakan interupsi untuk membantu kita dalam mengerjakan suatu pekerjaan. Untuk menghasilkan suatu interupsi digunakan perintah INT dengan syntax:
INT NoInt
Dengan NoInt adalah nomor interupsi yang ingin dihasilkan. Sebagai contohnya bila kita ingin menghasilkan interupsi 21h, bisa dituliskan dengan: INT 21h, maka interupsi 21h akan segera terjadi.
Jenis operandInstruksi mesin melakukan operasi terhadap data. Pada umumnya data dikategorikan ke dalam angka, karakter dan data logika.
AngkaSetiap bahasa mesin mengandung tipe data numerik. Umunya terdapat tiga tipe data angka yang ada pada komputer yaitu:
1. Binary integer
2. Binary floating point
3. Desimal
Semua operasi pada internal komputer berupa data biner, namun user berinteraksi dengan bilangan desimal. Maka perlu dilakukan konversi dari desimal ke bilangan biner pada input dan konversi dari biner ke desmimal pada output. Bilangan desimal direpresentasikan dalam 4 bit kode biner maka 0=0000, 1=0001,...,8=1000, 9=1001. Sedangkan untuk desimal 246 = 0000 0010 0100 0110. Untuk bilangan negatif direpresentasikan dengan 4 bit yang diletakkan pada awal atau akhir string. Standar tanda yang digunakan adalah 1100 untuk bilangan positif dan 1101 untuk tanda bilangan negatif.
KarakterUmumnya bentuk data adalah teks atau kumpulan karakter. Sedangkan sistem komputer didesain untuk data biner. Maka sejumlah kode dalam urutan bit perlu di tentukan untuk merepresentasikan sebuah karakter. Saat ini standar kode yang digunakan untuk merepresentasikan karakter adalah American Standart Code for Information Interchange (ASCII). Setiap karakter pada kode ASCII direpresentasikan dengan 7 bit biner yang unik. Maka terdapat 128 karakter yang berbeda yang dapat direpresentasikan. Selain itu juga ada yang menggunakan Extended Binary Coded Decimal Interchange Code (EBCDIC) yang digunakan oleh IBM mainframe.
Data logikaPada umumnya setiap word atau yang lain merupakan satu unit data yang masing masing unit data memiliki nilai 0 atau 1. Ketika dipandang dengan cara ini, maka data tersebut dianggap sebagai data logika. Data logika hanya bernilai true “1” atau false “0”.
Jenis OperasiJumlah opcode dari sebuah mesin ke mesin lain beragam. Akan tetapi tipe operasi-operasi umum akan sama untuk semua mesin. Berikut dikategorikan operasi berdasarkan fungsi dan tipenya:
Transfer dataTipe instruksi mesin yang paling dasar yaitu instruksi transfer data. Pada instruksi transfer dataharus ditentukan beberapa hal. Pertama, penentuan lokasi sumber dan tujuan dari operan.Lokasinya dapat terletak di memori, register atau stack. Kedua, panjang data yang akan ditransfer harus diketahui. Ketiga, sama untuk semua instruksi dengan operan, cara pengalamatannya harus ditentukan.
Dari sisi aksi prosesor, operasi transfer data mungkin merupakan tipe yang paling sederhana. Jika kedua-duanya baik sumber maupun tujuan adalah register, maka prosesor hanya menyebabkan data dipindahkan dari satu register ke register lain (operasi internal prosesor). Jika salah satu atau kedua operan berada dalam memori, maka prosesor harus melakukan beberapa atau semua tindakan berikut:
1. Menghitung alamat memori, berdasarkan mode pengalamatan ( dibahas di bagian selanjutnya)
2. Jika alamat mengacu pada virtual memori, menerjemahkan dari alamat memori virtual ke alamat memori sebenarnya/fisik.
3. Menentukan apakah operan yang dituju ada di dalam chace
4. Jika tidak, berikan perintah ke modul memori.
AritmatikaKebanyakan mesin menyediakan operasi aritmatika / perhitungan dasar sepertitambah, kurang,kali dan bagi. Dimana operasi tersebut disediakan untuk menangani bilanganinteger bertanda (fixed-point), juga bilangan floating point atau desimal. Berikut contoh lain operasi yang termasuk jenis instruksi dengan satu operan:
· Absolute : mengambil nilai absolut/mutlak dari operan
· Negate : menegasikan operan
· Increment: menambahkan 1 nilai ke operan
· Decrement: mengurangi 1 nilai dari operan
Eksekusi instruksi aritmatika dapat melibatkan operasi transfer data untuk menempatkan operan dari input ke ALU, dan untuk mengantarkan output dari ALU.
LogikaKebanyakan mesin juga menyediakan berbagai operasi untuk memanipulasi setiap bit dari sebuah word atau unit (yang dapat diberi alamat) lainnya, operasi ini juga di sebut "bit twiddling". Bit-bit tersebut didasarkan pada operasi boolean.
Konversi
Instruksi konversi adalah instruksi-instruksi yang mengubah format atau beroperasi pada format data.Contohnya yaitu mengkonversi dari desimal ke biner.
Input/OutputSeperti yang kita ketahui, ada beberapa pendekatan I/O yang bisa diambil, diantaranya programmed I/O (isolated&memory mapped), DMA, dan penggunaan prosesor I/O. Implementasi instruksi I/O banyak dilakukan dengan hanya menyediakan beberapa instruksi I/O, dengan tindakan spesifik yang ditentukan oleh parameter, kode, atau kata perintah.
Kendali SistemInstruksi kendali sistem adalah instruksi yang dapat dieksekusi hanya ketika prosesor dalam keadaan tertentu atau mengeksekusi program pada area khusus dalam memori.Biasanya, instruksi ini dipesan untuk digunakan sistem operasi.Berikut beberapa contoh operasi kendali sistem. Sebuah instruksi kendali sistem boleh membaca atau mengubah kendali register. Contoh lainnya adalah instruksi untuk membaca atau memodifikasi penyimpanan protection key, seperti yang digunakan pada sistem memori EAS/390. Contoh lain adalah akses untuk memproses blok kontrol dalam sistem multiprogramming.
Kendali TransferUntuk semua tipe operasi yang sudah dibahas sejauh ini, instruksi selanjutnya yang akan dibahas tepat setelah ini, pada memori, adalah kendali transfer. Namun, pecahan yang signifikan dari instruksi dalam setiap program memiliki fungsi mengubah urutan eksekusi instruksi. Untuk instruksi ini, operasi yang dilakukan oleh prosesor
Beberapa hal yang perlu diperhatikan yaitu:
1. Dalam praktek penggunaan komputer, sebenarnya kita mengeksekusi tiap instruksi lebih dari sekali dan mungkin ribuan kali. Ini membutuhkan ribuan atau bahkan jutaan instruksi untuk mengimplementasikan aplikasi. Hal ini tidak mungkin jika tiap instruksi harus ditulis secara terpisah. Jika tabel atau daftar item akan diproses, dibutuhkan program looping. Satu urutan eksekusi akan dieksekusi berulang kali untuk memproses semua data.
2. Hampir semua program melibatkan beberapa pembuatan keputusan. Kita setuju komputer akan melakukan sesuatu jika suatu kondisi terpenuhi, dan melakukan hal lain jika dalam kondisi lain. Sebagai contoh, sebuah urutan instruksi mengitung akar kuadrat dari sebuh nilai. Pada awal urutan, tanda dari nilai tersebut diuji. Jika negatif, komputasi tidah dilakukan, tetapi kondisi eror yang akan dilaporkan.
3. Untuk mengubah dengan benar program yang besar atu sedang adalah tugas yang sangat sulit. Hal ini akan lebih mudah jika ada mekanisme untuk memecah tugas-tugas tersebut menjadi bagian-bagian kecil yang dapat dikerjakan sekali dalam satu waktu.
Bentuk perintah/intruksi :
MOV
Perintah MOV adalah perintah untuk mengisi, memindahkan,memperbaruhi isi suatu register, variable ataupun lokasi memory, Adapun tata penulisan perintah MOV adalah :
MOV [operand A], [Operand B]
Contoh :
MOV AH,02
Operand A adalah Register AH
Operand B adalah bilangan 02
Hal yang dilakukan oleh komputer untuk perintah diatas adalahmemasukan 02 ke register AH.
INT (Interrupt)
Bila anda pernah belajar BASIC, maka pasti anda tidak asing lagi dengan perintah GOSUB. Perintah INT juga mempunyai cara kerja yang sama dengan GOSUB, hanya saja subroutine yang dipanggil telah disediakan oleh memory komputer yang terdiri 2 jenis yaitu :
- Bios Interrupt ( interput yang disediakan oleh BIOS (INT 0 – INT 1F))
- Dos Interrupt ( Interrupt yang disediakan oleh DOS (INT 1F – keatas))
Push
Adalah perintah untuk memasukan isi register pada stack, dengan tata penulisannya:POP [operand 16 bit]
Pop
perintah yang berguna untuk mengeluarkan isi dari register/variable dari stack,dengan tata penulisannya adalah : POP [operand 16 bit]
RIP (Register IP)
Perintah ini digunakan untuk memberitahu komputer untuk memulai memproses program dari titik tertentu.
A (Assembler)
Perintah Assembler berguna untuk tempat menulis program Assembler.
-A100
0FD8:100
RCX (Register CX)
Perintah ini digunakan untuk mengetahui dan memperbaruhi isi register CX yang merupakantempat penampungan panjang program yang sedang aktif.
2. Tipe-tipe Operand dan Operasi
Tipe-tipe OperandOperand adalah sebuah objek yang ada pada operasi matematika yang dapat digunakan untuk melakukan operasi. Operand atau operator dalam bahasa C berbentuk simbol bukan berbentuk keyword atau kata yang biasa ada di bahasa pemrograman lain. Simbol yang digunakan bukan karakter yang ada dalam abjad tapi ada pada keyboard kita seperti =,,* dan sebagainya.
Tipe-tipe operand diantaranya :
1. Addresses (akan dibahas pada addressing modes)
2. Numbers :
– Integer or fixed point
– Floating point
– Decimal (BCD)
3. Characters :
– ASCII
– EBCDIC
4. Logical Data : Bila data berbentuk binary: 0 dan 1
Jenis-jenis operator adalah sebagai berikut :
1. Operator Aritmetika
Operator untuk melakukan fungsi aritmetika seperti : +(penjumlahan), – (mengurangkan), * (mengalikan), / (membagi).
2. Operator relational
Operator untuk menyatakan relasi atau perbandingan antara dua operand, seperti > (lebih besr), =(lebih besar atau sama), <= (lebih kecil atau sama), == (sama), != (tidak sama).
3. Operator Logik
Operator untuk merelasikan operand secara logis seperti && (and), || (or), !(not).
Tipe-tipe Operasi
Dalam perancangan arsitektur komputer, jumlah kode operasi akan sangat berbeda untuk masing-masing komputer, tetapi terdapat kemiripan dalam jenis operasinya.
Jenis operasi komputer
-Transfer data – konversi
1. Menetapkan lokasi operand sumber dan operand tujuan.
2. Lokasi-lokasi tersebut dapat berupa memori, register atau bagian paling atas daripada stack.
3. Menetapkan panjang data yang dipindahkan.
4. Menetapkan mode pengalamatan.
-Aritmatika – input/output
Tindakan CPU untuk melakukan operasi arithmetic :
1. Transfer data sebelum atau sesudah.
2. Melakukan fungsi dalam ALU.
3. Menset kode-kode kondisi dan flag.
-Logika – kontrol sistem dan transfer kontrol
Tindakan CPU sama dengan arithmetic
Operasi set instruksi untuk operasi logical :
1. AND, OR, NOT, EXOR
2. COMPARE : melakukan perbandingan logika.
3. TEST : menguji kondisi tertentu.
4. SHIFT : operand menggeser ke kiri atau kanan menyebabkan
konstanta pada ujung bit.
5. ROTATE : operand menggeser ke kiri atau ke kanan dengan ujung yang terjalin.
3. 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 setelah 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. Setelah 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, dimana 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. Adapun cara yang dilakukan adalah mengalikan AH dengan 10 dan menambahkan isi AL dengan hasilkali AH. Hasil pertambahan tersebut akan diletakkan di register AL kemudian AH akan dinolkan.
Contoh:
Hexa dari BCD 53 adalah …
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. Adapun cara yang dilakukan adalah membagi AL dengan 10, kemudian 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. Jika 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 sedangkan 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 digunakan setelah operasi pada pertambahan atau perkalian yang menyebabkan Carry. Misalkan 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 digunakan 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” kemudian hasilnya disimpan pada “Tujuan”. Bila hasil penjumlahan tidak tertampung seluruhnya pada 204 “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 umumnya digunakan untuk melihat kondisi suatu bit dengan menolkan bit-bit lainnya.
Contoh:
AND AL,00001000b ; AL=0000?000
JZ Nol ; Jika 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 didefinisikan 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 tersebut bertipe Far.
– Mengganti nilai IP dengan offset dari procedure. Lakukan intruksi yang terdapat pada alamat baru(CS:IP) sampai bertemu dengan intruksi RET, setelah 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 adalah -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 adalah 0 maka digunakan 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). Umumnya CLI diberikan pada saat akan dilakukan proses yang fatal, dimana terjadinya interupsi akan menghancurkan proses tersebut.
Contoh:
Kita akan mengubah alamat sebuah stack, dengan mengubah SS dan SP. Selama SS dan SP diubah, interupsi tidak boleh terjadi. Hal ini dikarenakan 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 tersebut. Biasanya Carry flag akan bernilai 0 bila operasi berhasil dan bernilai 1 bila operasi mengalami kegagalan. Dengan menggunakan perintah CMC disertai dengan ADC(pertambahan dengan carry flag), anda 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”. Adapun cara yang dilakukan adalah dengan mengurangkan “operand1” dengan “operand2” (operand1- operand2). “Operand1” dan “operand2” yang dibandingkan harus mempunyai 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. 209 Jika direction flag bernilai 1 maka setiap selesai perbandingan register SI dan DI akan ditambah dengan 1, sebaliknya jika 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. Jika direction flag bernilai 1 maka setiap selesai perbandingan register SI dan DI akan ditambah dengan 2, sebaliknya jika 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:
Anda dapat memanfaatkan fungsi CWD ini untuk mendapatkan 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 210
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. Jika 4 bit rendah dari AL lebih besar dari 9 maka AL akan dikurangi dengan 10 dan AF diset menjadi 1, sebaliknya jika 4 bit rendah AL lebih kecil atau sama dengan 9 maka AF akan dijadikan 0. DAA sebenarnya adalah sama dengan AAA kecuali dalam hal bahwa DAA dapat mengatur baik bilangan 8 bit maupun 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. Jika 4 bit rendah dari AL lebih besar dari 9 maka AL akan dikurangi dengan 6 dan AF diset menjadi 1, sebaliknya jika 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 211
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 maupun memory. Bila anda ingin mengurangi suatu register ataupun memory dengan 1, gunakanlah perintah DEC ini karena selain lebih cepat, perintah DEC juga menggunakan memory lebih sedikit dibandingkan dengan perintah SUB.
Contoh:
Kita dapat mengimplementasikan perintah Loop dengan menggunakan DEC. Di bawah ini kita akan menjumlahkan bilangan BX sampai 1. Misalnya 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 sedangkan sisa pembagian akan disimpan pada regiser AH. Jika “sumber” bertipe 16 bit maka dilakukan pembagian DX:AX dengan “Sumber” (DX:AX / Sumber). Hasil pembagian akan disimpan pada register AX sedangkan sisa pembagian akan disimpan pada regiser DX.
Contoh:
Untuk memeriksa apakah suatu bilangan merupakan kelipatan 3 atau bukan, 212 anda bisa membaginya dengan tiga. Bila merupakan kelipatan 3, maka sisa pembagian akan 0, sebaliknya jika bukan kelipatan tiga, sisa pembagian tidak akan 0. Macro ini akan menjadikan AL=1 bila bilangan yang ditest merupakan 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 digunakan terutama pada komputer yang mempunyai procesor lebih dari satu dan dirangkai secara paralel. Perintah ESC akan menyebabkan procesor yang sedang aktif dinonaktifkan sehingga procesor yang lain dapat digunakan.
Mnemonic : HLT (Halt)
Tersedia pada : 8088 keatas
Syntax : HLT
Pengaruh flag : Tidak ada 213
Fungsi : Untuk menghentikan program atau membuat procesor dalam keadaan tidak aktif. Setelah mendapat perintah ESC ini, procesor harus mendapat 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 digunakan 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 sedangkan sisa pembagian akan disimpan pada regiser AH. Jika sumber bertipe 16 bit maka dilakukan pembagian DX:AX dengan Sumber(DX:AX / Sumber). Hasil pembagian akan disimpan pada register AX sedangkan 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 digunakan untuk perkalian pada bilangan bertanda. Bila “sumber” bertipe 8 bit maka akan dilakukan perkalian pada register AL dengan “sumber” kemudian hasilnya disimpan pada AX. Bila “sumber” bertipe 16 bit maka akan dilakukan perkalian pada register AX dengan “sumber” kemudian 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. Jika “Operand” merupakan register AL maka akan diambil data pada port sebanyak 1 byte, bila “operand” merupakan 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 tersebut.
Contoh:
Interrupt dari keyboard diatur oleh PIC(Programmable Interrupt Controller) yang berada pada port 21h. Jika 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 anda ingin menambah suatu register ataupun memory dengan 1, gunakanlah perintah INC ini karena selain lebih cepat, perintah INC juga menggunakan 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. Jika Direction flag bernilai 0(dengan CLD) maka setelah intruksi INS dijalankan register DI akan ditambah secara otomatis, sebaliknya jika Direction flag bernilai 1(dengan STD) maka register DI akan dikurang secara otomatis. Anda bisa menggunakan intruksi pengulangan pada string disertai 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 216
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. Jika Direction flag bernilai 0(dengan CLD) maka setelah intruksi INS dijalankan register DI akan ditambah dengan 1 secara otomatis, sebaliknya jika Direction flag bernilai 1(dengan STD) maka register DI akan dikurang dengan 1 secara otomatis. Anda bisa menggunakan intruksi pengulangan pada string disertai 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. Jika Direction flag bernilai 0(dengan CLD) maka setelah intruksi INS dijalankan register DI akan ditambah dengan 2 secara otomatis, sebaliknya jika Direction flag bernilai 1(dengan STD) maka register DI akan dikurang dengan 2 secara otomatis. Anda bisa menggunakan intruksi pengulangan pada string disertai dengan perintah INSW ini.
Contoh:
REP INSW
Mnemonic : INT (Interrupt)
Tersedia pada : 8088 keatas
Syntax : INT NoInt
Pengaruh flag : IF, TF
Fungsi : Untuk membangkitkan software interrupt yang bernomor 0 sampai 255. Setiap terjadi suatu interupsi data flags, CS dan IP akan disimpan pada 217 stack. Data ini selanjutmya digunakan sebagai alamat kembali setelah komputer melakukan suatu rutin atau interrupt handler.
Mnemonic : INTO (Interrupt If Overflow)
Tersedia pada : 8088 keatas
Syntax : INTO
Pengaruh Flag : Tidak ada
Fungsi : Jika Overflow flag bernilai 1, maka INTO akan melaksanakan interrupt 04h, sebaliknya jika Overflow flag bernilai 0 maka interrupt 04h tidak akan dilaksanakan. INTO hampir sama dengan INT hanya INTO khusus untuk membangkitkan interrupt 04h jika OF=1.
Mnemonic : IRET (Interrupt Return)
Tersedia pada : 8088 keatas
Syntax : IRET
Pengaruh Flag : OF, DF, IF, TF, SF, ZF, AF, PF, CF
Fungsi : Digunakan 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 digunakan setelah 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 digunakan setelah 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 219 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
Syntax : JBE Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Melakukan suatu loncatan menuju “tujuan” bila CF=1 atau ZF=1. “Tujuan” dapat berupa nama label ataupun alamat memory. Pada lompatan bersyarat ini, besarnya lompatan tidak bisa melebihi -128 dan +127 byte. JBE identik dengan perintah JNA. Catatan : JBE dan JNA melakukan operasi pada bilangan tidak bertanda.
Contoh:
CMP AX,BX
JBE KecilSama
Pada perintah diatas, loncatan menuju label “KecilSama” akan dilakukan bila pada perintah CMP diatasnya register AX lebih kecil atau sama dengan register BX.
Mnemonic : JC (Jump On Carry)
Tersedia pada : 8088 keatas
Syntax : JC Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Sama dengan JB dan JNAE.
Mnemonic : JCXZ (Jump If CX = 0)
Tersedia pada : 8088 keatas
Syntax : JCXZ Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Melakukan suatu loncatan menuju “tujuan” bila register CX=0. “Tujuan” dapat berupa nama label ataupun alamat memory. Pada lompatan bersyarat ini, besarnya lompatan tidak bisa melebihi -128 dan +127 byte.
Contoh:
MOV AH,00 ;
LEA DX,Buffer ; Masukan string dari keyboard
INT 21h ;
MOV CX,Buffer[1] ; CX = banyaknya masukan string
JCXZ Tdk ; Jika tidak ada, lompat ke “Tdk”
Mnemonic : JE (Jump Equal)
Tersedia pada : 8088 keatas
Syntax : JE Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Melakukan suatu loncatan menuju “Tujuan” bila ZF=1. “Tujuan” dapat berupa nama label ataupun alamat memory. Pada lompatan bersyarat ini, besarnya lompatan tidak bisa melebihi -128 dan +127 byte. JE identik dengan JZ.
Contoh:
CMP AX,BX
JE Sama
Pada perintah diatas, loncatan menuju label “Sama” akan dilakukan bila pada perintah CMP diatasnya register AX sama dengan register BX yang menyebabkan zero flag bernilai 1.
Mnemonic : JG (Jump If Greater)
Tersedia pada : 8088 keatas
Syntax : JG Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Melakukan suatu loncatan menuju “tujuan” bila ZF=0 dan SF=OF. “Tujuan” dapat berupa nama label ataupun alamat memory. Pada lompatan bersyarat ini, besarnya lompatan tidak bisa melebihi -128 dan +127 byte. JG identik dengan perintah JNLE. Catatan : JG dan JNLE melakukan operasi pada bilangan bertanda.
Contoh:
CMP AX,BX
JG Besar
Pada perintah diatas, loncatan menuju label “Besar” akan dilakukan bila pada perintah CMP diatasnya register AX lebih besar dibandingkan dengan register BX.
Mnemonic : JGE (Jump If Greater or Equal)
Tersedia pada : 8088 keatas
Syntax : JGE Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Melakukan suatu loncatan menuju “tujuan” bila SF=OF. “Tujuan” dapat berupa nama label ataupun alamat memory. Pada lompatan bersyarat ini, besarnya lompatan tidak bisa melebihi -128 dan +127 byte. JGE identik dengan perintah JNL. Catatan : JGE dan JNL melakukan operasi pada bilangan bertanda.
Contoh:
CMP AX,BX
JGE BesarSama
Pada perintah diatas, loncatan menuju label “BesarSama” akan dilakukan bila pada perintah CMP diatasnya register AX lebih besar atau sama dengan register BX.
Mnemonic : JL (Jump If Less Than)
Tersedia pada : 8088 keatas
Syntax : JL Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Melakukan suatu loncatan menuju “tujuan” bila SF tidak sama dengan OF. “Tujuan” dapat berupa nama label ataupun alamat memory. Pada lompatan bersyarat ini, besarnya lompatan tidak bisa melebihi -128 dan +127 byte. JL identik dengan perintah JNGE. Catatan : JL dan JNGE melakukan operasi pada bilangan bertanda.
Contoh:
CMP AX,BX
JL Kecil
Pada perintah diatas, loncatan menuju label “Kecil” akan dilakukan bila pada perintah CMP diatasnya register AX lebih kecil dibandingkan dengan register BX.
Mnemonic : JLE (Jump If Less Than or Equal)
Tersedia pada : 8088 keatas
Syntax : JLE Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Melakukan suatu loncatan menuju “tujuan” bila ZF=1 atau SF tidak sama dengan OF. “Tujuan” dapat berupa nama label ataupun alamat memory. Pada lompatan bersyarat ini, besarnya lompatan tidak bisa melebihi -128 dan +127 byte. JLE identik dengan perintah JNG. Catatan : JLE dan JNG melakukan operasi pada bilangan bertanda.
Contoh:
CMP AX,BX
JLE KecilSama
Pada perintah diatas, loncatan menuju label “KecilSama” akan dilakukan bila pada perintah CMP diatasnya register AX lebih kecil atau sama dengan register BX.
Mnemonic : JMP (Jump)
Tersedia pada : 8088 keatas
Syntax : JMP Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Melakukan lompatan menuju “Tujuan” yang dapat berupa suatu label maupun alamat memory. Tidak seperti lompatan bersyarat, perintah JMP dapat melakukan lompatan ke segment lain. Contoh: JMP Proses
Mnemonic : JNA (Jump If Not Above)
Tersedia pada : 8088 keatas
Syntax : JNA Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Identik dengan JBE.
Mnemonic : JNAE (Jump If Not Above or Equal)
Tersedia pada : 8088 keatas
Syntax : JNAE Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Identik dengan JB.
Mnemonic : JNB (Jump If Not Bellow)
Tersedia pada : 8088 keatas
Syntax : JNB Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Identik dengan JAE.
Mnemonic : JNBE (Jump If Not Bellow or Equal)
Tersedia pada : 8088 keatas
Syntax : JNBE Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Identik dengan JA.
Mnemonic : JNC (Jump Not Carry)
Tersedia pada : 8088 keatas
Syntax : JNC Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Identik dengan JNB.
Mnemonic : JNE (Jump Not Equal)
Tersedia pada : 8088 keatas
Syntax : JNE Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Melakukan suatu loncatan menuju “tujuan” bila ZF=0. “Tujuan” dapat berupa nama label ataupun alamat memory. Pada lompatan bersyarat ini, besarnya lompatan tidak bisa melebihi -128 dan +127 byte. JNE identik dengan perintah JNZ.
Contoh:
CMP AX,BX
JNE TidakSama
Pada perintah diatas, loncatan menuju label “TidakSama” akan dilakukan bila pada perintah CMP diatasnya register AX tidak sama dengan register BX.
Mnemonic : JNG (Jump If Not Greater)
Tersedia pada : 8088 keatas
Syntax : JNG Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Identik dengan JLE.
Mnemonic : JNGE (Jump If Not Greater or Equal)
Tersedia pada : 8088 keatas
Syntax : JNGE Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Identik dengan JL.
Mnemonic : JNL (Jump If Not Less Than)
Tersedia pada : 8088 keatas
Syntax : JNL Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Identik dengan JGE.
Mnemonic : JNLE (Jump If Not Less or Equal)
Tersedia pada : 8088 keatas
Syntax : JNLE Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Identik dengan JG.
Mnemonic : JNO (Jump On Not Overflow)
Tersedia pada : 8088 keatas
Syntax : JNO Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Melakukan suatu loncatan menuju “tujuan” bila OF=0. “Tujuan” dapat berupa nama label ataupun alamat memory. Pada lompatan bersyarat ini, besarnya lompatan tidak bisa melebihi -128 dan +127 byte. Catatan : JNO melakukan operasi pada bilangan bertanda.
Mnemonic : JNP (Jump On No Parity)
Tersedia pada : 8088 keatas
Syntax : JNP Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Melakukan suatu loncatan menuju “tujuan” bila PF=0. “Tujuan” dapat berupa nama label ataupun alamat memory. Pada lompatan bersyarat ini, besarnya lompatan tidak bisa melebihi -128 dan +127 byte. JNP identik dengan perintah JPO. Catatan : JNP dan JPO melakukan operasi pada bilangan tidak bertanda.
Mnemonic : JNS (Jump On No Sign)
Tersedia pada : 8088 keatas
Syntax : JNS Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Melakukan suatu loncatan menuju “tujuan” bila SF=0. “Tujuan” dapat berupa nama label ataupun alamat memory. Pada lompatan bersyarat ini, besarnya lompatan tidak bisa melebihi -128 dan +127 byte. Catatan : JNS melakukan operasi pada bilangan bertanda.
Mnemonic : JNZ (Jump On Not Zero)
Tersedia pada : 8088 keatas
Syntax : JNZ Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Identik dengan JNE.
Mnemonic : JO (Jump On Overflow)
Tersedia pada : 8088 keatas
Syntax : JO Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Melakukan suatu loncatan menuju “tujuan” bila OF=1. “Tujuan” dapat berupa nama label ataupun alamat memory. Pada lompatan bersyarat ini, besarnya lompatan tidak bisa melebihi -128 dan +127 byte. Catatan : JO melakukan operasi pada bilangan bertanda.
Mnemonic : JP (Jump On Parity)
Tersedia pada : 8088 keatas
Syntax : JP Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Melakukan suatu loncatan menuju “tujuan” bila PF=1. “Tujuan” dapat berupa nama label ataupun alamat memory. Pada lompatan bersyarat ini, besarnya lompatan tidak bisa melebihi -128 dan +127 byte. JP identik dengan perintah JPE.
Mnemonic : JPE (Jump On Parity Even)
Tersedia pada : 8088 keatas
Syntax : JPE Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Identik dengan JP.
Mnemonic : JPO (Jump On Parity Odd)
Tersedia pada : 8088 keatas
Syntax : JPO Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Identik dengan JNP.
Mnemonic : JS (Jump On Sign)
Tersedia pada : 8088 keatas
Syntax : JS Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Melakukan suatu loncatan menuju “tujuan” bila SF=1. “Tujuan” dapat berupa nama label ataupun alamat memory. Pada lompatan bersyarat ini, besarnya lompatan tidak bisa melebihi -128 dan +127 byte. Catatan : JS melakukan operasi pada bilangan bertanda.
Mnemonic : JZ (Jump On Zero)
Tersedia pada : 8088 keatas
Syntax : JZ Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Identik dengan JE.
Mnemonic : LAHF (Load Flags Into AH Register)
Tersedia pada : 8088 keatas
Pengaruh flag : Tidak Ada
Syntax : LAHF
Fungsi : Untuk mengcopykan CF, PF, AF, ZF dan SF yang terletak pada bit ke 0, 2, 4, 6 dan 7 dari flags register menuju register AH pada bit yang sesuai(0, 2, 4, 6 dan 7).
Contoh:
Dengan fungsi ini, anda bisa menyimpan 8 bit rendah dari flags register untuk menghindari perubahan akibat dari suatu proses, seperti:
LAHF ; Simpan flags pada AH
PUSH AX ; Nilai AH disimpan ke stack
+——–+ | Proses | +——–+
POP AX ; Keluarkan AH dari stack
SAHF ; Masukkan ke flag register
Mnemonic : LDS (Load Pointer Using DS Register)
Tersedia pada : 8088 keatas
Syntax : LDS Operand,Mem32
Pengaruh flag : Tidak Ada
Fungsi : Untuk menyimpan Double Word dari memory. 16 bit rendah akan disimpan pada “Operand” sedangkan 16 bit tingginya akan disimpan pada register DS. “Mem32” mencatat lokasi dari suatu memory yang didefinisikan dengan tipe Double Word(DD). Contoh:
TData: JMP Proses
Tabel DD ?,?,? Proses:
LDS BX,Tabel Setelah intruksi diatas dijalankan, maka pasangan register DS:BX akan mencatat alamat dari variabel “Tabel”.
Mnemonic : LEA (Load Effective Address)
Tersedia pada : 8088 keatas
Syntax : LEA Operand,Mem16
Pengaruh flag : Tidak Ada
Fungsi : Untuk mendapatkan alamat efektif atau offset dari “Mem16” dimana “Operand” merupakan suatu register 16 bit. Perintah LEA hampir sama dengan perintah OFFSET yang juga digunakan untuk mendapatkan offset dari suatu memory. Perintah LEA lebih fleksibel untuk digunakan dibandingkan dengan perintah OFFSET karena dengan LEA kita bisa memberikan tambahan nilai pada “Mem16”.
Contoh:
TData :JMP Proses
Kal ‘0123456789abcd’
Proses:
MOV SI,10
LEA BX,Kal[SI]
Dengan perintah diatas, register BX akan mencatat offset ke 10 dari Kal.
Mnemonic : LES (Load Pointer Using ES Register)
Tersedia pada : 8088 keatas
Syntax : LES Operand,Mem32
Pengaruh flag : Tidak Ada
Fungsi : Untuk menyimpan Double Word dari memory. 16 bit rendah akan disimpan pada “Operand” sedangkan 16 bit tingginya akan disimpan pada register ES. “Mem32” mencatat lokasi dari suatu memory yang didefinisikan dengan tipe Double Word(DD). Contoh:
TData:
JMP Proses
Tabel DD ?,?,?
Proses:
LES BX,Tabel
Setelah intruksi diatas dijalankan, maka pasangan register ES:BX akan mencatat alamat dari variabel “Tabel”.
Mnemonic : LOCK (Lock The BUS)
Tersedia pada : 8088 keatas
Syntax : LOCK Operand
Pengaruh flag : Tidak Ada
Fungsi : Perintah ini digunakan terutama pada komputer yang mempunyai procesor lebih dari satu. Perintah LOCK mengunci suatu area terhadap pemakaian oleh mikroprocesor lainnya. Catatan: Perintah XCHG selalu mengaktifkan LOCK.
Mnemonic : LODSB (Load A Byte From String Into AL)
Tersedia pada : 8088 keatas
Syntax : LODSB
Pengaruh flag : Tidak Ada
Fungsi : Untuk mengcopy data 1 byte dari alamat DS:SI ke register AL.
Mnemonic : LOOP
Tersedia pada : 8088 keatas
Syntax : LOOP Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Untuk melakukan suatu proses yang berulang (Looping) dengan CX sebagai counternya. Perintah LOOP akan mengurangkan CX dengan 1 kemudian dilihat apakah CX telah mencapai nol. Proses looping akan selesai jika register CX telah mencapai nol. Oleh karena inilah maka jika kita menjadikan CX=0 pada saat pertama kali, kita akan mendapatkan suatu pengulangan yang terbanyak karena pengurangan 0-1=-1(FFFF). Catatan: LOOP hanya dapat melakukan lompatan menuju “Tujuan” bila jaraknya tidak lebih dari -128 dan +127 byte. Contoh: XOR CX,CX ; Melakukan pengulangan Ulang: ; sebanyak FFFF kali LOOP Ulang ; 231
Mnemonic : LOOPE ( Loop While Equal)
Tersedia pada : 8088 keatas
Syntax : LOOPE Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Untuk melakukan pengulangan selama register CX tidak sama dengan 0 dan ZF=1. LOOPE hanya dapat melakukan lompatan menuju “Tujuan” bila jaraknya tidak lebih dari -128 dan +127 byte. LOOPE identik dengan LOOPZ.
Mnemonic : LOOPNE (Loop While Not Equal)
Tersedia pada : 8088 keatas
Syntax : LOOPNE Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Untuk melakukan pengulangan selama register CX tidak sama dengan 0 dan ZF=0. LOOPNE hanya dapat melakukan lompatan menuju “Tujuan” bila jaraknya tidak lebih dari -128 dan +127 byte. LOOPE identik dengan LOOPNZ.
Mnemonic : LOOPNZ (Loop While Not Zero)
Tersedia pada : 8088 keatas
Syntax : LOOPNZ Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Identik dengan LOOPNE.
Mnemonic : LOOPZ
Tersedia pada : 8088 keatas
Syntax : LOOPZ Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Identik dengan LOOPE.
Mnemonic : MOV (Move)
Tersedia pada : 8088 keatas
Syntax : MOV Tujuan,Sumber
Pengaruh flag : Tidak Ada
Fungsi : Untuk mengcopykan isi “Sumber” ke “Tujuan”. Antara “Sumber” dan “Tujuan” harus mempunyai tipe data yang sama, seperti AL dan BL, AX dan BX. Pada perintah MOV ini harus anda perhatikan bahwa:
– Segment register tidak bisa langsung diisi nilainya, seperti:
MOV ES,0B800h
Untuk masalah seperti ini anda bisa menggunakan register general purpose sebagai perantara, seperti:
MOV AX,0B800h
MOV ES,AX
– Register CS sebaiknya tidak digunakan sebagai “Tujuan” karena hal ini akan mengacaukan program anda.
– Pengcopyan data antar segment register tidak bisa digunakan, seperti:
MOV ES,DS
Untuk masalah seperti ini anda bisa menggunakan register general purpose atau stack sebagai perantara, seperti:
MOV AX,DS
MOV ES,AX atau:
PUSH DS
POP ES
– Pengcopyan data antar lokasi memory, seperti:
MOV A,B
Untuk masalah seperti ini anda bisa menggunakan suatu register sebagai perantara, seperti:
MOV AX,B
MOV A,AX
Mnemonic : MOVSW (Move String Byte By Byte)
Tersedia pada : 8088 keatas
Syntax : MOVSB
Pengaruh flag : Tidak Ada
Fungsi : Untuk mengcopy data 1 byte dari alamat DS:SI ke alamat ES:DI. Bila DF=0(CLD) maka setelah intruksi MOVSB dijalankan, register SI dan DI akan ditambah dengan 1 sebaliknya jika DF=1(STD) maka register SI dan DI akan dikurang dengan 1.
Mnemonic : MOVSW (Move String Word By Word)
Tersedia pada : 8088 keatas
Syntax : MOVSW
Pengaruh flag : Tidak Ada
Fungsi : Untuk mengcopy data 1 Word dari alamat DS:SI ke alamat ES:DI. Bila DF=0(CLD) maka setelah intruksi MOVSW dijalankan, register SI dan DI akan ditambah dengan 2 sebaliknya jika DF=1(STD) maka register SI dan DI akan dikurang dengan 2.
Mnemonic : MUL (Multiply)
Tersedia pada : 8088 keatas
Syntax : MUL Sumber
Pengaruh flag : OF, CF
Fungsi : Bila “Sumber” bertipe 8 bit maka akan dilakukan perkalian antara “Sumber” dengan AL. Hasilnya disimpan pada register AX. Bila “Sumber” bertipe 16 bit maka akan dilakukan perkalian antara “Sumber” dengan AX. Hasilnya disimpan pada pasangan register DX:AX.
Contoh:
MUL BH ; AX = BH * AL
MUL BX ; DX:AX = BX * AX 234
Mnemonic : NEG (Negate)
Tersedia pada : 8088 keatas
Syntax : NEG Operand
Pengaruh flag : OF, SF, ZF, AF, PF, CF
Fungsi : Untuk mengubah “Operand” menjadi negatif. Contoh: MOV BH,1 ; BH = 01h NEG BH ; BH = FFh
Mnemonic : NOT
Tersedia pada : 8088 keatas
Syntax : NOT Operand
Pengaruh flag : Tidak Ada
Fungsi : Membalikkan bit pada operand. Jika bit operand bernilai 0 akan dijadikan 1 sebaliknya jika 1 akan dijadikan 0. Contoh: MOV AL,10010011b NOT AL ; AL = 01101100b \
Mnemonic : OR
Tersedia pada : 8088 keatas
Syntax : OR Tujuan,Sumber
Pengaruh flag : OF, SF, ZF, PF, CF
Fungsi : Melakukan logika OR antara “Tujuan” dan “Sumber”. Hasil dari operasi OR diletakkan pada “Tujuan”. Instruksi OR umumnya digunakan untuk menjadikan suatu bit menjadi 1.
Contoh:
OR AL,00000001b ; Jadikan bit ke 0 dari AL menjadi 1
Mnemonic : OUT (Output to Port)
Tersedia pada : 8088 keatas
Syntax : OUT NoPort,Operand
Pengaruh flag : Tidak ada
Fungsi : Untuk memasukkan 1 byte atau 1 word dari “operand” ke “NoPort” sesuai dengan tipe data “operand”. Jika “Operand” merupakan register AL maka akan dikirimkan data pada port sebanyak 1 byte, bila “operand” merupakan register AX maka akan dikirimkan data pada port sebanyak 1 word. “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 tersebut.
Mnemonic : OUTS (Output String To Port)
Tersedia pada : 8088 keatas
Syntax : OUTS NoPort,Operand
Pengaruh flag : Tidak ada
Fungsi : Untuk mengirimkan data dari “operand” ke “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 dikirimkan menuju port. Data yang akan dikirimkan menuju port disimpan pada lokasi ES:SI.
Jika Direction flag bernilai 0(dengan CLD) maka setelah intruksi OUTS dijalankan register SI akan ditambah secara otomatis, sebaliknya jika Direction flag bernilai 1(dengan STD) maka register SI akan dikurang secara otomatis. Anda bisa menggunakan intruksi pengulangan pada string disertai dengan perintah OUTS ini.
Mnemonic : OUTSB (Output String Byte To Port)
Tersedia pada : 8088 keatas
Syntax : OUTSB
Pengaruh flag : Tidak ada
Fungsi : Untuk memasukkan data dari lokasi DS:SI ke nomor port yang dicatat oleh register DX sebanyak 1 byte. Jika Direction flag bernilai 0(dengan CLD) maka setelah intruksi OUTSB dijalankan register SI akan ditambah dengan 1 secara otomatis, sebaliknya jika Direction flag bernilai 1(dengan STD) maka register SI akan dikurang dengan 1 secara otomatis. Anda bisa menggunakan intruksi pengulangan pada string disertai dengan perintah OUTSB
Mnemonic : OUTSW (Output String Wyte To Port)
Tersedia pada : 8088 keatas
Syntax : OUTSW
Pengaruh flag : Tidak ada
Fungsi : Untuk memasukkan data dari lokasi DS:SI ke nomor port yang dicatat oleh register DX sebanyak 1 word. Jika Direction flag bernilai 0(dengan CLD) maka setelah intruksi OUTSW dijalankan register SI akan ditambah dengan 2 secara otomatis, sebaliknya jika Direction flag bernilai 1(dengan STD) maka register SI akan dikurang dengan 2 secara otomatis. Anda bisa menggunakan intruksi pengulangan pada string disertai dengan perintah OUTSW ini.
Mnemonic : POP (Pop A Word From Stack)
Tersedia pada : 8088 keatas
Syntax : POP Tujuan
Pengaruh flag : Tidak ada
Fungsi : Untuk mengambil data 1 word dari stack(SS:SP) dan disimpan pada “Tujuan”. Setelah intruksi POP dijalankan register SP akan ditambah dengan 2.
Contoh:
PUSH DS
POP ES
Mnemonic : POPA (Pop All General Purpose Registers)
Tersedia pada : 8088 keatas
Syntax : POPA
Pengaruh flag : Tidak ada
Fungsi : Untuk mengambil 8 word dari stack menuju register berturut-turut DI, SI, BP, SP, BX, DX, CX dan AX. Dengan PUSHA program anda akan berjalan lebih cepat dan efesian dibandingkan bila anda menyimpannya dengan cara:
POP DI
POP SI
POP BP
POP SP
POP BX
POP DX
POP CX
POP AX
Mnemonic : POPF (Pop Flags Off Stack)
Tersedia pada : 8088 keatas
Syntax : POPF
Pengaruh flag : OF, DF, IF, TF, SF, ZF, AF, PF, CF
Fungsi : Untuk mengambil 1 word dari stack ke flags registers. Setelah intruksi POPF dijalankan register SP akan ditambah dengan 2.
Mnemonic : PUSH (Push Operand Onto Stack)
Tersedia pada : 8088 keatas
Syntax : PUSH Sumber
Pengaruh flag : Tidak ada
Fungsi : Untuk menyimpan data 1 word dari “Sumber” ke stack(SS:SP). “Sumber” merupakan operand yang bertipe 16 bit. Setelah intruksi PUSH dijalankan register SP akan dikurang dengan 2.
Mnemonic : PUSHF (Push Flags Onto Stack)
Tersedia pada : 8088 keatas
Syntax : PUSHF
Pengaruh flag : Tidak ada
Fungsi : Untuk menyimpan flags registers ke stack. Intruksi ini merupakan kebalikan dari intruksi POPF. Setelah intruksi PUSHF dijalankan register SP akan dikurang dengan 2.
Mnemonic : RCL (Rotate Through Carry Left)
Tersedia pada : 8088 keatas
Syntax : RCL Operand,Reg
Pengaruh flag : OF, CF
Fungsi : Untuk memutar “Operand” sebanyak “Reg” kali ke kiri melalui CF. Bit yang tergeser keluar dari kiri akan dimasukkan pada CF dan nilai CF akan dimasukkan pada bit terkanan dari “Operand”.
Pada mikroprosesor 8088 “Reg” haruslah berupa register CL atau CX bila perputaran yang dilakukan terhadap “Operand” lebih dari 1.
Contoh:
MOV BL,00100110b ; Misalkan CF=1
RCL BL,1 ; BL = 01001101b CF=0
Mnemonic : RCR (Rotate through Carry Right)
Tersedia pada : 8088 keatas
Syntax : RCR Operand,Reg
Pengaruh flag : OF, CF
Fungsi : Untuk memutar “Operand” sebanyak “Reg” kali ke kanan melalui CF. Bit yang tergeser keluar dari kanan akan dimasukkan pada CF dan nilai CF akan dimasukkan pada bit terkiri dari “Operand”.
Pada mikroprosesor 8088 “Reg” haruslah berupa register CL atau CX bila perputaran yang dilakukan terhadap “Operand” lebih dari 1.
Contoh:
MOV BL,00100110b ; Misalkan CF=1
RCR BL,1 ; BL = 10010011b CF=0
Mnemonic : REP (Repeat)
Tersedia pada : 8088 keatas
Syntax : REP Instruksi
Pengaruh flag : Tidak ada
Fungsi : Melakukan “intruksi” sebanyak CX kali. Intruksi REP biasanya diikuti oleh Intruksi yang berhubungan dengan operasi pada string.
Mnemonic : REPE (Repeat While Equal)
Tersedia pada : 8088 keatas
Syntax : REPE Intruksi
Pengaruh flag : Tidak ada
Fungsi : Melakukan “intruksi” sebanyak CX kali atau sampai zero flag bernilai 1. Intruksi REPE biasanya diikuti oleh Intruksi yang berhubungan dengan operasi pada string.
Contoh:
MOV CX,200
REPE CMPS String1,String2
Intruksi diatas akan membandingkan string1 dengan string2 sebanyak 200 kali atau sampai ditemukan adanya ketidaksamaan antara String1 dan String2 yang membuat zero flag bernilai 1.
Mnemonic : REPNE (Repeat While Not Equal)
Tersedia pada : 8088 keatas
Syntax : REPNE Instruksi
Pengaruh flag : Tidak ada
Fungsi : Melakukan “intruksi” sebanyak CX kali atau sampai zero flag bernilai 0. Intruksi REPNE biasanya diikuti oleh Intruksi yang berhubungan dengan operasi pada string.
Contoh:
MOV CX,200
REPNE CMPS String1,String2
Intruksi diatas akan membandingkan string1 dengan string2 sebanyak 200 kali atau sampai ditemukan adanya kesamaan antara String1 dan String2 yang membuat zero flag bernilai 0.
Mnemonic : REPNZ (Repeat While Not Zero)
Tersedia pada : 8088 keatas
Syntax : REPNZ Instruksi
Pengaruh flag : Tidak ada
Fungsi : Identik dengan REPNE.
Mnemonic : REPZ (Repeat While Zero)
Tersedia pada : 8088 keatas
Syntax : REPZ Instruksi
Pengaruh flag : Tidak ada
Fungsi : Identik dengan REPE.
Mnemonic : RET (Return From Procedure)
Tersedia pada : 8088 keatas
Syntax : RET [Size]
Pengaruh flag : Tidak ada
Fungsi : RET akan mengambil alamat pada stack untuk melakukan lompatan pada alamat tersebut. RET biasanya diletakkan pada akhir dari suatu procedure yang dipanggil dengan CALL (Lihat CALL). Bila pada perintah RET diberi parameter, maka paramter itu akan digunakan sebagai angka tambahan dalam mengambil data pada stack.
Contoh:
RET 2
Mnemonic : ROL (Rotate Left)
Tersedia pada : 8088 keatas
Syntax : ROL Operand,Reg
Pengaruh flag : OF, CF
Fungsi : Untuk memutar “Operand” sebanyak “Reg” kali ke kiri. Bit yang tergeser keluar dari kiri akan dimasukkan pada CF dan pada bit terkanan dari “Operand”.
Pada mikroprosesor 8088 “Reg” haruslah berupa register CL atau CX bila perputaran yang dilakukan terhadap “Operand” lebih dari 1.
Contoh:
MOV BL,00100110b ; Misalkan CF=1
ROL BL,1 ; BL = 01001100b CF=0
Mnemonic : ROR (Rotate Right)
Tersedia pada : 8088 keatas
Syntax : ROR Operand,Reg
Pengaruh flag : OF, CF
Fungsi : Untuk memutar “Operand” sebanyak “Reg” kali ke kanan. Bit yang tergeser keluar dari kanan akan dimasukkan pada CF dan pada bit terkiri dari “Operand”.
Pada mikroprosesor 8088 “Reg” haruslah berupa register CL atau CX bila perputaran yang dilakukan terhadap “Operand” lebih dari 1.
Contoh:
MOV BL,00100110b ; Misalkan CF=1
ROR BL,1 ; BL = 00010011b CF=0
Mnemonic : SAHF (Store AH into Flag Register)
Tersedia pada : 8088 keatas
Syntax : SAHF Pengaruh flag : SF, ZF, AF, PF, CF
Fungsi : Untuk mengcopykan nilai AH pada 8 bit rendah dari flag register, yaitu: CF, PF, AF, ZF dan SF. Intruksi ini merupakan kebalikan dari Intruksi LAHF.
Mnemonic : SAL (Arithmatic Shift Left)
Tersedia pada : 8088 keatas
Syntax : SAL Operand,Reg
Pengaruh flag : OF, SF, ZF, PF, CF
Fungsi : Untuk menggerser “Operand” sebanyak “Reg” kali ke kiri(Lihat SHL).
Mnemonic : SBB (Substract With Carry)
Tersedia pada : 8088 keatas
Syntax : SBB Tujuan,Sumber
Pengaruh flag : OF, SF, ZF, AF, PF, CF
Fungsi : Untuk mengurangkan “Sumber” dengan “Tujuan” dan Carry Flag (1=on, 0=off), hasilnya diletakkan pada “Tujuan” (Tujuan=Tujuan-Sumber-CF).
Mnemonic : SCASB (Scan String For Byte)
Tersedia pada : 8088 keatas
Syntax : SCASB Pengaruh flag : OF, SF, ZF, AF, PF, CF
Fungsi : Untuk membandingkan isi register AL dengan data pada alamat ES:DI.
Mnemonic : SCASW (Scan String for Word)
Tersedia pada : 8088 keatas
Syntax : SCASW Pengaruh flag : OF, SF, ZF, AF, PF, CF
Fungsi : Untuk membandingkan isi register AX dengan data pada alamat ES:DI.
Mnemonic : SHL (Shift Left)
Tersedia pada : 8088 keatas
Pengaruh flag : OF, SF, ZF, PF, CF Syntax : SHL Operand,Reg Fungsi : Untuk menggeser bit dari “operand” sebanyak “Reg” kali ke kiri. Bila pergeseran yang dilakukan lebih dari 1 kali maka “Reg” harus berupa regisrer CL atau CX.
Contoh:
MOV BL,00000001b
SHL BL,1 ; BL=00000010b
Dengan menggeser n kali kekiri adalah sama bila bilangan tersebut dikali dengan 2 pangkat n.
Mnemonic : SHR (Shift Right)
Tersedia pada : 8088 keatas
Syntax : SHR Operand,Reg
Pengaruh flag : OF, SF, ZF, PF, CF
Fungsi : Untuk menggeser bit dari “operand” sebanyak “Reg” kali ke kanan. Bila pergeseran yang dilakukan lebih dari 1 kali maka “Reg” harus berupa regisrer CL atau CX.
Contoh:
MOV BL,00000100b
SHR BL,1 ; BL=00000010b
Dengan menggeser n kali kekanan adalah sama bila bilangan tersebut dibagi dengan 2 pangkat n.
Mnemonic : STC (Set Carry Flag)
Tersedia pada : 8088 keatas
Syntax : STC Pengaruh flag : CF
Fungsi : Untuk menjadikan Carry flag menjadi 1.
Mnemonic : STD (Set Direction Flag)
Tersedia pada : 8088 keatas
Syntax : STD Pengaruh flag : DF
Fungsi : Untuk menjadikan Direction flag menjadi 1. Intruksi ini merupakan kebalikan dari intruksi CLD (lihat CLD).
Mnemonic : STI (Set Interrupt Flag)
Tersedia pada : 8088 keatas
Syntax : STI Pengaruh flag : IF
Fungsi : Untuk membuat Interrupt flag menjadi 1 agar interupsi dapat terjadi lagi. Intruksi ini merupakan kebalikan dari intruksi CLI (lihat CLI).
Mnemonic : STOSB (Store AL )
Tersedia pada : 8088 keatas Syntax : STOSB
Pengaruh flag : Tidak ada
Fungsi : Untuk mengcopykan isi register AL pada alamat ES:DI. Jika Direction flag bernilai 0(dengan CLD) maka setelah intruksi STOSB dijalankan register DI akan ditambah dengan 1 secara otomatis, sebaliknya jika Direction flag bernilai 1(dengan STD) maka register DI akan dikurang dengan 1 secara otomatis. Anda bisa menggunakan intruksi pengulangan pada string disertai dengan perintah STOSB ini.
Mnemonic : STOSW (Store Word in AX at String)
Tersedia pada : 8088 keatas
Syntax : STOSW
Pengaruh flag : Tidak ada
Fungsi : Untuk mengcopykan isi register AX pada alamat ES:DI. Jika Direction flag bernilai 0(dengan CLD) maka setelah intruksi STOSW dijalankan register DI akan ditambah dengan 2 secara otomatis, sebaliknya jika Direction flag bernilai 1(dengan STD) maka register DI akan dikurang dengan 2 secara otomatis. Anda bisa menggunakan intruksi pengulangan pada string disertai dengan perintah STOSW ini.
Mnemonic : SUB (Substract)
Tersedia pada : 8088 keatas
Syntax : SUB Tujuan,Sumber
Pengaruh flag : OF, SF, ZF, AF, PF, CF
Fungsi : Untuk mengurangkan “Tujuan” dengan “Sumber”. Hasil pengurangan akan disimpan pada “Tujuan”. Contoh: 246 SUB BX,BX ; BX=0
Mnemonic : TEST
Tersedia pada : 8088 keatas
Syntax : TEST Operand1,Operand2
Pengaruh flag : OF, SF, ZF, PF, CF
Fungsi : Untuk melakukan operasi AND antara “Operand1” dan “Operand2”. Hasil dari operasi AND hanya mempengaruhi flag register saja dan tidak mempengaruhi nilai “operand1” maupun “operand2”.
Mnemonic : WAIT
Tersedia pada : 8088 keatas
Syntax : WAIT
Pengaruh flag : Tidak ada
Fungsi : Untuk menghentikan CPU sampai adanya interupsi dari luar. Intruksi ini bisanya digunakan untuk bekerja sama dengan Coprosesor.
Mnemonic : XCHG (Exchange)
Tersedia pada : 8088 keatas
Syntax : XCHG Operand1,Operand2
Pengaruh flag : Tidak ada
Fungsi : Untuk menukar “Operand1” dengan “Operand2”.
Contoh:
Potongan program di bawah akan mengatur agar AX > BX
CMP AX,BX
JAE Selesai
XCHG AX,BX
Selesai :
……….
Mnemonic : XLAT (Translate)
Tersedia pada : 8088 keatas
Syntax : XLAT
Pengaruh flag : Tidak ada
Fungsi : Untuk mengcopykan isi dari alamat DS:[BX] ditambah dengan AL ke AL (AL=DS:[BX]+AL).
Mnemonic : XOR
Tersedia pada : 8088 keatas
Syntax : XOR Tujuan,
Sumber Pengaruh flag : Tidak ada
Fungsi : Melakukan logika XOR antara “Tujuan” dan “Sumber”. Hasil dari operasi XOR diletakkan pada “Tujuan”. Fungsi XOR yg paling populer adalah untuk menolkan suatu register. Dengan logika XOR program akan berjalan lebih cepat dan efisien. Contoh:
XOR AX,AX ; AX akan bernilai nol setelah perintah ini 248
DAFTAR INTERRUPT PILIHAN
INTERRUPT 05h
Print Screen
Fungsi : Mencetak seluruh isi layar ke printer. Register Input : Tidak Ada. Register Output : Tidak Ada.
NTERRUPT 09h
Keyboard
Fungsi : Interupsi 09 merupakan HardWare interupsi dari keyboard. Setiap penekanan tombol keyboard akan membangkitkan interupsi 09. Handler dari interupsi 09 kemudian akan mengambil data dari tombol apa yang ditekan dari Port 60h yang berisi kode scan tombol. Dari kode scan ini kemudian akan diterjemahkan dalam kode ASCII atau Extended dan disimpan pada keyboard buffer untuk kemudian digunakan oleh interupsi lain.
INTERRUPT 10h – Service 00h
Set Video Mode
Fungsi : Mengubah Mode Video.
Register Input : Register Output : Tidak Ada.
AH = 00h
AL = nomor mode
Penjelasan : Setiap dilakukan pergantian mode akan menimbulkan efek CLS, kecuali nomor mode dijumlahkan dengan 128 atau bit ke-7 pada AL diset 1.
INTERRUPT 10h – Service 01h
Set Cursor Size
Fungsi : Merubah ukuran kursor pada mode teks.
Register Input : Register Output : Tidak Ada.
AH = 01h
CH = awal garis bentuk kursor
CL = akhir garis bentuk kursor
INTERRUPT 10h – Service 02h
Set Cursor Position
Fungsi : Meletakkan kursor pada posisi tertentu.
Register Input : Register Output : Tidak Ada.
AH = 02h
BH = nomor halaman tampilan
DH = nomor baris (dimulai 00)
DL = nomor kolom (dimulai 00)
INTERRUPT 10h – Service 03h
Cursor Information
Fungsi : Memperoleh Informasi posisi kursor dan ukurannya.
Register Input : Register Output :
AH = 03h
CH = awal garis bentuk kursor
BH = nomor halaman tampilan
CL = akhir garis bentuk kursor
DH = nomor baris
DL = nomor kolom
Penjelasan : Setiap halaman tampilan memiliki kursornya sendiri- sendiri.
INTERRUPT 10h – Service 05h
Select Active Page
Fungsi : Merubah halaman tampilan aktif.
Register Input : Register Output : Tidak Ada.
AH = 05h
AL = nomor halaman tampilan
INTERRUPT 10h – Service 06h
Scroll Up Window
Fungsi : Menggulung jendela ke atas.
Register Input : Register Output : Tidak Ada.
AH = 06h
AL = jumlah baris untuk digulung
BH = atribut untuk baris kosong
CH,CL = koordinat kiri atas jendela
DH,DL = koordinat kanan bawah jendela
Penjelasan : AL diisi 00 akan mengosongkan keseluruhan jendela.
INTERRUPT 10h – Service 07h
Scroll Down Window
Fungsi : Menggulung jendela ke bawah.
Register Input : Register Output : Tidak Ada.
AH = 07h
AL = jumlah baris untuk digulung
BH = atribut untuk baris kosong
CH,CL = koordinat kiri atas jendela
DH,DL = koordinat kanan bawah jendela
Penjelasan : AL diisi 00 akan mengosongkan keseluruhan jendela.
INTERRUPT 10h – Service 09h
Write Character And Attribute At Cursor Position
Fungsi : Mencetak karakter dan atribut pada posisi kursor.
Register Input : Register Output : Tidak Ada.
AH = 09h
AL = kode ASCII karakter
BH = nomor halaman
BL = atribut karakter
CX = jumlah pengulangan pencetakan
Penjelasan : Karakter kontrol akan dicetak sebagai karakter biasa.
INTERRUPT 10h – Service 0Ah
Write Character At Cursor Position
Fungsi : Mencetak karakter pada posisi kursor.
Register Input : Register Output : Tidak Ada.
AH = 0Ah
AL = kode ASCII karakter
BH = nomor halaman CX = jumlah pengulangan pencetakan
Penjelasan : Karakter kontrol akan dicetak sebagai karakter biasa, atribut yang digunakan akan sama dengan atribut yang lama.
INTERRUPT 10h – Service 0Eh
Teletype Output
Fungsi : Output karakter sederhana.
Register Input : Register Output : Tidak Ada.
AH = 0Eh
AL = kode ASCII karakter
BH = nomor halaman
Penjelasan : Karakter kontrol berpengaruh sesuai fungsinya. Pada ROM BIOS dengan tanggal antara 24/4/81 ke atas umumnya register BH tidak berfungsi karena setiap output akan dicetak ke halaman aktif.
INTERRUPT 10h – Service 0Fh
Get Current Video Mode
Fungsi : Mendapatkan mode video aktif.
Register Input : Register Output :
AH = 0Fh AL = mode video (gambar 5.1.)
AH = jumlah karakter per kolom
BH = nomor halaman tampilan
Penjelasan : Jika mode video diset dengan bit 7 on, maka AL yang didapat juga akan berisi bit 7 on.
Konflik : Driver tampilan VUIMAGE
INTERRUPT 10h – Service 11h,
Subservice 00h Load User Specific Character
Fungsi : Membuat karakter ASCII baru.
Terdapat pada : Sistem dilengkapi tampilan EGA, VGA, dan MCGA. Register Input : Register Output : Tidak Ada
AH = 11h
AL = 00h
CX = jumlah karakter akan diubah
DX = nomor karakter mulai diubah BL = nomor blok untuk diubah BH = jumlah byte per karakter ES:BP = buffer bentuk karakter
INTERRUPT 10h – Service 11h,
Subservice 03h Set Block Specifier
Fungsi : Memberikan identitas tabel karakter untuk ditampilkan. Terdapat pada : Sistem dilengkapi tampilan EGA, VGA, dan MCGA. Register Input : Register Output : Tidak Ada
AH = 11h
AL = 03h
BL = penanda tabel karakter
INTERRUPT 10h – Service 12h,Subservice 10h
Get EGA Information
Fungsi : Memperoleh karakteristik sistem video.
Terdapat pada : Sistem dilengkapi tampilan EGA ke atas.
Register Input : Register Output :
AH = 12h BH = 00h monitor warna
BL = 10h 01h monitor mono
BL = 00h Card 64 KB
01h Card 128 KB
02h Card 192 KB
03h Card 256 KB
INTERRUPT 10h – Service 13h
Write String Fungsi : Mencetak string ke Layar
Terdapat pada : Mesin 80286 ke atas dengan tampilan EGA ke atas. Register Input : Register Output : Tidak Ada.
AH = 13h
AL = 00h
BH = nomor halaman
BL = atribut untuk string
CX = jumlah karakter pada string
DH,DL = koordinat untuk memulai pencetakan
ES:BP = alamat string yang akan dicetak
Penjelasan : Memperlakukan karakter kontrol sesuai fungsinya.
INTERRUPT 10h – Service 1Ah,Subservice 00h
Get Display Combination
Fungsi : Memperoleh informasi tampilan
Terdapat pada : Sistem dengan tampilan VGA dan MCGA.
Register Input : Register Output :
AH = 1Ah AL = 1Ah jika berhasil
AL = 00h BL = kode tampilan aktif
BH = kode tampilan kedua
INTERRUPT 10h – Service 1Bh
VGA State Information
Fungsi : Memperoleh informasi tampilan.
Terdapat pada : Sistem dengan tampilan VGA dan MCGA.
Register Input : Register Output :
AH = 1Bh AL = 1Bh bila berhasil
BX = 0000h ES:DI = alamat buffer 64
ES:DI = alamat buffer 64 byte informasi byte untuk diisi
INTERRUPT 10h – Service 4Fh,Subservice 00h
VESA SuperVga Information
Fungsi : Memperoleh informasi VESA.
Terdapat pada : Sistem dengan card tampilan VESA SuperVga.
Register Input : Register Output :
AX = 4F00h AL = 4Fh jika berhasil
ES:DI = alamat buffer 256 AH = 00h jika berhasil byte untuk diis diisi
ES:DI = alamat buffer 256 byte informasi
INTERRUPT 16h – Service 00h
Get Keystroke
Fungsi : Menunggu masukan keyboard.
Terdapat pada : Semua mesin.
Register Input : Register Output :
AH = 00h Jika AL=0 maka
AH = kode Extended Jika AL0 maka
AL = Kode ASCII AH = Kode Scan
INTERRUPT 16h – Service 01h
Check Keystroke
Fungsi : Mengecek isi keyboard buffer.
Terdapat pada : Semua mesin.
Register Input : Register Output :
AH = 01h ZF=0 bila buffer tidak kosong
Jika AL=0 maka AH = kode Extended Jika AL0 maka
AL = Kode ASCII
AH = Kode Scan ZF=1 bila buffer kosong
INTERRUPT 16h – Service 10h
Get Enhanced Keystroke
Fungsi : Menunggu masukan keyboard.
Terdapat pada : Mesin AT dengan keyboard Enhanced.
Register Input : Register Output :
AH = 10h AH = kode scan
AL = kode ASCII
INTERRUPT 16h – Service 11h
Check Enhanced Keystroke
Fungsi : Mengecek isi keyboard buffer.
Terdapat pada : Mesin AT dengan keyboard Enhanced.
Register Input : Register Output :
AH = 11h ZF=0 bila buffer tidak kosong
Jika AL=0 maka AH = kode Extended Jika AL0 maka
AL = Kode ASCII
AH = Kode Scan ZF=1 bila buffer kosong
INTERRUPT 19h
Bootstrap Loader
Fungsi : Melakukan Warm Boot.
Register Input : Tidak Ada. Register Output : Tidak Ada.
INTERRUPT 1Bh
Control Break Handler
Fungsi : Interupsi ini terjadi setiap kali terjadi penekanan tombol Ctrl+Break.
Register Input : Tidak Ada. Register Output : Tidak Ada.
INTERRUPT 1Ch
Timer Tick
Fungsi : Interupsi ini disediakan untuk digunakan oleh pemakai. Interupsi 1Ch akan terjadi kurang lebih 18,2 kali setiap detik. Anda bisa membuat program residen dengan memanfaatkan timer tick ini.
Register Input : Tidak Ada. Register Output : Tidak Ada.
INTERRUPT 21h – Service 01h
Read Character With Echo
Fungsi : Untuk membaca masukan 1 karakter dari keyboard dan menampilkannya ke layar. Fungsi ini dapat dihentikan oleh penekanan tombol Ctrl+Break.
Register Input : Register Output :
AH = 10h AL = Kode ASCII
Catatan : Berbeda dengan fungsi dari BIOS, untuk membaca karakter khusus yang mempunyai kode Extended, anda harus membacanya dua kali dengan fungsi dari DOS ini.
INTERRUPT 21h – Service 02h
Write Character To Standard Output
Fungsi : Untuk mencetak satu buah karakter pada layar.
Register Input : Register Output : Tidak ada
AH = 02h
DL = Kode ASCII
INTERRUPT 21h – Service 07h
Direct Character Input Without Echo
Fungsi : Untuk membaca masukan 1 karakter dari keyboard. Fungsi ini tidak akan 257 menampilkan karakter yang ditekan pada layar, selain itu penekanan tombol Ctrl+Break juga akan diabaikan.
Register Input : Register Output :
AH = 07h AL = Kode ASCII
INTERRUPT 21h – Service 08h
Character Input Without Echo
Fungsi : Untuk membaca masukan 1 karakter dari keyboard. Fungsi ini tidak akan menampilkan karakter yang ditekan pada layar. Penekanan tombol Ctrl+Break akan menghentikan fungsi ini. Register Input : Register Output :
AH = 08h AL = Kode ASCII
INTERRUPT 21h – Service 09h
Write String To Standard Output
Fungsi : Untuk mencetak string ke layar.
Register Input : Register Output : Tidak ada
AH = 09h
DS:DX = String yang
diakhiri dengan tanda “$”.
INTERRUPT 21h – Service 0Ah
Input String Fungsi : Untuk mendapatkan masukan string dari keyboard. Register Input : Register Output :
AH = 0Ah Buffer terisi
DS:DX = Buffer Spesifikasi buffer:
– Offset 00 mencatat maksimum karakter yang dapat dimasukkan. – Offset 01 banyaknya masukan dari keyboard yang telah diketikkan. Tombol CR tidak akan dihitung.
– Offset 02 keatas, tempat dari string yang diketikkan disimpan.
INTERRUPT 21h – Service 0Bh
Get Status
Fungsi : Mengecek isi keyboard buffer.
Register Input : Register Output :
AH = 0Bh AL = 00 jika tidak ada karakter
AL = FFh jika ada karakter
INTERRUPT 21h – Service 0Ch
Clear Buffer dan Read Input
Fungsi : Untuk mengosongkan keyboard buffer, kemudian melaksanakan fungsi DOS 01, 06, 07, 08 atau 0Ah.
Register Input : Register Output : Tidak ada
AH = 0Ch
AL = Fungsi yang akan dieksekusi
setelah buffer dikosongkan (01,06,0,08 atau 0Ah).
INTERRUPT 21h – Service 0Fh
Open File Using FCB
Fungsi : Membuka file dengan cara FCB.
Register Input : Register Output :
AH = 0Fh AL = 00h Jika sukses
DS:DX = FCB AL = FFh Jika gagal
INTERRUPT 21h – Service 10h
Closes File Using FCB
Fungsi : Untuk menutup file dengan cara FCB.
Register Input : Register Output :
AH = 10h AL = 00h Jika sukses
DS:DX = FCB AL = FFh Jika gagal
INTERRUPT 21h – Service 13h
Delete File Using FCB
Fungsi: Menghapus file dengan cara FCB.
Register Input : Register Output :
AH = 13h AL = 00h Jika sukses
DS:DX = FCB AL = FFh Jika gagal
INTERRUPT 21h – Service 14h
Sequential Read From FCB File
Fungsi : Untuk membaca file secara sekuensial.
Register Input : Register Output :
AH = 14h AL = status
DS:DX = FCB
INTERRUPT 21h – Service 15h
Sequential Write To FCB File
Fungsi : Untuk menulis file secara sekuential.
Register Input : Register Output :
AH = 14h AL = Status
DS:DX = FCB
INTERRUPT 21h – Service 16h
Create File Using FCB
Fungsi : Untuk menciptakan sebuah file baru dengan cara FCB. Register Input : Register Output :
AH = 16h AL = Status
DS:DX = FCB
INTERRUPT 21h – Service 17h
Rename File Using FCB
Fungsi : Untuk mengganti nama file dengan cara FCB.
Register Input : Register Output :
AH = 17h AL = Status
DS:DX = FCB
INTERRUPT 21h – Service 1Ah
Set DTA
Fungsi : Untuk merubah alamat DTA. Secara default DTA terletak pada PSP offset ke 80h sebanyak 128 byte.
Register Input : Register Output : Tidak ada
AH = 1Ah
DS:DX = Lokasi DTA yang baru
INTERRUPT 21h – Service 21h
Read Random Record From FCB File
Fungsi : Untuk membaca record dari file FCB.
Register Input : Register Output :
AH = 21h AL = Status
DS:DX = FCB DTA = Hasil pembacaan
INTERRUPT 21h – Service 22h
Write random Record To FCB File
Fungsi : untuk menulis record ke file FCB.
Register Input : Register Output :
AH = 22h AL = Status
DS:DX = FCB DTA = Data record
INTERRUPT 21h – Service 23h
Get File Size
Fungsi : Untuk mengetahui besarnya suatu file.
Register Input : Register Output :
AH = 23h AL = Status
DS:DX = FCB
INTERRUPT 21h – Service 24h
Set Random Record Number For FCB
Fungsi : Untuk memindahkan record untuk diakses oleh fungsi 21h dan 22h.
Register Input : Register Output :
AH = 24h
DS:DX = FCB
INTERRUPT 21h – Service 25h
Set Interrupt Vektor
Fungsi : Untuk merubah vektor interupsi ke suatu lokasi dengan merubah alamat awal vektor interupsi.
Register Input : Register Output :
AH = 25h
AL = Nomor Interupsi
DS:DX = Lokasi baru
Konflik : Phar Lap
INTERRUPT 21h – Service 27h
Random Block Read From FCB File
Fungsi : Untuk membaca sejumlah record dari suatu file.
Register Input : Register Output :
AH = 27h AL = Status
CX = Banyaknya record yang DTA = hasil pembacaan akan dibaca CX = Banyaknya record yang
DS:DX = FCB berhasil dibaca
INTERRUPT 21h – Service 28h
Random Block Write To FCB File
Fungsi : Untuk menulis sejumlah record ke suatu file
Register Input : Register Output :
AH = 28h AL = Status
CX = Banyaknya record yang CX = Banyaknya record yang akan ditulisi berhasil ditulis
DS:DX = FCB
DTA = Data dari record
INTERRUPT 21h – Service 2Fh
Get DTA Address
Fungsi : Untuk mengetahui alamat dari DTA yang digunakan.
Register Input : Register Output :
AH = 2Fh ES:BX = Lokasi DTA
INTERRUPT 21h – Service 30h
Get DOS Version
Fungsi : Untuk mengetahui versi DOS yang sedang digunakan
Register Input : Register Output :
AH = 30h AL = Angka mayor
AH = Angka minor
INTERRUPT 21h – Service 31h
Terminate And Stay Residen
Fungsi : Untuk meresidenkan suatu program.
Register Input : Register Output :
AH = 31h
AL = Kode return
DX = Besar memory dalam paragraf
INTERRUPT 21h – Service 33h
Extended Break Checking
Fungsi : Untuk menghidup dan matikan pengecekan tombol Ctrl+Break oleh fungsi DOS.
Register Input : Register Output :
AH = 33h Jika input
AL=0 AL = 0 untuk mengambil keterangan
DL=0 Off Ctrl+Break
DL=1 On
= 1 untuk merubah status Ctrl+Break
DL = 0 Ctrl+Break dijadikan Off
DL = 1 Ctrl+Break dijadikan On
INTERRUPT 21h – Service 34h
GET ADDRESS OF INDOS FLAG
Fungsi : Untuk mendapatkan alamat dari BAD (Bendera Aktif DOS). Nilai BAD akan bertambah pada saat interupsi dari DOS dijalankan dan akan berkurang saat interupsi dari DOS selesai. Dengan melihat pada BAD anda dapat mengetahui apakah interupsi dari DOS sedang aktif atau tidak(Lihat bagian residen).
Register Input : Register Output :
AH = 34h ES:BX = Alamat BAD
INTERRUPT 21h – Service 35h
Get Interrupt Vektor
Fungsi : Untuk mendapatkan alamat vektor interupsi dari suatu nomor interupsi.
Register Input : Register Output :
AH = 35h ES:BX = Alamat vektor interupsi
AL = Nomor Interupsi
INTERRUPT 21h – Service 3Ch
Create File Handle
Fungsi : Untuk menciptakan sebuah file baru dengan metode File Handle.
Register Input : Register Output :
AH = 3Ch Jika CF=0 maka
AL = Mode, dengan bit: AX=Nomor file handle
0 file Read only Jika CF=1 maka
1 file Hidden AX=Kode kesalahan
2 file System
3 Volume label
4 Cadangan
5 file Archive
DS:DX = Nama file ASCIIZ
INTERRUPT 21h – Service 3Dh
Open Existing File
Fungsi : Untuk membuka file yang telah ada dengan metode file handle.
Register Input : Register Output :
AH = 3Dh Jika CF=0 maka
AL = Mode, dengan bit: AX=Nomor file handle
0 untuk Read only Jika CF=1 maka
1 untuk Write only AX=Kode kesalahan
2 untuk Read/Write
DS:DX = Nama file ASCIIZ
INTERRUPT 21h – Service 3Eh
Close File Handle
Fungsi : Untuk menutup file handle
Register Input : Register Output :
AH = 3Eh CF=0 jika sukses
BX = Nomor file handle CF=1 jika gagal, maka
AX=Kode kesalahan
INTERRUPT 21h – Service 3Fh
Read From File Or Device Using File Handle
Fungsi : Untuk membaca data dari suatu file atau device.
Register Input : Register Output :
AH = 3Fh CF=0 jika sukses
BX = Nomor file handle AX=byte yang berhasil dibaca
CX = Banyaknya byte yang CF=1 jika gagal
akan dibaca AX=Kode kesalahan
DS:DX = Alamat buffer
INTERRUPT 21h – Service 40h
Write To File Or Device Using File Handle
Fungsi : Untuk menulisi file atau device.
Register Input : Register Output :
AH = 40h CF=0 jika sukses
BX = Nomor file handle AX=byte yang berhasil ditulisi
CX = Banyaknya byte yang CF=1 jika gagal akan ditulisi
AX=Kode kesalahan
DS:DX = Alamat data
INTERRUPT 21h – Service 41h
Delete File Using File Handle
Fungsi : Untuk menghapus file
Register Input : Register Output :
AH = 41h CF=0 jika sukses
CL = Nama file ASCIIZ CF=1 jika gagal, maka
AX=kode kesalahan
INTERRUPT 21h – Service 42h
Set Current File Position ‘
Fungsi : Untuk memindahkan pointer dari suatu file.
Register Input : Register Output :
AH = 42h CF=0 jika sukses
AL = Mode perpindahan: CF=1 jika gagal
00 dari awal file AX= kode kesalahan
01 dari posisi aktif
02 dari akhir file
BX = Nomor file handle
CX:DX = Banyaknya perpindahan
INTERRUPT 21h – Service 43h
Set And Get File Atribut
Fungsi : Untuk mengetahui dan merubah atribut dari suatu file. Register Input : Register Output :
AH = 43h Jika input AL=0, maka:
AL = 0 untuk mendapatkan atribut jika CF=0
file CX = atribut
1 untuk merubah atribut file jika CF=1
CX = atribut baru dengan bit: AX = Kode kesalahan
0 = Read Only
1 = Hidden
2 = System
5 = Archive
DS:DX = Nama file ASCIIZ
INTERRUPT 21h – Service 4Ch
Terminate With Return Code
Fungsi : Untuk menghentikan program dan mengembalikan kendali kepada DOS. Fungsi ini lebih efektif untuk digunakan dibandingkan dengan interupsi 20h.
Register Input : Register Output : Tidak ada
AH = 4Ch
AL = Kode return
INTERRUPT 21h – Service 56h
Rename File
Fungsi : Untuk mengganti nama file. Fungsi ini juga bisa memindahkan file ke directory lain.
Register Input : Register Output :
AH = 56h CF=0 jika sukses
DS:DX = Nama file ASCIIZ lama CF=1 jika gagal
ES:BX = Nama file ASCIIZ baru AX=Kode kesalahan
INTERRUPT 27h
Terminate And Stay Residen
Fungsi : Untuk meresidenkan program.
Register Input : Register Output :
DS:DX = Batas alamat residen
LabelLabel bisa anda definisikan dengan ketentuan akhir dari nama label tersebut harus berupa tanda titik dua (:). Pemberian nama label bisa digunakan:
- Huruf : A..Z (Huruf besar dan kecil tidak dibedakan)
- Angka : 0..9
- Karakter khusus : @ . _ $
Nama pada label tidak terdapat spasi dan didahului oleh angka, Contoh dari penulisan label yang benar: mulai: MOV CX,7. Nama label terpanjang yang dapat dikenali oleh assembler adalah 31 karakter.
KomentarUntuk memberikan komentar pada source file digunakan tanda ';'. Apapun yang dtuliskan dibelakang tanda ';' akan dianggap sebagai komentar, Contoh : mulai: MOV BX,7 ; berikan nilai 7 pada BX
Perintah MOVPerintah MOV digunakan untuk mengcopy nilai atau angka menuju suatu register,variabel atau memory. Adapun syntax untuk perintah MOV ini adalah :
MOV Tujuan,Asal
Sebagai contohnya : MOV AL,9 ; masukkan nilai 9 pada AL.
MOV AH,AL ; nilai AL=9 dan AH=9
MOV AX,9 ; AX=AH+AL hingga AH=0 dan AL:=9
Pada baris pertama(MOV AL,9), kita memberikan nilai 9 pada register AL. Kemudian pada baris kedua(MOV AH,AL) kita mengcopykan nilai register AL untuk AH. Jadi setelah operasi ini register AL akan tetap bernilai 9, dan register AH akan sama nilainya dengan AL atau 9. Pada baris ketiga(MOV AX,9), kita memberikan register AX nilai 9. Karena AX terdiri atas AH dan AL, maka register AH akan bernilai 0, sedangkan AL akan bernilai 9.
Perintah MOV akan mengcopykan nilai pada sumber untuk dimasukan ke Tujuan, nilai sumber tidaklah berubah. Inilah sebabnya MOV(E) akan kita terjemahkan disini dengan mengcopy, dan bukannya memindahkan.
Perintah INT
Didalam pemrograman assambler, kita akan banyak sekali menggunakan interupsi untuk membantu kita dalam mengerjakan suatu pekerjaan. Untuk menghasilkan suatu interupsi digunakan perintah INT dengan syntax:
INT NoInt
Dengan NoInt adalah nomor interupsi yang ingin dihasilkan. Sebagai contohnya bila kita ingin menghasilkan interupsi 21h, bisa dituliskan dengan: INT 21h, maka interupsi 21h akan segera terjadi.
Jenis operandInstruksi mesin melakukan operasi terhadap data. Pada umumnya data dikategorikan ke dalam angka, karakter dan data logika.
AngkaSetiap bahasa mesin mengandung tipe data numerik. Umunya terdapat tiga tipe data angka yang ada pada komputer yaitu:
1. Binary integer
2. Binary floating point
3. Desimal
Semua operasi pada internal komputer berupa data biner, namun user berinteraksi dengan bilangan desimal. Maka perlu dilakukan konversi dari desimal ke bilangan biner pada input dan konversi dari biner ke desmimal pada output. Bilangan desimal direpresentasikan dalam 4 bit kode biner maka 0=0000, 1=0001,...,8=1000, 9=1001. Sedangkan untuk desimal 246 = 0000 0010 0100 0110. Untuk bilangan negatif direpresentasikan dengan 4 bit yang diletakkan pada awal atau akhir string. Standar tanda yang digunakan adalah 1100 untuk bilangan positif dan 1101 untuk tanda bilangan negatif.
KarakterUmumnya bentuk data adalah teks atau kumpulan karakter. Sedangkan sistem komputer didesain untuk data biner. Maka sejumlah kode dalam urutan bit perlu di tentukan untuk merepresentasikan sebuah karakter. Saat ini standar kode yang digunakan untuk merepresentasikan karakter adalah American Standart Code for Information Interchange (ASCII). Setiap karakter pada kode ASCII direpresentasikan dengan 7 bit biner yang unik. Maka terdapat 128 karakter yang berbeda yang dapat direpresentasikan. Selain itu juga ada yang menggunakan Extended Binary Coded Decimal Interchange Code (EBCDIC) yang digunakan oleh IBM mainframe.
Data logikaPada umumnya setiap word atau yang lain merupakan satu unit data yang masing masing unit data memiliki nilai 0 atau 1. Ketika dipandang dengan cara ini, maka data tersebut dianggap sebagai data logika. Data logika hanya bernilai true “1” atau false “0”.
Jenis OperasiJumlah opcode dari sebuah mesin ke mesin lain beragam. Akan tetapi tipe operasi-operasi umum akan sama untuk semua mesin. Berikut dikategorikan operasi berdasarkan fungsi dan tipenya:
Transfer dataTipe instruksi mesin yang paling dasar yaitu instruksi transfer data. Pada instruksi transfer dataharus ditentukan beberapa hal. Pertama, penentuan lokasi sumber dan tujuan dari operan.Lokasinya dapat terletak di memori, register atau stack. Kedua, panjang data yang akan ditransfer harus diketahui. Ketiga, sama untuk semua instruksi dengan operan, cara pengalamatannya harus ditentukan.
Dari sisi aksi prosesor, operasi transfer data mungkin merupakan tipe yang paling sederhana. Jika kedua-duanya baik sumber maupun tujuan adalah register, maka prosesor hanya menyebabkan data dipindahkan dari satu register ke register lain (operasi internal prosesor). Jika salah satu atau kedua operan berada dalam memori, maka prosesor harus melakukan beberapa atau semua tindakan berikut:
1. Menghitung alamat memori, berdasarkan mode pengalamatan ( dibahas di bagian selanjutnya)
2. Jika alamat mengacu pada virtual memori, menerjemahkan dari alamat memori virtual ke alamat memori sebenarnya/fisik.
3. Menentukan apakah operan yang dituju ada di dalam chace
4. Jika tidak, berikan perintah ke modul memori.
AritmatikaKebanyakan mesin menyediakan operasi aritmatika / perhitungan dasar sepertitambah, kurang,kali dan bagi. Dimana operasi tersebut disediakan untuk menangani bilanganinteger bertanda (fixed-point), juga bilangan floating point atau desimal. Berikut contoh lain operasi yang termasuk jenis instruksi dengan satu operan:
· Absolute : mengambil nilai absolut/mutlak dari operan
· Negate : menegasikan operan
· Increment: menambahkan 1 nilai ke operan
· Decrement: mengurangi 1 nilai dari operan
Eksekusi instruksi aritmatika dapat melibatkan operasi transfer data untuk menempatkan operan dari input ke ALU, dan untuk mengantarkan output dari ALU.
LogikaKebanyakan mesin juga menyediakan berbagai operasi untuk memanipulasi setiap bit dari sebuah word atau unit (yang dapat diberi alamat) lainnya, operasi ini juga di sebut "bit twiddling". Bit-bit tersebut didasarkan pada operasi boolean.
Konversi
Instruksi konversi adalah instruksi-instruksi yang mengubah format atau beroperasi pada format data.Contohnya yaitu mengkonversi dari desimal ke biner.
Input/OutputSeperti yang kita ketahui, ada beberapa pendekatan I/O yang bisa diambil, diantaranya programmed I/O (isolated&memory mapped), DMA, dan penggunaan prosesor I/O. Implementasi instruksi I/O banyak dilakukan dengan hanya menyediakan beberapa instruksi I/O, dengan tindakan spesifik yang ditentukan oleh parameter, kode, atau kata perintah.
Kendali SistemInstruksi kendali sistem adalah instruksi yang dapat dieksekusi hanya ketika prosesor dalam keadaan tertentu atau mengeksekusi program pada area khusus dalam memori.Biasanya, instruksi ini dipesan untuk digunakan sistem operasi.Berikut beberapa contoh operasi kendali sistem. Sebuah instruksi kendali sistem boleh membaca atau mengubah kendali register. Contoh lainnya adalah instruksi untuk membaca atau memodifikasi penyimpanan protection key, seperti yang digunakan pada sistem memori EAS/390. Contoh lain adalah akses untuk memproses blok kontrol dalam sistem multiprogramming.
Kendali TransferUntuk semua tipe operasi yang sudah dibahas sejauh ini, instruksi selanjutnya yang akan dibahas tepat setelah ini, pada memori, adalah kendali transfer. Namun, pecahan yang signifikan dari instruksi dalam setiap program memiliki fungsi mengubah urutan eksekusi instruksi. Untuk instruksi ini, operasi yang dilakukan oleh prosesor
Beberapa hal yang perlu diperhatikan yaitu:
1. Dalam praktek penggunaan komputer, sebenarnya kita mengeksekusi tiap instruksi lebih dari sekali dan mungkin ribuan kali. Ini membutuhkan ribuan atau bahkan jutaan instruksi untuk mengimplementasikan aplikasi. Hal ini tidak mungkin jika tiap instruksi harus ditulis secara terpisah. Jika tabel atau daftar item akan diproses, dibutuhkan program looping. Satu urutan eksekusi akan dieksekusi berulang kali untuk memproses semua data.
2. Hampir semua program melibatkan beberapa pembuatan keputusan. Kita setuju komputer akan melakukan sesuatu jika suatu kondisi terpenuhi, dan melakukan hal lain jika dalam kondisi lain. Sebagai contoh, sebuah urutan instruksi mengitung akar kuadrat dari sebuh nilai. Pada awal urutan, tanda dari nilai tersebut diuji. Jika negatif, komputasi tidah dilakukan, tetapi kondisi eror yang akan dilaporkan.
3. Untuk mengubah dengan benar program yang besar atu sedang adalah tugas yang sangat sulit. Hal ini akan lebih mudah jika ada mekanisme untuk memecah tugas-tugas tersebut menjadi bagian-bagian kecil yang dapat dikerjakan sekali dalam satu waktu.
Bentuk perintah/intruksi :
MOV
Perintah MOV adalah perintah untuk mengisi, memindahkan,memperbaruhi isi suatu register, variable ataupun lokasi memory, Adapun tata penulisan perintah MOV adalah :
MOV [operand A], [Operand B]
Contoh :
MOV AH,02
Operand A adalah Register AH
Operand B adalah bilangan 02
Hal yang dilakukan oleh komputer untuk perintah diatas adalahmemasukan 02 ke register AH.
INT (Interrupt)
Bila anda pernah belajar BASIC, maka pasti anda tidak asing lagi dengan perintah GOSUB. Perintah INT juga mempunyai cara kerja yang sama dengan GOSUB, hanya saja subroutine yang dipanggil telah disediakan oleh memory komputer yang terdiri 2 jenis yaitu :
- Bios Interrupt ( interput yang disediakan oleh BIOS (INT 0 – INT 1F))
- Dos Interrupt ( Interrupt yang disediakan oleh DOS (INT 1F – keatas))
Push
Adalah perintah untuk memasukan isi register pada stack, dengan tata penulisannya:POP [operand 16 bit]
Pop
perintah yang berguna untuk mengeluarkan isi dari register/variable dari stack,dengan tata penulisannya adalah : POP [operand 16 bit]
RIP (Register IP)
Perintah ini digunakan untuk memberitahu komputer untuk memulai memproses program dari titik tertentu.
A (Assembler)
Perintah Assembler berguna untuk tempat menulis program Assembler.
-A100
0FD8:100
RCX (Register CX)
Perintah ini digunakan untuk mengetahui dan memperbaruhi isi register CX yang merupakantempat penampungan panjang program yang sedang aktif.
2. Tipe-tipe Operand dan Operasi
Tipe-tipe OperandOperand adalah sebuah objek yang ada pada operasi matematika yang dapat digunakan untuk melakukan operasi. Operand atau operator dalam bahasa C berbentuk simbol bukan berbentuk keyword atau kata yang biasa ada di bahasa pemrograman lain. Simbol yang digunakan bukan karakter yang ada dalam abjad tapi ada pada keyboard kita seperti =,,* dan sebagainya.
Tipe-tipe operand diantaranya :
1. Addresses (akan dibahas pada addressing modes)
2. Numbers :
– Integer or fixed point
– Floating point
– Decimal (BCD)
3. Characters :
– ASCII
– EBCDIC
4. Logical Data : Bila data berbentuk binary: 0 dan 1
Jenis-jenis operator adalah sebagai berikut :
1. Operator Aritmetika
Operator untuk melakukan fungsi aritmetika seperti : +(penjumlahan), – (mengurangkan), * (mengalikan), / (membagi).
2. Operator relational
Operator untuk menyatakan relasi atau perbandingan antara dua operand, seperti > (lebih besr), =(lebih besar atau sama), <= (lebih kecil atau sama), == (sama), != (tidak sama).
3. Operator Logik
Operator untuk merelasikan operand secara logis seperti && (and), || (or), !(not).
Tipe-tipe Operasi
Dalam perancangan arsitektur komputer, jumlah kode operasi akan sangat berbeda untuk masing-masing komputer, tetapi terdapat kemiripan dalam jenis operasinya.
Jenis operasi komputer
-Transfer data – konversi
1. Menetapkan lokasi operand sumber dan operand tujuan.
2. Lokasi-lokasi tersebut dapat berupa memori, register atau bagian paling atas daripada stack.
3. Menetapkan panjang data yang dipindahkan.
4. Menetapkan mode pengalamatan.
-Aritmatika – input/output
Tindakan CPU untuk melakukan operasi arithmetic :
1. Transfer data sebelum atau sesudah.
2. Melakukan fungsi dalam ALU.
3. Menset kode-kode kondisi dan flag.
-Logika – kontrol sistem dan transfer kontrol
Tindakan CPU sama dengan arithmetic
Operasi set instruksi untuk operasi logical :
1. AND, OR, NOT, EXOR
2. COMPARE : melakukan perbandingan logika.
3. TEST : menguji kondisi tertentu.
4. SHIFT : operand menggeser ke kiri atau kanan menyebabkan
konstanta pada ujung bit.
5. ROTATE : operand menggeser ke kiri atau ke kanan dengan ujung yang terjalin.
3. 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 setelah 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. Setelah 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, dimana 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. Adapun cara yang dilakukan adalah mengalikan AH dengan 10 dan menambahkan isi AL dengan hasilkali AH. Hasil pertambahan tersebut akan diletakkan di register AL kemudian AH akan dinolkan.
Contoh:
Hexa dari BCD 53 adalah …
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. Adapun cara yang dilakukan adalah membagi AL dengan 10, kemudian 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. Jika 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 sedangkan 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 digunakan setelah operasi pada pertambahan atau perkalian yang menyebabkan Carry. Misalkan 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 digunakan 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” kemudian hasilnya disimpan pada “Tujuan”. Bila hasil penjumlahan tidak tertampung seluruhnya pada 204 “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 umumnya digunakan untuk melihat kondisi suatu bit dengan menolkan bit-bit lainnya.
Contoh:
AND AL,00001000b ; AL=0000?000
JZ Nol ; Jika 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 didefinisikan 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 tersebut bertipe Far.
– Mengganti nilai IP dengan offset dari procedure. Lakukan intruksi yang terdapat pada alamat baru(CS:IP) sampai bertemu dengan intruksi RET, setelah 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 adalah -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 adalah 0 maka digunakan 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). Umumnya CLI diberikan pada saat akan dilakukan proses yang fatal, dimana terjadinya interupsi akan menghancurkan proses tersebut.
Contoh:
Kita akan mengubah alamat sebuah stack, dengan mengubah SS dan SP. Selama SS dan SP diubah, interupsi tidak boleh terjadi. Hal ini dikarenakan 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 tersebut. Biasanya Carry flag akan bernilai 0 bila operasi berhasil dan bernilai 1 bila operasi mengalami kegagalan. Dengan menggunakan perintah CMC disertai dengan ADC(pertambahan dengan carry flag), anda 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”. Adapun cara yang dilakukan adalah dengan mengurangkan “operand1” dengan “operand2” (operand1- operand2). “Operand1” dan “operand2” yang dibandingkan harus mempunyai 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. 209 Jika direction flag bernilai 1 maka setiap selesai perbandingan register SI dan DI akan ditambah dengan 1, sebaliknya jika 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. Jika direction flag bernilai 1 maka setiap selesai perbandingan register SI dan DI akan ditambah dengan 2, sebaliknya jika 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:
Anda dapat memanfaatkan fungsi CWD ini untuk mendapatkan 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 210
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. Jika 4 bit rendah dari AL lebih besar dari 9 maka AL akan dikurangi dengan 10 dan AF diset menjadi 1, sebaliknya jika 4 bit rendah AL lebih kecil atau sama dengan 9 maka AF akan dijadikan 0. DAA sebenarnya adalah sama dengan AAA kecuali dalam hal bahwa DAA dapat mengatur baik bilangan 8 bit maupun 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. Jika 4 bit rendah dari AL lebih besar dari 9 maka AL akan dikurangi dengan 6 dan AF diset menjadi 1, sebaliknya jika 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 211
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 maupun memory. Bila anda ingin mengurangi suatu register ataupun memory dengan 1, gunakanlah perintah DEC ini karena selain lebih cepat, perintah DEC juga menggunakan memory lebih sedikit dibandingkan dengan perintah SUB.
Contoh:
Kita dapat mengimplementasikan perintah Loop dengan menggunakan DEC. Di bawah ini kita akan menjumlahkan bilangan BX sampai 1. Misalnya 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 sedangkan sisa pembagian akan disimpan pada regiser AH. Jika “sumber” bertipe 16 bit maka dilakukan pembagian DX:AX dengan “Sumber” (DX:AX / Sumber). Hasil pembagian akan disimpan pada register AX sedangkan sisa pembagian akan disimpan pada regiser DX.
Contoh:
Untuk memeriksa apakah suatu bilangan merupakan kelipatan 3 atau bukan, 212 anda bisa membaginya dengan tiga. Bila merupakan kelipatan 3, maka sisa pembagian akan 0, sebaliknya jika bukan kelipatan tiga, sisa pembagian tidak akan 0. Macro ini akan menjadikan AL=1 bila bilangan yang ditest merupakan 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 digunakan terutama pada komputer yang mempunyai procesor lebih dari satu dan dirangkai secara paralel. Perintah ESC akan menyebabkan procesor yang sedang aktif dinonaktifkan sehingga procesor yang lain dapat digunakan.
Mnemonic : HLT (Halt)
Tersedia pada : 8088 keatas
Syntax : HLT
Pengaruh flag : Tidak ada 213
Fungsi : Untuk menghentikan program atau membuat procesor dalam keadaan tidak aktif. Setelah mendapat perintah ESC ini, procesor harus mendapat 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 digunakan 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 sedangkan sisa pembagian akan disimpan pada regiser AH. Jika sumber bertipe 16 bit maka dilakukan pembagian DX:AX dengan Sumber(DX:AX / Sumber). Hasil pembagian akan disimpan pada register AX sedangkan 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 digunakan untuk perkalian pada bilangan bertanda. Bila “sumber” bertipe 8 bit maka akan dilakukan perkalian pada register AL dengan “sumber” kemudian hasilnya disimpan pada AX. Bila “sumber” bertipe 16 bit maka akan dilakukan perkalian pada register AX dengan “sumber” kemudian 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. Jika “Operand” merupakan register AL maka akan diambil data pada port sebanyak 1 byte, bila “operand” merupakan 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 tersebut.
Contoh:
Interrupt dari keyboard diatur oleh PIC(Programmable Interrupt Controller) yang berada pada port 21h. Jika 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 anda ingin menambah suatu register ataupun memory dengan 1, gunakanlah perintah INC ini karena selain lebih cepat, perintah INC juga menggunakan 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. Jika Direction flag bernilai 0(dengan CLD) maka setelah intruksi INS dijalankan register DI akan ditambah secara otomatis, sebaliknya jika Direction flag bernilai 1(dengan STD) maka register DI akan dikurang secara otomatis. Anda bisa menggunakan intruksi pengulangan pada string disertai 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 216
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. Jika Direction flag bernilai 0(dengan CLD) maka setelah intruksi INS dijalankan register DI akan ditambah dengan 1 secara otomatis, sebaliknya jika Direction flag bernilai 1(dengan STD) maka register DI akan dikurang dengan 1 secara otomatis. Anda bisa menggunakan intruksi pengulangan pada string disertai 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. Jika Direction flag bernilai 0(dengan CLD) maka setelah intruksi INS dijalankan register DI akan ditambah dengan 2 secara otomatis, sebaliknya jika Direction flag bernilai 1(dengan STD) maka register DI akan dikurang dengan 2 secara otomatis. Anda bisa menggunakan intruksi pengulangan pada string disertai dengan perintah INSW ini.
Contoh:
REP INSW
Mnemonic : INT (Interrupt)
Tersedia pada : 8088 keatas
Syntax : INT NoInt
Pengaruh flag : IF, TF
Fungsi : Untuk membangkitkan software interrupt yang bernomor 0 sampai 255. Setiap terjadi suatu interupsi data flags, CS dan IP akan disimpan pada 217 stack. Data ini selanjutmya digunakan sebagai alamat kembali setelah komputer melakukan suatu rutin atau interrupt handler.
Mnemonic : INTO (Interrupt If Overflow)
Tersedia pada : 8088 keatas
Syntax : INTO
Pengaruh Flag : Tidak ada
Fungsi : Jika Overflow flag bernilai 1, maka INTO akan melaksanakan interrupt 04h, sebaliknya jika Overflow flag bernilai 0 maka interrupt 04h tidak akan dilaksanakan. INTO hampir sama dengan INT hanya INTO khusus untuk membangkitkan interrupt 04h jika OF=1.
Mnemonic : IRET (Interrupt Return)
Tersedia pada : 8088 keatas
Syntax : IRET
Pengaruh Flag : OF, DF, IF, TF, SF, ZF, AF, PF, CF
Fungsi : Digunakan 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 digunakan setelah 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 digunakan setelah 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 219 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
Syntax : JBE Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Melakukan suatu loncatan menuju “tujuan” bila CF=1 atau ZF=1. “Tujuan” dapat berupa nama label ataupun alamat memory. Pada lompatan bersyarat ini, besarnya lompatan tidak bisa melebihi -128 dan +127 byte. JBE identik dengan perintah JNA. Catatan : JBE dan JNA melakukan operasi pada bilangan tidak bertanda.
Contoh:
CMP AX,BX
JBE KecilSama
Pada perintah diatas, loncatan menuju label “KecilSama” akan dilakukan bila pada perintah CMP diatasnya register AX lebih kecil atau sama dengan register BX.
Mnemonic : JC (Jump On Carry)
Tersedia pada : 8088 keatas
Syntax : JC Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Sama dengan JB dan JNAE.
Mnemonic : JCXZ (Jump If CX = 0)
Tersedia pada : 8088 keatas
Syntax : JCXZ Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Melakukan suatu loncatan menuju “tujuan” bila register CX=0. “Tujuan” dapat berupa nama label ataupun alamat memory. Pada lompatan bersyarat ini, besarnya lompatan tidak bisa melebihi -128 dan +127 byte.
Contoh:
MOV AH,00 ;
LEA DX,Buffer ; Masukan string dari keyboard
INT 21h ;
MOV CX,Buffer[1] ; CX = banyaknya masukan string
JCXZ Tdk ; Jika tidak ada, lompat ke “Tdk”
Mnemonic : JE (Jump Equal)
Tersedia pada : 8088 keatas
Syntax : JE Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Melakukan suatu loncatan menuju “Tujuan” bila ZF=1. “Tujuan” dapat berupa nama label ataupun alamat memory. Pada lompatan bersyarat ini, besarnya lompatan tidak bisa melebihi -128 dan +127 byte. JE identik dengan JZ.
Contoh:
CMP AX,BX
JE Sama
Pada perintah diatas, loncatan menuju label “Sama” akan dilakukan bila pada perintah CMP diatasnya register AX sama dengan register BX yang menyebabkan zero flag bernilai 1.
Mnemonic : JG (Jump If Greater)
Tersedia pada : 8088 keatas
Syntax : JG Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Melakukan suatu loncatan menuju “tujuan” bila ZF=0 dan SF=OF. “Tujuan” dapat berupa nama label ataupun alamat memory. Pada lompatan bersyarat ini, besarnya lompatan tidak bisa melebihi -128 dan +127 byte. JG identik dengan perintah JNLE. Catatan : JG dan JNLE melakukan operasi pada bilangan bertanda.
Contoh:
CMP AX,BX
JG Besar
Pada perintah diatas, loncatan menuju label “Besar” akan dilakukan bila pada perintah CMP diatasnya register AX lebih besar dibandingkan dengan register BX.
Mnemonic : JGE (Jump If Greater or Equal)
Tersedia pada : 8088 keatas
Syntax : JGE Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Melakukan suatu loncatan menuju “tujuan” bila SF=OF. “Tujuan” dapat berupa nama label ataupun alamat memory. Pada lompatan bersyarat ini, besarnya lompatan tidak bisa melebihi -128 dan +127 byte. JGE identik dengan perintah JNL. Catatan : JGE dan JNL melakukan operasi pada bilangan bertanda.
Contoh:
CMP AX,BX
JGE BesarSama
Pada perintah diatas, loncatan menuju label “BesarSama” akan dilakukan bila pada perintah CMP diatasnya register AX lebih besar atau sama dengan register BX.
Mnemonic : JL (Jump If Less Than)
Tersedia pada : 8088 keatas
Syntax : JL Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Melakukan suatu loncatan menuju “tujuan” bila SF tidak sama dengan OF. “Tujuan” dapat berupa nama label ataupun alamat memory. Pada lompatan bersyarat ini, besarnya lompatan tidak bisa melebihi -128 dan +127 byte. JL identik dengan perintah JNGE. Catatan : JL dan JNGE melakukan operasi pada bilangan bertanda.
Contoh:
CMP AX,BX
JL Kecil
Pada perintah diatas, loncatan menuju label “Kecil” akan dilakukan bila pada perintah CMP diatasnya register AX lebih kecil dibandingkan dengan register BX.
Mnemonic : JLE (Jump If Less Than or Equal)
Tersedia pada : 8088 keatas
Syntax : JLE Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Melakukan suatu loncatan menuju “tujuan” bila ZF=1 atau SF tidak sama dengan OF. “Tujuan” dapat berupa nama label ataupun alamat memory. Pada lompatan bersyarat ini, besarnya lompatan tidak bisa melebihi -128 dan +127 byte. JLE identik dengan perintah JNG. Catatan : JLE dan JNG melakukan operasi pada bilangan bertanda.
Contoh:
CMP AX,BX
JLE KecilSama
Pada perintah diatas, loncatan menuju label “KecilSama” akan dilakukan bila pada perintah CMP diatasnya register AX lebih kecil atau sama dengan register BX.
Mnemonic : JMP (Jump)
Tersedia pada : 8088 keatas
Syntax : JMP Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Melakukan lompatan menuju “Tujuan” yang dapat berupa suatu label maupun alamat memory. Tidak seperti lompatan bersyarat, perintah JMP dapat melakukan lompatan ke segment lain. Contoh: JMP Proses
Mnemonic : JNA (Jump If Not Above)
Tersedia pada : 8088 keatas
Syntax : JNA Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Identik dengan JBE.
Mnemonic : JNAE (Jump If Not Above or Equal)
Tersedia pada : 8088 keatas
Syntax : JNAE Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Identik dengan JB.
Mnemonic : JNB (Jump If Not Bellow)
Tersedia pada : 8088 keatas
Syntax : JNB Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Identik dengan JAE.
Mnemonic : JNBE (Jump If Not Bellow or Equal)
Tersedia pada : 8088 keatas
Syntax : JNBE Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Identik dengan JA.
Mnemonic : JNC (Jump Not Carry)
Tersedia pada : 8088 keatas
Syntax : JNC Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Identik dengan JNB.
Mnemonic : JNE (Jump Not Equal)
Tersedia pada : 8088 keatas
Syntax : JNE Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Melakukan suatu loncatan menuju “tujuan” bila ZF=0. “Tujuan” dapat berupa nama label ataupun alamat memory. Pada lompatan bersyarat ini, besarnya lompatan tidak bisa melebihi -128 dan +127 byte. JNE identik dengan perintah JNZ.
Contoh:
CMP AX,BX
JNE TidakSama
Pada perintah diatas, loncatan menuju label “TidakSama” akan dilakukan bila pada perintah CMP diatasnya register AX tidak sama dengan register BX.
Mnemonic : JNG (Jump If Not Greater)
Tersedia pada : 8088 keatas
Syntax : JNG Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Identik dengan JLE.
Mnemonic : JNGE (Jump If Not Greater or Equal)
Tersedia pada : 8088 keatas
Syntax : JNGE Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Identik dengan JL.
Mnemonic : JNL (Jump If Not Less Than)
Tersedia pada : 8088 keatas
Syntax : JNL Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Identik dengan JGE.
Mnemonic : JNLE (Jump If Not Less or Equal)
Tersedia pada : 8088 keatas
Syntax : JNLE Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Identik dengan JG.
Mnemonic : JNO (Jump On Not Overflow)
Tersedia pada : 8088 keatas
Syntax : JNO Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Melakukan suatu loncatan menuju “tujuan” bila OF=0. “Tujuan” dapat berupa nama label ataupun alamat memory. Pada lompatan bersyarat ini, besarnya lompatan tidak bisa melebihi -128 dan +127 byte. Catatan : JNO melakukan operasi pada bilangan bertanda.
Mnemonic : JNP (Jump On No Parity)
Tersedia pada : 8088 keatas
Syntax : JNP Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Melakukan suatu loncatan menuju “tujuan” bila PF=0. “Tujuan” dapat berupa nama label ataupun alamat memory. Pada lompatan bersyarat ini, besarnya lompatan tidak bisa melebihi -128 dan +127 byte. JNP identik dengan perintah JPO. Catatan : JNP dan JPO melakukan operasi pada bilangan tidak bertanda.
Mnemonic : JNS (Jump On No Sign)
Tersedia pada : 8088 keatas
Syntax : JNS Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Melakukan suatu loncatan menuju “tujuan” bila SF=0. “Tujuan” dapat berupa nama label ataupun alamat memory. Pada lompatan bersyarat ini, besarnya lompatan tidak bisa melebihi -128 dan +127 byte. Catatan : JNS melakukan operasi pada bilangan bertanda.
Mnemonic : JNZ (Jump On Not Zero)
Tersedia pada : 8088 keatas
Syntax : JNZ Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Identik dengan JNE.
Mnemonic : JO (Jump On Overflow)
Tersedia pada : 8088 keatas
Syntax : JO Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Melakukan suatu loncatan menuju “tujuan” bila OF=1. “Tujuan” dapat berupa nama label ataupun alamat memory. Pada lompatan bersyarat ini, besarnya lompatan tidak bisa melebihi -128 dan +127 byte. Catatan : JO melakukan operasi pada bilangan bertanda.
Mnemonic : JP (Jump On Parity)
Tersedia pada : 8088 keatas
Syntax : JP Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Melakukan suatu loncatan menuju “tujuan” bila PF=1. “Tujuan” dapat berupa nama label ataupun alamat memory. Pada lompatan bersyarat ini, besarnya lompatan tidak bisa melebihi -128 dan +127 byte. JP identik dengan perintah JPE.
Mnemonic : JPE (Jump On Parity Even)
Tersedia pada : 8088 keatas
Syntax : JPE Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Identik dengan JP.
Mnemonic : JPO (Jump On Parity Odd)
Tersedia pada : 8088 keatas
Syntax : JPO Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Identik dengan JNP.
Mnemonic : JS (Jump On Sign)
Tersedia pada : 8088 keatas
Syntax : JS Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Melakukan suatu loncatan menuju “tujuan” bila SF=1. “Tujuan” dapat berupa nama label ataupun alamat memory. Pada lompatan bersyarat ini, besarnya lompatan tidak bisa melebihi -128 dan +127 byte. Catatan : JS melakukan operasi pada bilangan bertanda.
Mnemonic : JZ (Jump On Zero)
Tersedia pada : 8088 keatas
Syntax : JZ Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Identik dengan JE.
Mnemonic : LAHF (Load Flags Into AH Register)
Tersedia pada : 8088 keatas
Pengaruh flag : Tidak Ada
Syntax : LAHF
Fungsi : Untuk mengcopykan CF, PF, AF, ZF dan SF yang terletak pada bit ke 0, 2, 4, 6 dan 7 dari flags register menuju register AH pada bit yang sesuai(0, 2, 4, 6 dan 7).
Contoh:
Dengan fungsi ini, anda bisa menyimpan 8 bit rendah dari flags register untuk menghindari perubahan akibat dari suatu proses, seperti:
LAHF ; Simpan flags pada AH
PUSH AX ; Nilai AH disimpan ke stack
+——–+ | Proses | +——–+
POP AX ; Keluarkan AH dari stack
SAHF ; Masukkan ke flag register
Mnemonic : LDS (Load Pointer Using DS Register)
Tersedia pada : 8088 keatas
Syntax : LDS Operand,Mem32
Pengaruh flag : Tidak Ada
Fungsi : Untuk menyimpan Double Word dari memory. 16 bit rendah akan disimpan pada “Operand” sedangkan 16 bit tingginya akan disimpan pada register DS. “Mem32” mencatat lokasi dari suatu memory yang didefinisikan dengan tipe Double Word(DD). Contoh:
TData: JMP Proses
Tabel DD ?,?,? Proses:
LDS BX,Tabel Setelah intruksi diatas dijalankan, maka pasangan register DS:BX akan mencatat alamat dari variabel “Tabel”.
Mnemonic : LEA (Load Effective Address)
Tersedia pada : 8088 keatas
Syntax : LEA Operand,Mem16
Pengaruh flag : Tidak Ada
Fungsi : Untuk mendapatkan alamat efektif atau offset dari “Mem16” dimana “Operand” merupakan suatu register 16 bit. Perintah LEA hampir sama dengan perintah OFFSET yang juga digunakan untuk mendapatkan offset dari suatu memory. Perintah LEA lebih fleksibel untuk digunakan dibandingkan dengan perintah OFFSET karena dengan LEA kita bisa memberikan tambahan nilai pada “Mem16”.
Contoh:
TData :JMP Proses
Kal ‘0123456789abcd’
Proses:
MOV SI,10
LEA BX,Kal[SI]
Dengan perintah diatas, register BX akan mencatat offset ke 10 dari Kal.
Mnemonic : LES (Load Pointer Using ES Register)
Tersedia pada : 8088 keatas
Syntax : LES Operand,Mem32
Pengaruh flag : Tidak Ada
Fungsi : Untuk menyimpan Double Word dari memory. 16 bit rendah akan disimpan pada “Operand” sedangkan 16 bit tingginya akan disimpan pada register ES. “Mem32” mencatat lokasi dari suatu memory yang didefinisikan dengan tipe Double Word(DD). Contoh:
TData:
JMP Proses
Tabel DD ?,?,?
Proses:
LES BX,Tabel
Setelah intruksi diatas dijalankan, maka pasangan register ES:BX akan mencatat alamat dari variabel “Tabel”.
Mnemonic : LOCK (Lock The BUS)
Tersedia pada : 8088 keatas
Syntax : LOCK Operand
Pengaruh flag : Tidak Ada
Fungsi : Perintah ini digunakan terutama pada komputer yang mempunyai procesor lebih dari satu. Perintah LOCK mengunci suatu area terhadap pemakaian oleh mikroprocesor lainnya. Catatan: Perintah XCHG selalu mengaktifkan LOCK.
Mnemonic : LODSB (Load A Byte From String Into AL)
Tersedia pada : 8088 keatas
Syntax : LODSB
Pengaruh flag : Tidak Ada
Fungsi : Untuk mengcopy data 1 byte dari alamat DS:SI ke register AL.
Mnemonic : LOOP
Tersedia pada : 8088 keatas
Syntax : LOOP Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Untuk melakukan suatu proses yang berulang (Looping) dengan CX sebagai counternya. Perintah LOOP akan mengurangkan CX dengan 1 kemudian dilihat apakah CX telah mencapai nol. Proses looping akan selesai jika register CX telah mencapai nol. Oleh karena inilah maka jika kita menjadikan CX=0 pada saat pertama kali, kita akan mendapatkan suatu pengulangan yang terbanyak karena pengurangan 0-1=-1(FFFF). Catatan: LOOP hanya dapat melakukan lompatan menuju “Tujuan” bila jaraknya tidak lebih dari -128 dan +127 byte. Contoh: XOR CX,CX ; Melakukan pengulangan Ulang: ; sebanyak FFFF kali LOOP Ulang ; 231
Mnemonic : LOOPE ( Loop While Equal)
Tersedia pada : 8088 keatas
Syntax : LOOPE Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Untuk melakukan pengulangan selama register CX tidak sama dengan 0 dan ZF=1. LOOPE hanya dapat melakukan lompatan menuju “Tujuan” bila jaraknya tidak lebih dari -128 dan +127 byte. LOOPE identik dengan LOOPZ.
Mnemonic : LOOPNE (Loop While Not Equal)
Tersedia pada : 8088 keatas
Syntax : LOOPNE Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Untuk melakukan pengulangan selama register CX tidak sama dengan 0 dan ZF=0. LOOPNE hanya dapat melakukan lompatan menuju “Tujuan” bila jaraknya tidak lebih dari -128 dan +127 byte. LOOPE identik dengan LOOPNZ.
Mnemonic : LOOPNZ (Loop While Not Zero)
Tersedia pada : 8088 keatas
Syntax : LOOPNZ Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Identik dengan LOOPNE.
Mnemonic : LOOPZ
Tersedia pada : 8088 keatas
Syntax : LOOPZ Tujuan
Pengaruh flag : Tidak Ada
Fungsi : Identik dengan LOOPE.
Mnemonic : MOV (Move)
Tersedia pada : 8088 keatas
Syntax : MOV Tujuan,Sumber
Pengaruh flag : Tidak Ada
Fungsi : Untuk mengcopykan isi “Sumber” ke “Tujuan”. Antara “Sumber” dan “Tujuan” harus mempunyai tipe data yang sama, seperti AL dan BL, AX dan BX. Pada perintah MOV ini harus anda perhatikan bahwa:
– Segment register tidak bisa langsung diisi nilainya, seperti:
MOV ES,0B800h
Untuk masalah seperti ini anda bisa menggunakan register general purpose sebagai perantara, seperti:
MOV AX,0B800h
MOV ES,AX
– Register CS sebaiknya tidak digunakan sebagai “Tujuan” karena hal ini akan mengacaukan program anda.
– Pengcopyan data antar segment register tidak bisa digunakan, seperti:
MOV ES,DS
Untuk masalah seperti ini anda bisa menggunakan register general purpose atau stack sebagai perantara, seperti:
MOV AX,DS
MOV ES,AX atau:
PUSH DS
POP ES
– Pengcopyan data antar lokasi memory, seperti:
MOV A,B
Untuk masalah seperti ini anda bisa menggunakan suatu register sebagai perantara, seperti:
MOV AX,B
MOV A,AX
Mnemonic : MOVSW (Move String Byte By Byte)
Tersedia pada : 8088 keatas
Syntax : MOVSB
Pengaruh flag : Tidak Ada
Fungsi : Untuk mengcopy data 1 byte dari alamat DS:SI ke alamat ES:DI. Bila DF=0(CLD) maka setelah intruksi MOVSB dijalankan, register SI dan DI akan ditambah dengan 1 sebaliknya jika DF=1(STD) maka register SI dan DI akan dikurang dengan 1.
Mnemonic : MOVSW (Move String Word By Word)
Tersedia pada : 8088 keatas
Syntax : MOVSW
Pengaruh flag : Tidak Ada
Fungsi : Untuk mengcopy data 1 Word dari alamat DS:SI ke alamat ES:DI. Bila DF=0(CLD) maka setelah intruksi MOVSW dijalankan, register SI dan DI akan ditambah dengan 2 sebaliknya jika DF=1(STD) maka register SI dan DI akan dikurang dengan 2.
Mnemonic : MUL (Multiply)
Tersedia pada : 8088 keatas
Syntax : MUL Sumber
Pengaruh flag : OF, CF
Fungsi : Bila “Sumber” bertipe 8 bit maka akan dilakukan perkalian antara “Sumber” dengan AL. Hasilnya disimpan pada register AX. Bila “Sumber” bertipe 16 bit maka akan dilakukan perkalian antara “Sumber” dengan AX. Hasilnya disimpan pada pasangan register DX:AX.
Contoh:
MUL BH ; AX = BH * AL
MUL BX ; DX:AX = BX * AX 234
Mnemonic : NEG (Negate)
Tersedia pada : 8088 keatas
Syntax : NEG Operand
Pengaruh flag : OF, SF, ZF, AF, PF, CF
Fungsi : Untuk mengubah “Operand” menjadi negatif. Contoh: MOV BH,1 ; BH = 01h NEG BH ; BH = FFh
Mnemonic : NOT
Tersedia pada : 8088 keatas
Syntax : NOT Operand
Pengaruh flag : Tidak Ada
Fungsi : Membalikkan bit pada operand. Jika bit operand bernilai 0 akan dijadikan 1 sebaliknya jika 1 akan dijadikan 0. Contoh: MOV AL,10010011b NOT AL ; AL = 01101100b \
Mnemonic : OR
Tersedia pada : 8088 keatas
Syntax : OR Tujuan,Sumber
Pengaruh flag : OF, SF, ZF, PF, CF
Fungsi : Melakukan logika OR antara “Tujuan” dan “Sumber”. Hasil dari operasi OR diletakkan pada “Tujuan”. Instruksi OR umumnya digunakan untuk menjadikan suatu bit menjadi 1.
Contoh:
OR AL,00000001b ; Jadikan bit ke 0 dari AL menjadi 1
Mnemonic : OUT (Output to Port)
Tersedia pada : 8088 keatas
Syntax : OUT NoPort,Operand
Pengaruh flag : Tidak ada
Fungsi : Untuk memasukkan 1 byte atau 1 word dari “operand” ke “NoPort” sesuai dengan tipe data “operand”. Jika “Operand” merupakan register AL maka akan dikirimkan data pada port sebanyak 1 byte, bila “operand” merupakan register AX maka akan dikirimkan data pada port sebanyak 1 word. “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 tersebut.
Mnemonic : OUTS (Output String To Port)
Tersedia pada : 8088 keatas
Syntax : OUTS NoPort,Operand
Pengaruh flag : Tidak ada
Fungsi : Untuk mengirimkan data dari “operand” ke “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 dikirimkan menuju port. Data yang akan dikirimkan menuju port disimpan pada lokasi ES:SI.
Jika Direction flag bernilai 0(dengan CLD) maka setelah intruksi OUTS dijalankan register SI akan ditambah secara otomatis, sebaliknya jika Direction flag bernilai 1(dengan STD) maka register SI akan dikurang secara otomatis. Anda bisa menggunakan intruksi pengulangan pada string disertai dengan perintah OUTS ini.
Mnemonic : OUTSB (Output String Byte To Port)
Tersedia pada : 8088 keatas
Syntax : OUTSB
Pengaruh flag : Tidak ada
Fungsi : Untuk memasukkan data dari lokasi DS:SI ke nomor port yang dicatat oleh register DX sebanyak 1 byte. Jika Direction flag bernilai 0(dengan CLD) maka setelah intruksi OUTSB dijalankan register SI akan ditambah dengan 1 secara otomatis, sebaliknya jika Direction flag bernilai 1(dengan STD) maka register SI akan dikurang dengan 1 secara otomatis. Anda bisa menggunakan intruksi pengulangan pada string disertai dengan perintah OUTSB
Mnemonic : OUTSW (Output String Wyte To Port)
Tersedia pada : 8088 keatas
Syntax : OUTSW
Pengaruh flag : Tidak ada
Fungsi : Untuk memasukkan data dari lokasi DS:SI ke nomor port yang dicatat oleh register DX sebanyak 1 word. Jika Direction flag bernilai 0(dengan CLD) maka setelah intruksi OUTSW dijalankan register SI akan ditambah dengan 2 secara otomatis, sebaliknya jika Direction flag bernilai 1(dengan STD) maka register SI akan dikurang dengan 2 secara otomatis. Anda bisa menggunakan intruksi pengulangan pada string disertai dengan perintah OUTSW ini.
Mnemonic : POP (Pop A Word From Stack)
Tersedia pada : 8088 keatas
Syntax : POP Tujuan
Pengaruh flag : Tidak ada
Fungsi : Untuk mengambil data 1 word dari stack(SS:SP) dan disimpan pada “Tujuan”. Setelah intruksi POP dijalankan register SP akan ditambah dengan 2.
Contoh:
PUSH DS
POP ES
Mnemonic : POPA (Pop All General Purpose Registers)
Tersedia pada : 8088 keatas
Syntax : POPA
Pengaruh flag : Tidak ada
Fungsi : Untuk mengambil 8 word dari stack menuju register berturut-turut DI, SI, BP, SP, BX, DX, CX dan AX. Dengan PUSHA program anda akan berjalan lebih cepat dan efesian dibandingkan bila anda menyimpannya dengan cara:
POP DI
POP SI
POP BP
POP SP
POP BX
POP DX
POP CX
POP AX
Mnemonic : POPF (Pop Flags Off Stack)
Tersedia pada : 8088 keatas
Syntax : POPF
Pengaruh flag : OF, DF, IF, TF, SF, ZF, AF, PF, CF
Fungsi : Untuk mengambil 1 word dari stack ke flags registers. Setelah intruksi POPF dijalankan register SP akan ditambah dengan 2.
Mnemonic : PUSH (Push Operand Onto Stack)
Tersedia pada : 8088 keatas
Syntax : PUSH Sumber
Pengaruh flag : Tidak ada
Fungsi : Untuk menyimpan data 1 word dari “Sumber” ke stack(SS:SP). “Sumber” merupakan operand yang bertipe 16 bit. Setelah intruksi PUSH dijalankan register SP akan dikurang dengan 2.
Mnemonic : PUSHF (Push Flags Onto Stack)
Tersedia pada : 8088 keatas
Syntax : PUSHF
Pengaruh flag : Tidak ada
Fungsi : Untuk menyimpan flags registers ke stack. Intruksi ini merupakan kebalikan dari intruksi POPF. Setelah intruksi PUSHF dijalankan register SP akan dikurang dengan 2.
Mnemonic : RCL (Rotate Through Carry Left)
Tersedia pada : 8088 keatas
Syntax : RCL Operand,Reg
Pengaruh flag : OF, CF
Fungsi : Untuk memutar “Operand” sebanyak “Reg” kali ke kiri melalui CF. Bit yang tergeser keluar dari kiri akan dimasukkan pada CF dan nilai CF akan dimasukkan pada bit terkanan dari “Operand”.
Pada mikroprosesor 8088 “Reg” haruslah berupa register CL atau CX bila perputaran yang dilakukan terhadap “Operand” lebih dari 1.
Contoh:
MOV BL,00100110b ; Misalkan CF=1
RCL BL,1 ; BL = 01001101b CF=0
Mnemonic : RCR (Rotate through Carry Right)
Tersedia pada : 8088 keatas
Syntax : RCR Operand,Reg
Pengaruh flag : OF, CF
Fungsi : Untuk memutar “Operand” sebanyak “Reg” kali ke kanan melalui CF. Bit yang tergeser keluar dari kanan akan dimasukkan pada CF dan nilai CF akan dimasukkan pada bit terkiri dari “Operand”.
Pada mikroprosesor 8088 “Reg” haruslah berupa register CL atau CX bila perputaran yang dilakukan terhadap “Operand” lebih dari 1.
Contoh:
MOV BL,00100110b ; Misalkan CF=1
RCR BL,1 ; BL = 10010011b CF=0
Mnemonic : REP (Repeat)
Tersedia pada : 8088 keatas
Syntax : REP Instruksi
Pengaruh flag : Tidak ada
Fungsi : Melakukan “intruksi” sebanyak CX kali. Intruksi REP biasanya diikuti oleh Intruksi yang berhubungan dengan operasi pada string.
Mnemonic : REPE (Repeat While Equal)
Tersedia pada : 8088 keatas
Syntax : REPE Intruksi
Pengaruh flag : Tidak ada
Fungsi : Melakukan “intruksi” sebanyak CX kali atau sampai zero flag bernilai 1. Intruksi REPE biasanya diikuti oleh Intruksi yang berhubungan dengan operasi pada string.
Contoh:
MOV CX,200
REPE CMPS String1,String2
Intruksi diatas akan membandingkan string1 dengan string2 sebanyak 200 kali atau sampai ditemukan adanya ketidaksamaan antara String1 dan String2 yang membuat zero flag bernilai 1.
Mnemonic : REPNE (Repeat While Not Equal)
Tersedia pada : 8088 keatas
Syntax : REPNE Instruksi
Pengaruh flag : Tidak ada
Fungsi : Melakukan “intruksi” sebanyak CX kali atau sampai zero flag bernilai 0. Intruksi REPNE biasanya diikuti oleh Intruksi yang berhubungan dengan operasi pada string.
Contoh:
MOV CX,200
REPNE CMPS String1,String2
Intruksi diatas akan membandingkan string1 dengan string2 sebanyak 200 kali atau sampai ditemukan adanya kesamaan antara String1 dan String2 yang membuat zero flag bernilai 0.
Mnemonic : REPNZ (Repeat While Not Zero)
Tersedia pada : 8088 keatas
Syntax : REPNZ Instruksi
Pengaruh flag : Tidak ada
Fungsi : Identik dengan REPNE.
Mnemonic : REPZ (Repeat While Zero)
Tersedia pada : 8088 keatas
Syntax : REPZ Instruksi
Pengaruh flag : Tidak ada
Fungsi : Identik dengan REPE.
Mnemonic : RET (Return From Procedure)
Tersedia pada : 8088 keatas
Syntax : RET [Size]
Pengaruh flag : Tidak ada
Fungsi : RET akan mengambil alamat pada stack untuk melakukan lompatan pada alamat tersebut. RET biasanya diletakkan pada akhir dari suatu procedure yang dipanggil dengan CALL (Lihat CALL). Bila pada perintah RET diberi parameter, maka paramter itu akan digunakan sebagai angka tambahan dalam mengambil data pada stack.
Contoh:
RET 2
Mnemonic : ROL (Rotate Left)
Tersedia pada : 8088 keatas
Syntax : ROL Operand,Reg
Pengaruh flag : OF, CF
Fungsi : Untuk memutar “Operand” sebanyak “Reg” kali ke kiri. Bit yang tergeser keluar dari kiri akan dimasukkan pada CF dan pada bit terkanan dari “Operand”.
Pada mikroprosesor 8088 “Reg” haruslah berupa register CL atau CX bila perputaran yang dilakukan terhadap “Operand” lebih dari 1.
Contoh:
MOV BL,00100110b ; Misalkan CF=1
ROL BL,1 ; BL = 01001100b CF=0
Mnemonic : ROR (Rotate Right)
Tersedia pada : 8088 keatas
Syntax : ROR Operand,Reg
Pengaruh flag : OF, CF
Fungsi : Untuk memutar “Operand” sebanyak “Reg” kali ke kanan. Bit yang tergeser keluar dari kanan akan dimasukkan pada CF dan pada bit terkiri dari “Operand”.
Pada mikroprosesor 8088 “Reg” haruslah berupa register CL atau CX bila perputaran yang dilakukan terhadap “Operand” lebih dari 1.
Contoh:
MOV BL,00100110b ; Misalkan CF=1
ROR BL,1 ; BL = 00010011b CF=0
Mnemonic : SAHF (Store AH into Flag Register)
Tersedia pada : 8088 keatas
Syntax : SAHF Pengaruh flag : SF, ZF, AF, PF, CF
Fungsi : Untuk mengcopykan nilai AH pada 8 bit rendah dari flag register, yaitu: CF, PF, AF, ZF dan SF. Intruksi ini merupakan kebalikan dari Intruksi LAHF.
Mnemonic : SAL (Arithmatic Shift Left)
Tersedia pada : 8088 keatas
Syntax : SAL Operand,Reg
Pengaruh flag : OF, SF, ZF, PF, CF
Fungsi : Untuk menggerser “Operand” sebanyak “Reg” kali ke kiri(Lihat SHL).
Mnemonic : SBB (Substract With Carry)
Tersedia pada : 8088 keatas
Syntax : SBB Tujuan,Sumber
Pengaruh flag : OF, SF, ZF, AF, PF, CF
Fungsi : Untuk mengurangkan “Sumber” dengan “Tujuan” dan Carry Flag (1=on, 0=off), hasilnya diletakkan pada “Tujuan” (Tujuan=Tujuan-Sumber-CF).
Mnemonic : SCASB (Scan String For Byte)
Tersedia pada : 8088 keatas
Syntax : SCASB Pengaruh flag : OF, SF, ZF, AF, PF, CF
Fungsi : Untuk membandingkan isi register AL dengan data pada alamat ES:DI.
Mnemonic : SCASW (Scan String for Word)
Tersedia pada : 8088 keatas
Syntax : SCASW Pengaruh flag : OF, SF, ZF, AF, PF, CF
Fungsi : Untuk membandingkan isi register AX dengan data pada alamat ES:DI.
Mnemonic : SHL (Shift Left)
Tersedia pada : 8088 keatas
Pengaruh flag : OF, SF, ZF, PF, CF Syntax : SHL Operand,Reg Fungsi : Untuk menggeser bit dari “operand” sebanyak “Reg” kali ke kiri. Bila pergeseran yang dilakukan lebih dari 1 kali maka “Reg” harus berupa regisrer CL atau CX.
Contoh:
MOV BL,00000001b
SHL BL,1 ; BL=00000010b
Dengan menggeser n kali kekiri adalah sama bila bilangan tersebut dikali dengan 2 pangkat n.
Mnemonic : SHR (Shift Right)
Tersedia pada : 8088 keatas
Syntax : SHR Operand,Reg
Pengaruh flag : OF, SF, ZF, PF, CF
Fungsi : Untuk menggeser bit dari “operand” sebanyak “Reg” kali ke kanan. Bila pergeseran yang dilakukan lebih dari 1 kali maka “Reg” harus berupa regisrer CL atau CX.
Contoh:
MOV BL,00000100b
SHR BL,1 ; BL=00000010b
Dengan menggeser n kali kekanan adalah sama bila bilangan tersebut dibagi dengan 2 pangkat n.
Mnemonic : STC (Set Carry Flag)
Tersedia pada : 8088 keatas
Syntax : STC Pengaruh flag : CF
Fungsi : Untuk menjadikan Carry flag menjadi 1.
Mnemonic : STD (Set Direction Flag)
Tersedia pada : 8088 keatas
Syntax : STD Pengaruh flag : DF
Fungsi : Untuk menjadikan Direction flag menjadi 1. Intruksi ini merupakan kebalikan dari intruksi CLD (lihat CLD).
Mnemonic : STI (Set Interrupt Flag)
Tersedia pada : 8088 keatas
Syntax : STI Pengaruh flag : IF
Fungsi : Untuk membuat Interrupt flag menjadi 1 agar interupsi dapat terjadi lagi. Intruksi ini merupakan kebalikan dari intruksi CLI (lihat CLI).
Mnemonic : STOSB (Store AL )
Tersedia pada : 8088 keatas Syntax : STOSB
Pengaruh flag : Tidak ada
Fungsi : Untuk mengcopykan isi register AL pada alamat ES:DI. Jika Direction flag bernilai 0(dengan CLD) maka setelah intruksi STOSB dijalankan register DI akan ditambah dengan 1 secara otomatis, sebaliknya jika Direction flag bernilai 1(dengan STD) maka register DI akan dikurang dengan 1 secara otomatis. Anda bisa menggunakan intruksi pengulangan pada string disertai dengan perintah STOSB ini.
Mnemonic : STOSW (Store Word in AX at String)
Tersedia pada : 8088 keatas
Syntax : STOSW
Pengaruh flag : Tidak ada
Fungsi : Untuk mengcopykan isi register AX pada alamat ES:DI. Jika Direction flag bernilai 0(dengan CLD) maka setelah intruksi STOSW dijalankan register DI akan ditambah dengan 2 secara otomatis, sebaliknya jika Direction flag bernilai 1(dengan STD) maka register DI akan dikurang dengan 2 secara otomatis. Anda bisa menggunakan intruksi pengulangan pada string disertai dengan perintah STOSW ini.
Mnemonic : SUB (Substract)
Tersedia pada : 8088 keatas
Syntax : SUB Tujuan,Sumber
Pengaruh flag : OF, SF, ZF, AF, PF, CF
Fungsi : Untuk mengurangkan “Tujuan” dengan “Sumber”. Hasil pengurangan akan disimpan pada “Tujuan”. Contoh: 246 SUB BX,BX ; BX=0
Mnemonic : TEST
Tersedia pada : 8088 keatas
Syntax : TEST Operand1,Operand2
Pengaruh flag : OF, SF, ZF, PF, CF
Fungsi : Untuk melakukan operasi AND antara “Operand1” dan “Operand2”. Hasil dari operasi AND hanya mempengaruhi flag register saja dan tidak mempengaruhi nilai “operand1” maupun “operand2”.
Mnemonic : WAIT
Tersedia pada : 8088 keatas
Syntax : WAIT
Pengaruh flag : Tidak ada
Fungsi : Untuk menghentikan CPU sampai adanya interupsi dari luar. Intruksi ini bisanya digunakan untuk bekerja sama dengan Coprosesor.
Mnemonic : XCHG (Exchange)
Tersedia pada : 8088 keatas
Syntax : XCHG Operand1,Operand2
Pengaruh flag : Tidak ada
Fungsi : Untuk menukar “Operand1” dengan “Operand2”.
Contoh:
Potongan program di bawah akan mengatur agar AX > BX
CMP AX,BX
JAE Selesai
XCHG AX,BX
Selesai :
……….
Mnemonic : XLAT (Translate)
Tersedia pada : 8088 keatas
Syntax : XLAT
Pengaruh flag : Tidak ada
Fungsi : Untuk mengcopykan isi dari alamat DS:[BX] ditambah dengan AL ke AL (AL=DS:[BX]+AL).
Mnemonic : XOR
Tersedia pada : 8088 keatas
Syntax : XOR Tujuan,
Sumber Pengaruh flag : Tidak ada
Fungsi : Melakukan logika XOR antara “Tujuan” dan “Sumber”. Hasil dari operasi XOR diletakkan pada “Tujuan”. Fungsi XOR yg paling populer adalah untuk menolkan suatu register. Dengan logika XOR program akan berjalan lebih cepat dan efisien. Contoh:
XOR AX,AX ; AX akan bernilai nol setelah perintah ini 248
DAFTAR INTERRUPT PILIHAN
INTERRUPT 05h
Print Screen
Fungsi : Mencetak seluruh isi layar ke printer. Register Input : Tidak Ada. Register Output : Tidak Ada.
NTERRUPT 09h
Keyboard
Fungsi : Interupsi 09 merupakan HardWare interupsi dari keyboard. Setiap penekanan tombol keyboard akan membangkitkan interupsi 09. Handler dari interupsi 09 kemudian akan mengambil data dari tombol apa yang ditekan dari Port 60h yang berisi kode scan tombol. Dari kode scan ini kemudian akan diterjemahkan dalam kode ASCII atau Extended dan disimpan pada keyboard buffer untuk kemudian digunakan oleh interupsi lain.
INTERRUPT 10h – Service 00h
Set Video Mode
Fungsi : Mengubah Mode Video.
Register Input : Register Output : Tidak Ada.
AH = 00h
AL = nomor mode
Penjelasan : Setiap dilakukan pergantian mode akan menimbulkan efek CLS, kecuali nomor mode dijumlahkan dengan 128 atau bit ke-7 pada AL diset 1.
INTERRUPT 10h – Service 01h
Set Cursor Size
Fungsi : Merubah ukuran kursor pada mode teks.
Register Input : Register Output : Tidak Ada.
AH = 01h
CH = awal garis bentuk kursor
CL = akhir garis bentuk kursor
INTERRUPT 10h – Service 02h
Set Cursor Position
Fungsi : Meletakkan kursor pada posisi tertentu.
Register Input : Register Output : Tidak Ada.
AH = 02h
BH = nomor halaman tampilan
DH = nomor baris (dimulai 00)
DL = nomor kolom (dimulai 00)
INTERRUPT 10h – Service 03h
Cursor Information
Fungsi : Memperoleh Informasi posisi kursor dan ukurannya.
Register Input : Register Output :
AH = 03h
CH = awal garis bentuk kursor
BH = nomor halaman tampilan
CL = akhir garis bentuk kursor
DH = nomor baris
DL = nomor kolom
Penjelasan : Setiap halaman tampilan memiliki kursornya sendiri- sendiri.
INTERRUPT 10h – Service 05h
Select Active Page
Fungsi : Merubah halaman tampilan aktif.
Register Input : Register Output : Tidak Ada.
AH = 05h
AL = nomor halaman tampilan
INTERRUPT 10h – Service 06h
Scroll Up Window
Fungsi : Menggulung jendela ke atas.
Register Input : Register Output : Tidak Ada.
AH = 06h
AL = jumlah baris untuk digulung
BH = atribut untuk baris kosong
CH,CL = koordinat kiri atas jendela
DH,DL = koordinat kanan bawah jendela
Penjelasan : AL diisi 00 akan mengosongkan keseluruhan jendela.
INTERRUPT 10h – Service 07h
Scroll Down Window
Fungsi : Menggulung jendela ke bawah.
Register Input : Register Output : Tidak Ada.
AH = 07h
AL = jumlah baris untuk digulung
BH = atribut untuk baris kosong
CH,CL = koordinat kiri atas jendela
DH,DL = koordinat kanan bawah jendela
Penjelasan : AL diisi 00 akan mengosongkan keseluruhan jendela.
INTERRUPT 10h – Service 09h
Write Character And Attribute At Cursor Position
Fungsi : Mencetak karakter dan atribut pada posisi kursor.
Register Input : Register Output : Tidak Ada.
AH = 09h
AL = kode ASCII karakter
BH = nomor halaman
BL = atribut karakter
CX = jumlah pengulangan pencetakan
Penjelasan : Karakter kontrol akan dicetak sebagai karakter biasa.
INTERRUPT 10h – Service 0Ah
Write Character At Cursor Position
Fungsi : Mencetak karakter pada posisi kursor.
Register Input : Register Output : Tidak Ada.
AH = 0Ah
AL = kode ASCII karakter
BH = nomor halaman CX = jumlah pengulangan pencetakan
Penjelasan : Karakter kontrol akan dicetak sebagai karakter biasa, atribut yang digunakan akan sama dengan atribut yang lama.
INTERRUPT 10h – Service 0Eh
Teletype Output
Fungsi : Output karakter sederhana.
Register Input : Register Output : Tidak Ada.
AH = 0Eh
AL = kode ASCII karakter
BH = nomor halaman
Penjelasan : Karakter kontrol berpengaruh sesuai fungsinya. Pada ROM BIOS dengan tanggal antara 24/4/81 ke atas umumnya register BH tidak berfungsi karena setiap output akan dicetak ke halaman aktif.
INTERRUPT 10h – Service 0Fh
Get Current Video Mode
Fungsi : Mendapatkan mode video aktif.
Register Input : Register Output :
AH = 0Fh AL = mode video (gambar 5.1.)
AH = jumlah karakter per kolom
BH = nomor halaman tampilan
Penjelasan : Jika mode video diset dengan bit 7 on, maka AL yang didapat juga akan berisi bit 7 on.
Konflik : Driver tampilan VUIMAGE
INTERRUPT 10h – Service 11h,
Subservice 00h Load User Specific Character
Fungsi : Membuat karakter ASCII baru.
Terdapat pada : Sistem dilengkapi tampilan EGA, VGA, dan MCGA. Register Input : Register Output : Tidak Ada
AH = 11h
AL = 00h
CX = jumlah karakter akan diubah
DX = nomor karakter mulai diubah BL = nomor blok untuk diubah BH = jumlah byte per karakter ES:BP = buffer bentuk karakter
INTERRUPT 10h – Service 11h,
Subservice 03h Set Block Specifier
Fungsi : Memberikan identitas tabel karakter untuk ditampilkan. Terdapat pada : Sistem dilengkapi tampilan EGA, VGA, dan MCGA. Register Input : Register Output : Tidak Ada
AH = 11h
AL = 03h
BL = penanda tabel karakter
INTERRUPT 10h – Service 12h,Subservice 10h
Get EGA Information
Fungsi : Memperoleh karakteristik sistem video.
Terdapat pada : Sistem dilengkapi tampilan EGA ke atas.
Register Input : Register Output :
AH = 12h BH = 00h monitor warna
BL = 10h 01h monitor mono
BL = 00h Card 64 KB
01h Card 128 KB
02h Card 192 KB
03h Card 256 KB
INTERRUPT 10h – Service 13h
Write String Fungsi : Mencetak string ke Layar
Terdapat pada : Mesin 80286 ke atas dengan tampilan EGA ke atas. Register Input : Register Output : Tidak Ada.
AH = 13h
AL = 00h
BH = nomor halaman
BL = atribut untuk string
CX = jumlah karakter pada string
DH,DL = koordinat untuk memulai pencetakan
ES:BP = alamat string yang akan dicetak
Penjelasan : Memperlakukan karakter kontrol sesuai fungsinya.
INTERRUPT 10h – Service 1Ah,Subservice 00h
Get Display Combination
Fungsi : Memperoleh informasi tampilan
Terdapat pada : Sistem dengan tampilan VGA dan MCGA.
Register Input : Register Output :
AH = 1Ah AL = 1Ah jika berhasil
AL = 00h BL = kode tampilan aktif
BH = kode tampilan kedua
INTERRUPT 10h – Service 1Bh
VGA State Information
Fungsi : Memperoleh informasi tampilan.
Terdapat pada : Sistem dengan tampilan VGA dan MCGA.
Register Input : Register Output :
AH = 1Bh AL = 1Bh bila berhasil
BX = 0000h ES:DI = alamat buffer 64
ES:DI = alamat buffer 64 byte informasi byte untuk diisi
INTERRUPT 10h – Service 4Fh,Subservice 00h
VESA SuperVga Information
Fungsi : Memperoleh informasi VESA.
Terdapat pada : Sistem dengan card tampilan VESA SuperVga.
Register Input : Register Output :
AX = 4F00h AL = 4Fh jika berhasil
ES:DI = alamat buffer 256 AH = 00h jika berhasil byte untuk diis diisi
ES:DI = alamat buffer 256 byte informasi
INTERRUPT 16h – Service 00h
Get Keystroke
Fungsi : Menunggu masukan keyboard.
Terdapat pada : Semua mesin.
Register Input : Register Output :
AH = 00h Jika AL=0 maka
AH = kode Extended Jika AL0 maka
AL = Kode ASCII AH = Kode Scan
INTERRUPT 16h – Service 01h
Check Keystroke
Fungsi : Mengecek isi keyboard buffer.
Terdapat pada : Semua mesin.
Register Input : Register Output :
AH = 01h ZF=0 bila buffer tidak kosong
Jika AL=0 maka AH = kode Extended Jika AL0 maka
AL = Kode ASCII
AH = Kode Scan ZF=1 bila buffer kosong
INTERRUPT 16h – Service 10h
Get Enhanced Keystroke
Fungsi : Menunggu masukan keyboard.
Terdapat pada : Mesin AT dengan keyboard Enhanced.
Register Input : Register Output :
AH = 10h AH = kode scan
AL = kode ASCII
INTERRUPT 16h – Service 11h
Check Enhanced Keystroke
Fungsi : Mengecek isi keyboard buffer.
Terdapat pada : Mesin AT dengan keyboard Enhanced.
Register Input : Register Output :
AH = 11h ZF=0 bila buffer tidak kosong
Jika AL=0 maka AH = kode Extended Jika AL0 maka
AL = Kode ASCII
AH = Kode Scan ZF=1 bila buffer kosong
INTERRUPT 19h
Bootstrap Loader
Fungsi : Melakukan Warm Boot.
Register Input : Tidak Ada. Register Output : Tidak Ada.
INTERRUPT 1Bh
Control Break Handler
Fungsi : Interupsi ini terjadi setiap kali terjadi penekanan tombol Ctrl+Break.
Register Input : Tidak Ada. Register Output : Tidak Ada.
INTERRUPT 1Ch
Timer Tick
Fungsi : Interupsi ini disediakan untuk digunakan oleh pemakai. Interupsi 1Ch akan terjadi kurang lebih 18,2 kali setiap detik. Anda bisa membuat program residen dengan memanfaatkan timer tick ini.
Register Input : Tidak Ada. Register Output : Tidak Ada.
INTERRUPT 21h – Service 01h
Read Character With Echo
Fungsi : Untuk membaca masukan 1 karakter dari keyboard dan menampilkannya ke layar. Fungsi ini dapat dihentikan oleh penekanan tombol Ctrl+Break.
Register Input : Register Output :
AH = 10h AL = Kode ASCII
Catatan : Berbeda dengan fungsi dari BIOS, untuk membaca karakter khusus yang mempunyai kode Extended, anda harus membacanya dua kali dengan fungsi dari DOS ini.
INTERRUPT 21h – Service 02h
Write Character To Standard Output
Fungsi : Untuk mencetak satu buah karakter pada layar.
Register Input : Register Output : Tidak ada
AH = 02h
DL = Kode ASCII
INTERRUPT 21h – Service 07h
Direct Character Input Without Echo
Fungsi : Untuk membaca masukan 1 karakter dari keyboard. Fungsi ini tidak akan 257 menampilkan karakter yang ditekan pada layar, selain itu penekanan tombol Ctrl+Break juga akan diabaikan.
Register Input : Register Output :
AH = 07h AL = Kode ASCII
INTERRUPT 21h – Service 08h
Character Input Without Echo
Fungsi : Untuk membaca masukan 1 karakter dari keyboard. Fungsi ini tidak akan menampilkan karakter yang ditekan pada layar. Penekanan tombol Ctrl+Break akan menghentikan fungsi ini. Register Input : Register Output :
AH = 08h AL = Kode ASCII
INTERRUPT 21h – Service 09h
Write String To Standard Output
Fungsi : Untuk mencetak string ke layar.
Register Input : Register Output : Tidak ada
AH = 09h
DS:DX = String yang
diakhiri dengan tanda “$”.
INTERRUPT 21h – Service 0Ah
Input String Fungsi : Untuk mendapatkan masukan string dari keyboard. Register Input : Register Output :
AH = 0Ah Buffer terisi
DS:DX = Buffer Spesifikasi buffer:
– Offset 00 mencatat maksimum karakter yang dapat dimasukkan. – Offset 01 banyaknya masukan dari keyboard yang telah diketikkan. Tombol CR tidak akan dihitung.
– Offset 02 keatas, tempat dari string yang diketikkan disimpan.
INTERRUPT 21h – Service 0Bh
Get Status
Fungsi : Mengecek isi keyboard buffer.
Register Input : Register Output :
AH = 0Bh AL = 00 jika tidak ada karakter
AL = FFh jika ada karakter
INTERRUPT 21h – Service 0Ch
Clear Buffer dan Read Input
Fungsi : Untuk mengosongkan keyboard buffer, kemudian melaksanakan fungsi DOS 01, 06, 07, 08 atau 0Ah.
Register Input : Register Output : Tidak ada
AH = 0Ch
AL = Fungsi yang akan dieksekusi
setelah buffer dikosongkan (01,06,0,08 atau 0Ah).
INTERRUPT 21h – Service 0Fh
Open File Using FCB
Fungsi : Membuka file dengan cara FCB.
Register Input : Register Output :
AH = 0Fh AL = 00h Jika sukses
DS:DX = FCB AL = FFh Jika gagal
INTERRUPT 21h – Service 10h
Closes File Using FCB
Fungsi : Untuk menutup file dengan cara FCB.
Register Input : Register Output :
AH = 10h AL = 00h Jika sukses
DS:DX = FCB AL = FFh Jika gagal
INTERRUPT 21h – Service 13h
Delete File Using FCB
Fungsi: Menghapus file dengan cara FCB.
Register Input : Register Output :
AH = 13h AL = 00h Jika sukses
DS:DX = FCB AL = FFh Jika gagal
INTERRUPT 21h – Service 14h
Sequential Read From FCB File
Fungsi : Untuk membaca file secara sekuensial.
Register Input : Register Output :
AH = 14h AL = status
DS:DX = FCB
INTERRUPT 21h – Service 15h
Sequential Write To FCB File
Fungsi : Untuk menulis file secara sekuential.
Register Input : Register Output :
AH = 14h AL = Status
DS:DX = FCB
INTERRUPT 21h – Service 16h
Create File Using FCB
Fungsi : Untuk menciptakan sebuah file baru dengan cara FCB. Register Input : Register Output :
AH = 16h AL = Status
DS:DX = FCB
INTERRUPT 21h – Service 17h
Rename File Using FCB
Fungsi : Untuk mengganti nama file dengan cara FCB.
Register Input : Register Output :
AH = 17h AL = Status
DS:DX = FCB
INTERRUPT 21h – Service 1Ah
Set DTA
Fungsi : Untuk merubah alamat DTA. Secara default DTA terletak pada PSP offset ke 80h sebanyak 128 byte.
Register Input : Register Output : Tidak ada
AH = 1Ah
DS:DX = Lokasi DTA yang baru
INTERRUPT 21h – Service 21h
Read Random Record From FCB File
Fungsi : Untuk membaca record dari file FCB.
Register Input : Register Output :
AH = 21h AL = Status
DS:DX = FCB DTA = Hasil pembacaan
INTERRUPT 21h – Service 22h
Write random Record To FCB File
Fungsi : untuk menulis record ke file FCB.
Register Input : Register Output :
AH = 22h AL = Status
DS:DX = FCB DTA = Data record
INTERRUPT 21h – Service 23h
Get File Size
Fungsi : Untuk mengetahui besarnya suatu file.
Register Input : Register Output :
AH = 23h AL = Status
DS:DX = FCB
INTERRUPT 21h – Service 24h
Set Random Record Number For FCB
Fungsi : Untuk memindahkan record untuk diakses oleh fungsi 21h dan 22h.
Register Input : Register Output :
AH = 24h
DS:DX = FCB
INTERRUPT 21h – Service 25h
Set Interrupt Vektor
Fungsi : Untuk merubah vektor interupsi ke suatu lokasi dengan merubah alamat awal vektor interupsi.
Register Input : Register Output :
AH = 25h
AL = Nomor Interupsi
DS:DX = Lokasi baru
Konflik : Phar Lap
INTERRUPT 21h – Service 27h
Random Block Read From FCB File
Fungsi : Untuk membaca sejumlah record dari suatu file.
Register Input : Register Output :
AH = 27h AL = Status
CX = Banyaknya record yang DTA = hasil pembacaan akan dibaca CX = Banyaknya record yang
DS:DX = FCB berhasil dibaca
INTERRUPT 21h – Service 28h
Random Block Write To FCB File
Fungsi : Untuk menulis sejumlah record ke suatu file
Register Input : Register Output :
AH = 28h AL = Status
CX = Banyaknya record yang CX = Banyaknya record yang akan ditulisi berhasil ditulis
DS:DX = FCB
DTA = Data dari record
INTERRUPT 21h – Service 2Fh
Get DTA Address
Fungsi : Untuk mengetahui alamat dari DTA yang digunakan.
Register Input : Register Output :
AH = 2Fh ES:BX = Lokasi DTA
INTERRUPT 21h – Service 30h
Get DOS Version
Fungsi : Untuk mengetahui versi DOS yang sedang digunakan
Register Input : Register Output :
AH = 30h AL = Angka mayor
AH = Angka minor
INTERRUPT 21h – Service 31h
Terminate And Stay Residen
Fungsi : Untuk meresidenkan suatu program.
Register Input : Register Output :
AH = 31h
AL = Kode return
DX = Besar memory dalam paragraf
INTERRUPT 21h – Service 33h
Extended Break Checking
Fungsi : Untuk menghidup dan matikan pengecekan tombol Ctrl+Break oleh fungsi DOS.
Register Input : Register Output :
AH = 33h Jika input
AL=0 AL = 0 untuk mengambil keterangan
DL=0 Off Ctrl+Break
DL=1 On
= 1 untuk merubah status Ctrl+Break
DL = 0 Ctrl+Break dijadikan Off
DL = 1 Ctrl+Break dijadikan On
INTERRUPT 21h – Service 34h
GET ADDRESS OF INDOS FLAG
Fungsi : Untuk mendapatkan alamat dari BAD (Bendera Aktif DOS). Nilai BAD akan bertambah pada saat interupsi dari DOS dijalankan dan akan berkurang saat interupsi dari DOS selesai. Dengan melihat pada BAD anda dapat mengetahui apakah interupsi dari DOS sedang aktif atau tidak(Lihat bagian residen).
Register Input : Register Output :
AH = 34h ES:BX = Alamat BAD
INTERRUPT 21h – Service 35h
Get Interrupt Vektor
Fungsi : Untuk mendapatkan alamat vektor interupsi dari suatu nomor interupsi.
Register Input : Register Output :
AH = 35h ES:BX = Alamat vektor interupsi
AL = Nomor Interupsi
INTERRUPT 21h – Service 3Ch
Create File Handle
Fungsi : Untuk menciptakan sebuah file baru dengan metode File Handle.
Register Input : Register Output :
AH = 3Ch Jika CF=0 maka
AL = Mode, dengan bit: AX=Nomor file handle
0 file Read only Jika CF=1 maka
1 file Hidden AX=Kode kesalahan
2 file System
3 Volume label
4 Cadangan
5 file Archive
DS:DX = Nama file ASCIIZ
INTERRUPT 21h – Service 3Dh
Open Existing File
Fungsi : Untuk membuka file yang telah ada dengan metode file handle.
Register Input : Register Output :
AH = 3Dh Jika CF=0 maka
AL = Mode, dengan bit: AX=Nomor file handle
0 untuk Read only Jika CF=1 maka
1 untuk Write only AX=Kode kesalahan
2 untuk Read/Write
DS:DX = Nama file ASCIIZ
INTERRUPT 21h – Service 3Eh
Close File Handle
Fungsi : Untuk menutup file handle
Register Input : Register Output :
AH = 3Eh CF=0 jika sukses
BX = Nomor file handle CF=1 jika gagal, maka
AX=Kode kesalahan
INTERRUPT 21h – Service 3Fh
Read From File Or Device Using File Handle
Fungsi : Untuk membaca data dari suatu file atau device.
Register Input : Register Output :
AH = 3Fh CF=0 jika sukses
BX = Nomor file handle AX=byte yang berhasil dibaca
CX = Banyaknya byte yang CF=1 jika gagal
akan dibaca AX=Kode kesalahan
DS:DX = Alamat buffer
INTERRUPT 21h – Service 40h
Write To File Or Device Using File Handle
Fungsi : Untuk menulisi file atau device.
Register Input : Register Output :
AH = 40h CF=0 jika sukses
BX = Nomor file handle AX=byte yang berhasil ditulisi
CX = Banyaknya byte yang CF=1 jika gagal akan ditulisi
AX=Kode kesalahan
DS:DX = Alamat data
INTERRUPT 21h – Service 41h
Delete File Using File Handle
Fungsi : Untuk menghapus file
Register Input : Register Output :
AH = 41h CF=0 jika sukses
CL = Nama file ASCIIZ CF=1 jika gagal, maka
AX=kode kesalahan
INTERRUPT 21h – Service 42h
Set Current File Position ‘
Fungsi : Untuk memindahkan pointer dari suatu file.
Register Input : Register Output :
AH = 42h CF=0 jika sukses
AL = Mode perpindahan: CF=1 jika gagal
00 dari awal file AX= kode kesalahan
01 dari posisi aktif
02 dari akhir file
BX = Nomor file handle
CX:DX = Banyaknya perpindahan
INTERRUPT 21h – Service 43h
Set And Get File Atribut
Fungsi : Untuk mengetahui dan merubah atribut dari suatu file. Register Input : Register Output :
AH = 43h Jika input AL=0, maka:
AL = 0 untuk mendapatkan atribut jika CF=0
file CX = atribut
1 untuk merubah atribut file jika CF=1
CX = atribut baru dengan bit: AX = Kode kesalahan
0 = Read Only
1 = Hidden
2 = System
5 = Archive
DS:DX = Nama file ASCIIZ
INTERRUPT 21h – Service 4Ch
Terminate With Return Code
Fungsi : Untuk menghentikan program dan mengembalikan kendali kepada DOS. Fungsi ini lebih efektif untuk digunakan dibandingkan dengan interupsi 20h.
Register Input : Register Output : Tidak ada
AH = 4Ch
AL = Kode return
INTERRUPT 21h – Service 56h
Rename File
Fungsi : Untuk mengganti nama file. Fungsi ini juga bisa memindahkan file ke directory lain.
Register Input : Register Output :
AH = 56h CF=0 jika sukses
DS:DX = Nama file ASCIIZ lama CF=1 jika gagal
ES:BX = Nama file ASCIIZ baru AX=Kode kesalahan
INTERRUPT 27h
Terminate And Stay Residen
Fungsi : Untuk meresidenkan program.
Register Input : Register Output :
DS:DX = Batas alamat residen