TUGAS_SO_1411600958_MUHAMAD_FITRA_SYAWAL.pdf

49
Dosen : Dr. Krisna Adiyarta Musodo, S. Kom, M.Sc NIM : 1411600958 NAMA : MUHAMAD FITRA SYAWAL KELOMPOK : XM PENGENALAN INSTRUKSI INSTRUKSI DALAM DEBUG DAN INTERRUPT TUGAS SISTEM OPERASI

Transcript of TUGAS_SO_1411600958_MUHAMAD_FITRA_SYAWAL.pdf

Page 1: TUGAS_SO_1411600958_MUHAMAD_FITRA_SYAWAL.pdf

Page 0 of 48

Dosen :

Dr. Krisna Adiyarta Musodo, S. Kom, M.Sc

NIM : 1411600958

NAMA : MUHAMAD FITRA SYAWAL

KELOMPOK : XM

PENGENALAN INSTRUKSI – INSTRUKSI

DALAM DEBUG DAN INTERRUPT

TUGAS SISTEM OPERASI

Page 2: TUGAS_SO_1411600958_MUHAMAD_FITRA_SYAWAL.pdf

Page 1 of 48

TUGAS SISTEM OPERASI

NIM : 1411600958 - NAMA : MUHAMAD FITRA SYAWAL

PENGENALAN DEBUG

Debug adalah suatu program yang berguna untuk menguji suatu program dengan cara melacak

instruksi demi instruksi dari awal hingga akhir program. Setiap eksekusi satu instruksi dapat

dilihat perubahan yang terjadi pada isi suatu memori atau register yang ada hubungannnya dengan

instruksi yang telah dilaksanakan tersebut.

Dalam Arti lain Debug adalah suatu utiliti dalam DOS yang digunakan untuk membuat

pemrograman assambler dengan format ekstensi COM.

– Debug Hanya dapat membuat program dengan extension *.COM karena karakteristik sifat

program ini :

1. program tidak lebih besar 64 K dan

2. Program harus dimulai dgn displacment, offset, atau 0100H memory direction didalam

segment tertentu (spesific)

– Kumpulan perintah debug:

A : merakit intruksi simbolik Æ kode mesin

D : menampilkan isi suatu daerah memori

E : memasukan data ke memori, dimulai pada lokasi tertentu

G : run executable program ke memori

N : menamai program

P : ekskusi sekumpulan instruksi yang terkait

Q : quit

R : menampilkan isi satu atau lebih registers

T : trace isi sebuah instruksi

U : unassembled kode mesin ke kode simbolik

W : menulis program ke disk

– Dengan debug menjadi visualisasi nilai registers internal dari CPU

• Memulai debug:

C:/>debug[enter]

KEL :

XM

Page 3: TUGAS_SO_1411600958_MUHAMAD_FITRA_SYAWAL.pdf

Page 2 of 48

Hyphen (garis sambung) yang Saudara lihat dalam jawaban atas perintah Saudara adalah

simbol promt debug. Hal ini berarti menunggu perintah atau instruksi.

Adapun perintah atau instruksi debug adalah:

1. A - Assemble

Format : A [address]

Address : alamat untuk memulai membuat program, nilai default-nya CS:OlOO.

Tujuan : untuk membuat program-program secara langsung ke memori.

Contoh : - A 100

0768:100

Catatan : tombol Enter akan meneruskan baris berikutnya dari program, jika

sudah selesai membuat program, tekan Enter pada baris yang kosong

untuk kembali ke promt DEBUG.

2. C - Compare

Tujuan : membandingkan data pada alamat tertentu.

Format : C range address

range : daerah yang akan dibandingkan.

address : awal alamat untuk memulai melakukan perbandingan, default-nya

OS.

Contoh : C CS:lOO LOFCS:II0 melakukan perbandingan sebanyak 16 byte,

bermula dari Alamat CS:l00 dengan 16 byte berikutnya.

3. D- Dump

Tujuan : melihat data yang ada dalam memori

Format : D [address] atau D [range]

[address] : alamat yang akan ditampilkan, jika kita tulis 0 tanpa alamat, maka

default- nya Menjadi CS:l00,sedangkan jika kita tulis alamat tertentu,

maka segmentnya DS.

[range] : daerah yang akan ditampilkan

Contoh : DO L50 tampilkan 80 byte dari memori, berawal dati DS:O

Page 4: TUGAS_SO_1411600958_MUHAMAD_FITRA_SYAWAL.pdf

Page 3 of 48

4. E - Enter

Tujuan : memasukkan atau mengganti data ke dalam memori.

Format : E address [list]

address : dimana kita akan memasukkan data (dalam byte), default-nya

[list] : daftar byte atau data yang akan di masukkan

Contoh : E DS:I0 'DATA PRO' 0 masukan kata DATA PRO diikuti angka O.

5. F - Fill

Tujuan : isi daerah tertentu dengan data yang ditentukan.

Format : F range list

range : daerah yang akan diisi data.

list : data yang akan dimasukkan

Contoh : F B800:0 LFAO 'X' 07 isi alamat color graphic adapter dengan

Karakter 'X' pada putih di atas hitam

6. G - Go

Tujuan : untuk menjalankan program yang ada dalam memori.

Format : G [=address][address[address ...]]

[=address] : jika didefinisikan, program yang akan dijalankan dimulai dari

CS:address.

[address[address ...]] : alamat penghentian jalannya program (minimal 10).

Contoh : 1. G =200 240 jalankan program mulai dari CS:200, dan

hentikan pada alarnat CS:240.

2. G

A

Program terminated normally

7. H - Heksadesimal

Tujuan : untuk menjumlah dan mengurang dua bilangan heksadesimal

Format : H value value

Contoh : H 4200 21A2, hasilnya 63A2 205E

8. I - Input Tujuan Format

Tujuan : membaca dan menampilkan data dari port

Format : port address

Page 5: TUGAS_SO_1411600958_MUHAMAD_FITRA_SYAWAL.pdf

Page 4 of 48

9. L - Load

Tujuan : masukkan data dari sektor ke memori

Format : L address drive sektor sektor

Address : alamat yang akan dipakai, default-nya CS.

Contoh : L DS:O 0 5 1 masukkan sektor direktori drive A ke memori

L - Load

Tujuan : baca file,setelah menentukan nama file,

Format : L [ address]

Address : alamat yang akan dipakai.defaul-nya CS : 1.00.

10. M - Move

Tujuan Format : Copy data tertentu ke alamat tertentu.

range : M range address

address : daerah yang akan di copy alamat tujuan data

Contoh : M BOOO:AO copy tiga baris pertama dari RAM video

monochrome ke baris berikutnya.

11. N - Name

Tujuan : Ubah atau defmisikan nama file

Format : N [d:][path] nama fIle [ ext]

[d: ] [path]nama file [ ext] : nama file yang akan di akses ke drive.

12. Output

Tujuan : kirim data ke port

Format : 0 port address byte

13. Proceed

Tujuan : sama seperti Trace, hanya menjalankan fungsi call, loop,

interrupt. atau gabungan beberapa intruksi menjadi satu

intruksi.

Format : p [=address][ value]

[=address] : awal pencarian kesalahan (trace), defaul-nya CS:IP [value

[=banyaknya intruksi yang akan dijalankan.

Page 6: TUGAS_SO_1411600958_MUHAMAD_FITRA_SYAWAL.pdf

Page 5 of 48

14. Q-Quit

Tujuan : keluar dari DEBUG tanpa melakukan perekaman.

Format : Q

Contoh : - Q

A >

15. R-Register

Tujuan : menampilkan dan ubah isi dari regester.

Format : R [nama register]

Contoh : RCX tampilkan dan perbaiki isi regester CX.

Untuk mengetahui isi masing-masing register maka ketik R, Ialu tekan enter.

Contoh:

-R

AX=OOOO BX=OOOO CX=OOOO OX=OOOO SP=FFEE BP=OOOO SI=OOOO

01=0000

OS=3970 ES=3970 SS=3970 CS=3970 IP=Oloo NV UP 01 PL NZ AC PE

NC

3970:0100 C020 INT20

16. S-Search

Tujuan : cari suatu data dalam memori.

Format : S range list

Range : data yang dieari.

Contoh : S CS:l00 L 100 'DATA PRO' mencari kata 'DATA PRO' pada

256 byte pertama.

17. T-Trace

Tujuan : menjalankan program sambil menampilkan register yang

dipakai.

Format : T {=addres][ value]

carian kesalahan,default-nya CS:IP [valuel=banyaknya

intruksi yang akan di jalankan.

Contoh : T=102 3 periksa tiga intruksi pertama, dimulai dari alamat

CS:102. Control lain lagi untuk memproses sebaris program

saja dengan mengetik T, yaitu :

Page 7: TUGAS_SO_1411600958_MUHAMAD_FITRA_SYAWAL.pdf

Page 6 of 48

- T

- T

AX=OCOI BX=092A CX=OOOO OX=OOOO SP=FFEE BP==OOOO SI=OOOO

01=0000

OS=3756 ES=3756 SS=3756 CS=3756 IP=OI02 NV UP 01 PL NZ AC

PE NC

3756:0102 AC LOOSB

18. U-Unassemble

Tujuan : tampilkan program yang sudah ada.

Format : u [address] atau U [range]

[address] : alamat awal program yang akan ditampilkan, alamat

defaultnya adalah setelah perintah U sebelurnnya.

Jika belum pemah menulis peritah U, maka defaulnya CS:OlOO. [range] = daerah

yang akan dilihat, defaulnya CS

Contoh : U CS:lOO tampilkan program mulai dari alamat awal CS:lOO.

Catatan : Setiap kali kita mengetik U dan menekan Enter, maka yang

akan di- tampilkan adalah program sepanjang 21 heksadesimal.

Contoh:

-U 100

3970:0100 CD21 INT 21

3970:0102 CD20 INT 20

3970:0104 D98D460250B8 ESC 09,{DI+0246][DI+B850]

3970:010A 8DOO LEA AX, [BX+SI]

3970:01OC 50 PUSH AX

3970:01OD E82A23 CAL 243A

3970:0110 8BES MOV SP,BP

3970:0112 83C41A ADD SP,+IA

3970:0115 5D POP BP

3970:0116 C3 RET

3970:0117 55 PUSH BP

3970:0118. 83EC02 SUB SP,+02

3970:011B 8BEC MON BP,SP

3970:011D 823EOEOOOO CMP BYTE PTR [OOOE],00

Page 8: TUGAS_SO_1411600958_MUHAMAD_FITRA_SYAWAL.pdf

Page 7 of 48

Untuk menentukan sendiri panjang program yang ingin Saudara lihat dapat

digunakan perintah L (length) dibelakang U dan format penulisannya adalah:

U [address awal] L [panjang program]

Contoh : -U 100 L OA

3985:0100

3985:0102

3985:0105

3985:0108

3985:010A

B241

B90AOO

E8F8oo

E2FB

CD20

MOV

MOV

CALL

LOOP

!NT

DL,41

CX,OOOA

0200

0105

20

19. W - Write

Tujuan Format : menulis program dan data ke dalam disket.

address : W address drive sektor sektor

Contoh : alamat awal yang akan di tulis ke dalam disket. W DS: 005

1 tulis sektor direktori ke drive A

W - Write

Tujuan : tulis program yang sudah dibuat ke dalam disket. W address

Format : alamat awal yang akan ditulis, default-nya CS

Page 9: TUGAS_SO_1411600958_MUHAMAD_FITRA_SYAWAL.pdf

Page 8 of 48

Untuk menampilkan semua instruksi pada debug adalah tambahkan tanda Tanya

Disebelah strip (“-“) ? maka akan muncul tampilan dibawah ini

Contoh debug register:

Seluruh isi registers internal ditampilkan atau dgn menggunakan parameter nama

register,misal :

- rbx

Hasil eksekusi :

BX 0000

:

Page 10: TUGAS_SO_1411600958_MUHAMAD_FITRA_SYAWAL.pdf

Page 9 of 48

akan ditampikan isi register BX dan indikator debug berubah dari “-” menjadi

“:” (ini berarti kita dapat mengisi nilai baru dari register BX (masukan nilai +

enter), atau kita tetap mempertahankan nilai lama (tekan langsung enter tanpa

mengetik nilai)

Contoh Mencetak Karakter A

Keterangan :

-a100 : Untuk memulai program di alamat offset 100

mov ah,02 : Memasukkan nilai 02h ke register AH sebagai nilai Service

mov dl,41 : Memasukkan nilai 41 ( "A" ) ke register DL

int 21 : Eksekusi

int 20 : Program dihentikan

rcx : untuk mengubah nilai registes CX dgn nilai yg diperoleh dari ukuran file

: menjadi 000a

8

n coba.com : menamai program dengan coba.com

w : menyimpan file

Page 11: TUGAS_SO_1411600958_MUHAMAD_FITRA_SYAWAL.pdf

Page 10 of 48

Keterangan :

-U100 : berfungsi untuk menampilkan listing program bahasa mesin yang telah

Dibuat

Contoh mencetak Karakter beserta Atribut

Sebuah karakter disertai dengan warna tentunya akan lebih menarik. Untuk

itu anda bisa menggunakan interupsi ke 10h dengan aturan pemakaiannya :

INPUT

AH = 09h

AL = Kode ASCII dari karakter yang akan dicetak

BH = Nomor halaman(0 untuk halaman 1)

BL = Atribut atau warna dari karakter yang akan dicetak

CX = Banyaknya karakter tersebut akan dicetak

Setelah semua register dimasukkan nilainya maka lakukanlah interupsi 10h. Perlu kita perhatikan

bahwa interupsi ini mencetak karakter tanpa menggerakkan kursor.

1. Langkah pertama adalah menjalankan debug, sama seperti langkah sebelumnya.

Page 12: TUGAS_SO_1411600958_MUHAMAD_FITRA_SYAWAL.pdf

Page 11 of 48

2. Kemudian masukkan set instruksi :

3. Setelah memasukkan instruksi seperti diatas, maka akan menghasilkan output cetakan huruf

A sebanya 3 kali dengan latar belakang biru dan dengan warna atribut cyan.

4. Instruksi mov al,41 artinya mengisikan kode ASCII A

5. Mov bh,00 artinya adalah mengatur mode halaman

6. Mov bl,93 artinya adalah mengatur warna tampilan yang akan dicetak

7. Mov cl,3 artinya berapa banyak nilai pengulangan yang akan dicetak.

8. Int 10, adalah perintah untuk mengeksekusi perintah.

9. Int 20 berarti program siap dijalankan dan kembali ke DOS.

10. Kemudian periksa panjang program dengan perintah RCX, dan akan terlihat sebagai

berikut:

- RCX

CX 0000

: 8

11. Isi kursor dengan angka 8 kemudian Enter. Beri nama program dengan perintah N

(Name) yang bernama coba.com, seperti berikut:

- n coba.com

12. Lihat kembali awal program dengan perintah RIP, apakah berisi 0100, jika tidak maka

isilah dengan angka tersebut:

- RIP

IP 0102

:100

Page 13: TUGAS_SO_1411600958_MUHAMAD_FITRA_SYAWAL.pdf

Page 12 of 48

13. Gunakan perintah W (Write) untuk menulis ke disk computer, seperti dibawah ini:

- W

Writing 0008 bytes

14. Untuk memproses program (compile) gunakan perintah G (Go)

- G

AAA

Program terminated normally

Output program tersebut adalah huruf A. Dijelaskan pula, bahwa program berhenti secara

normal.

PENGENALAN INTERRUPT

- Interupsi adalah suatu permintaan khusus pada mikroprocessor untuk melakukan

sesuatu, jika terjadi interupsi maka computer akan menghentikan dahulu apa

yang sedang dikerjakan dan melakukan apa yang diminta oleh yang menginterupsi.

- Interrupt merupakan sub rutin yang sudah tersedia dalam memori komputer

- Pada IBM PC dan kompatibelnya disediakan 256 buah interupsi yang diberi

nomor 0 s/d 255.

- Nomor interupsi 0 s/d 1Fh disediakan oleh ROM BIOS yaitu suatu IC di dalam

komputer yang mengatur operasi dasar komputer.

- Jadi jika terjadi interupsi dengan nomor 0 s/d 1Fh maka secara default komputer

akan beralih ke ROM BIOS dan melaksanakan program yang terdapat disana.

- Program yang melayani suatu interupsi dinamakan Interrupt Handler

Cara penggunaan

int [no int]

Jenis-Jenis Interrupts

• Internal HW interruptions

a. Ditimbulkan/digenerasi oleh peristiwa tertentu yang terjadi pada waktu/selama

eksekusi program

b. Diatur oleh HW dan tidak mungkin diubah

c. Contoh: tipe interrupt u/ counter clock internal; HW call interrupt ini u/

memaintance “time to date”

Page 14: TUGAS_SO_1411600958_MUHAMAD_FITRA_SYAWAL.pdf

Page 13 of 48

• External HW interupstions

a. Ditimbulkan/digenerasi oleh devais peripheral, mis keyboard, printers, dsb.

b. Biasa juga ditimbulkan/digenerasi oleh Co-prosessor

c. Tidak mungkin mendeaktifkan

Tidak dikirim langsung ke CPU, melainkan ke IC yang memiliki fungsi u/

menghandle secara eksklusive interrupts ini. (IC = PIC8259A, yg dikontrol

oleh CPU dgn menggunakan urutan komunikasi = PATH Control

• Software interruptions

a. Diaktifkan langsung oleh assembler melalui sejumlah interuosi yg diharapkan dgn

instruksi INT

b. Terdapat dua jenis:

• DOS interruptions

• BIOS interupstions

a. PerbedaannyaDOS int. lebih mudah digunakan, namun lebih lambat, karena int.

jenis ini menggunakan BIOS, BIOS int. lebih cepat, namun

i. banyak kerugiannya karena BIOS bagian HW dan HW-specific

b. Pemilihan interupts tergantung pada karakteristik yang akan kita berikan

pada program: SPEED = BIOS int; PORTABILITY = DOS int.

Ada 2 macam Software Intterrupt :

1. Vektor Interrupt ROM BIOS

Interrupt 00h - 1Fh (0-31) adalah interrupt BIOS dan standar di semua komputer baik

yang menggunakan sistem operasi DOS atau bukan. Lokasi Interrupt Vector table-nya

ada di alamat absolut 0000h-007Fh

Interrupt BIOS dibawah ini telah dipastikan kegunaannya oleh sistem untuk keperluan

khusus tidak boleh diubah oleh program seperti lainnya

1. DEVIDE BY ZERO Jika terjadi pembagian dengan nol maka proses akan segera

dihentikan

2. SINGLE STEP Untuk melaksanakan/mengeksekusi instruksi

satu per satu

3. NMI Pelayanan terhadap NMI (Non Maskable Interrupt) yaitu interupsi yang tak

dapat dicegah

Page 15: TUGAS_SO_1411600958_MUHAMAD_FITRA_SYAWAL.pdf

Page 14 of 48

4. BREAK POINT Jika suatu program menyebabkan overflow flag menjadi 1,

interrupt ini akan melayani pencegahannya

dan memberi tanda error

2. Interrupt DOS

Interrupt 20h-FFh (32 - 255) adalah interrupt DOS, dan hanya ada pada komputer

yang menggunakan sistem operasi DOS dan

interrupt handlernya di-load ke memori oleh DOS pada saat

DOS digunakan. Lokasi Interrupt Vector table-nya ada di alamat absolut 07Fh-3FFh

1. Vektor Interrupt ROM BIOS

definisi : interrupt yang disediakan oleh BIOS ( int 0 sampai int 1Fh)

NO Service Fungsi

INT 5 - tombol print screen

INT 9 - Saat tombol keyboard ditekan, KB mengirim sandi lacak ke

CPU bukan ke karakter ASCII

INT 10 0 Mengubah mode video pada register AL

0-6 = layar grafik, 7 = layar monochrom register input :

AH=00, AL=nomor mode video

Contoh : Mov

AL,5

Mov AH,0

Int 10 1 Mengubah ukuran cursor

Register input : AH=01h, CH=awal garis bentuk cursor,

CL=akhir garis bentuk cursor.

Contoh :

Mov CH,0

Mov CL,7 ; cursor jadi satu blok penuh

Mov AH,1

Int 10

Page 16: TUGAS_SO_1411600958_MUHAMAD_FITRA_SYAWAL.pdf

Page 15 of 48

2 Mengubah posisi kursor

Register input : AH=02h, BH=nomor halaman tampilan, DH

nomor baris (dimulai 00), DL=nomor kolom (dimulai 00)

Contoh : Mov

BH,0

Mov DH,7 ; baris (0..24)

Mov DL,8 ; kolom (0..79) Mov

AH,2

Int 10

3 Cari posisi cursor dan ukurannya

Register input : AH=03h, BH=nomor halaman tampilan

Register output : CH=awal garis bentuk cursor, CL=akhir

garis bentuk cursor , DH

nomor baris (dimulai 00), DL=nomor kolom

(dimulai 00)

Contoh :

Mov BH,0

Mov AH,3

Int 10 6 Scroll up window

Register input : AH=06h, AL=jumlah baris untuk digulung,

BH=atribut untuk baris kosong, CH,CL=koordinat kiri atas

window, DH,DL=koordinat kanan bawah

Contoh :

Mov AL,3 ; jumlah baris

Mov CL,3

Mov CH,1

Mov BH,0

Mov DL,8

Mov DH,3

Mov BH,0

Mov AH,06h

Int 10

7 Scroll down window

Register input sama dengan service 6

Page 17: TUGAS_SO_1411600958_MUHAMAD_FITRA_SYAWAL.pdf

Page 16 of 48

8 Melihat nilai karakter ASCII yang ada di layar. Cara :

• Atur posisi cursor dengan fungsi 3

• Atur BH dengan nomor halaman 0

• Isi AH dengan 08h

• Jalankan int 10

• AL =Nilai ASCII, AH=atribut

INT 11 - Equipment check di BIOS pada alamat

410h(40:100) Register

output : AX Posisi bit :

0=1 jika ada drive

1=tidak dipakai

2,3=info RAM

4-5=mode service 01Æ 25x40,

10Æ25x80,11Æmonochrom

6-7=jumlah drive

8= tidak dipakai

9,A,B=jumlah port serial C=1

jika ada game port D= tidak

dipakai E,F=jumlah port parallel

INT 16 00 Menunggu masukan keyboard

Register input : AH=00h

Register output : jika AL=0 maka AH=kode extended

Jk AL <>0, mk AL=kode ASCII, AH-kode scan

01 Mengecek isi keyboard buffer

Register input : AH=01h

Register output : ZF=0 jika ada penekanan tombol. jika AL=0

maka AH=kode extended, Jika AL <>0, maka AL=kode

ASCII, AH-kode scan

INT 19 - Melakukan Warm Boot

Page 18: TUGAS_SO_1411600958_MUHAMAD_FITRA_SYAWAL.pdf

Page 17 of 48

PENGENALAN KEGUNAAN INTERRUPT DALAM BIOS .

Interrupt 0

Kegunaan: Devide By 0

Interrupt ini hampir tidak pernah digunakan dalam program. Interrupt 0 akan mencetak

‘Devide Overflow’ dan menghentikan proses program bila prosessor melakukan pembagian

dengan 0.

Interrupt 1

Kegunaan: Single Step

Interrupt 1 juga tidak pernah digunakan dalam program, kecuali program-program Debug

seperti DEBUG.COM dan DOS, Turbo Debuger dan Borland dan lain-lain. Interrupt 1 akan

menganalisa langkah per langkah dan proses suatu program.

Interrupt 2

Kegunaan: Non Maskable Interrupt (NMI)

Interrupt ini berguna untuk mengecek perangkat memory yang terpasang, bila ternyata

terjadi kesalahan maka interrupt ini akan melakukan pencetakan kata PARITY CHECK 2.

Interrupt ini tidak dapat dihentikan prosesnya dengan mengeset Interrupt Flag menjadi 1

Interrupt 3

Kegunaan: Break Point

Interrupt ini juga jarang dipakai pada program. Namun seperti halnya interrupt 1, interrupt 4

ini mutlak dipakai dalam program- program debugger. Interrupt ini berguna untuk

menghentikan program bila suatu program debug melaksanakan perintah Go.

Interrupt 4

Kegunaan: Overflow

Seperti Interrupt 0, Interrupt 4 ini akan bekerja bila ternyata kondisi menunjukkan overflow.

Interrupt 5

Kegunaan: Print Screen

Bila kita menjalankan Interrupt 5h ini, maka semua yang terdapat di layar akan tercetak ke

printer. Interrupt 5h ini juga akan dipanggil bila kita menekan tombol Print Screen yang

terdapat pada keyboard.

Page 19: TUGAS_SO_1411600958_MUHAMAD_FITRA_SYAWAL.pdf

Page 18 of 48

Interrupt 6 & 7

Kegunaan: Kosong

Interrupt 8

Kegunaan: Time Of Day

Interrupt ini bertugas untuk menjaga waktu yang terdapat pada PC, dipanggil sebanyak 18.2

kali setiap detik. Jika tanggal pada PC akan diganti, maka interrupt ini akan melakukannya.

Interrupt ini akan memanggil Interrupt 1C hexa setiap kali dipanggil.

Interrupt 9

Kegunaan: Keyboard

Interrupt ini bertanggung jawab atas masukan dan keyboard. Interrupt ini akan dipanggil dan

menerjemahkan masukan dan keyboard menjadi scan code dan ASCII code dan diletakkan

di suatu buffer yang disebut dengan Keyboard Buffer.

Interrupt OAh

Kegunaan: Kosong

Interrupt OBh dan OCh

Kegunaan: Comunication

Kedua interrupt ini berguna untuk menangani masukan dan keluaran melalui alat

komunikasi.

Interrupt ODh

Kegunaan: Printer Alternate

Interrupt ODh menangani printer alternate.

Interrupt OEh

Kegunaan: Disket

Interrupt OEh merupakan suatu generator disk.

Interrupt OFh

Kegunaan: Printer

Interrupt OFh merupakan suatu generator printer.

Page 20: TUGAS_SO_1411600958_MUHAMAD_FITRA_SYAWAL.pdf

Page 19 of 48

Interrupt 10h

Kegunaan: Video Handling

Interrupt 10h Service 0h

Kegunaan: Set Screen Mode

Fungsi 0h dan Interrupt 10h berguna untuk mengeset mode layar yang diinginkan.

Mode layar terdiri atas:

Mode Bentuk

0 40 * 25 hitam putih

1 40 * 25 berwarna

2 80 * 25 hitam putih

3 80 * 25 berwarna

4 320 * 200 berwarna

5 320 * 200 hitam putih

6 640 * 200 berwarna

7 80 * 25 monokrom (untuk layar monokrom)

Input: Output:

AH = 0 Tidak ada

AL = Mode layar

Interrupt 10h Service 01h

Kegunaan: Set Cursor Type

Fungsi ini berguna untuk mengeset tipe kursor yang sedang aktif. Untuk menghilangkan

kursor, bit kelima dan CH harus berisikan 1.

Input: Output:

AR = Olh Tidak ada

CH = Garis mulai kursor

CL = Garis akhir kursor

Page 21: TUGAS_SO_1411600958_MUHAMAD_FITRA_SYAWAL.pdf

Page 20 of 48

Interrupt 10h Service 02h

Kegunaan: Set Cursor Position

Fungsi ini berguna untuk mengatur letak kursor pada layar.

Input: Output:

Ah = 02h Tidak ada

DH = Bans layar

DL = Kolom layar

Bh = Halaman layar

Interrupt 10h Service 03h

Kegunaan: Find Cursor Position & Type

Fungsi ini berguna untuk mengambil posisi kursor pada layar, beserta tipe kursor tersebut.

Input: Output:

AH = 03h DH = Baris layar

BR = Ralaman layar DL = Kolom layar

CH = Garis awal kursor

CL = Garis akhir kursor

Interrupt 10h Service 04h

Kegunaan: Read Light Pen Position

Fungsi mi berguna untuk mengambil posisi light pen.

Input: Output:

AH = 04h AH = 0 — Light Pen tidak ada

AH = 1 — Light Pen ada dan posisi

pada DH = baris

DL = kolom

Interrupt 10h Service 05h

Kegunaan: Set Aktive Display Page

Fungsi ini berguna untuk mengaktifkan halaman layar.

Input: Output:

AR = 04h Tidak Ada

AL = 0 — 3 Mode layar 2,3

= 0 — 7 Mode layar 0,1

Page 22: TUGAS_SO_1411600958_MUHAMAD_FITRA_SYAWAL.pdf

Page 21 of 48

Interrupt 10h Service 06h

Kegunaan: Scrool Active Page Up

Fungsi mi akan menghapus isi layar ke atas, warna yang dihapus akan diletakkan di nible

atas register BH dan terdiri atas:

Angka Warna

0 Hitam

1 Biru

2 Hijau

3 Cyan

4 Merah

5 Magenta

6 Kuning

7 Putih

8 Hitam berkedip

9 Biru terang (berkedip)

A Hijau terang (berkedip)

B Cyan terang (berkedip)

C Merah terang (berkedip)

D Magenta terang (berkedip)

E Kuning terang (berkedip)

F Putih terang (berkedip)

Input: Output:

AL = Jumlah baris yang dihapus Tidak ada

0= semua).

CH,CL = Baris, Kolom titik atas daerah yang dihapus

DH,DL = Baris, Kolom titik bawah daerah yang dihapus

Bh = Warna layar yang muncul

AH = 06h

Page 23: TUGAS_SO_1411600958_MUHAMAD_FITRA_SYAWAL.pdf

Page 22 of 48

Interrupt 10h Service 07h

Kegunaan: Scrool Active Page Down

Fungsi ini berguna untuk menhapus layar secara ke bawah.

Input: Output:

AH = 07h Tidak ada

CH,CL = Baris, Kolom titik atas

daerah yang akan dihapus

DH,DL = Baris, Kolom titik bawah

daerah yang akan dihapus

BH = Warna layar yang muncul

AL = banyaknya bans yang dihapus

(0 = semua)

Interrupt 10h Service 08h

Kegunaan: Read Character And Attribute

Fungsi mi berguna untuk membaca warna dan karakter yang terdapat pada posisi kursor.

Input: Output:

AH =08h AH =Warna tulisan

BH = Halaman layar AL = Kode ASCII tulisan

Interrupt 10h Service 09h

Kegunaan: Write Karakter And Attribute

Fungsi mi berguna untuk mencetak karakter dengan warna pada posisi kursor. Di sini

karakter yang dicetak menurut Tabel IBM ASCII, bukan Tabel ASCII.

Input: Output:

AH = 09h Tidak ada

AL = Kode ASCII

BR = Halaman layar

BL = Warna karakter

CX = Banyaknya karakter yang akan dicetak

Page 24: TUGAS_SO_1411600958_MUHAMAD_FITRA_SYAWAL.pdf

Page 23 of 48

Interrupt 10h Service 0Ah

Kegunaan: Write Character

Fungsi mi berguna untuk mencetak sebuah karakter di posisi kursor. Di sini karakter yang

dicetak adalah menurut Tabel IBM ASCII, bukan Kode ASCII. Berbeda dengan service 09h,

service mi hanya mencetak dalam warna 07h (putih di atas hitam) pada mode layar teks dan

mencetak dengan warna pada mode layar grafik.

Input: Output:

AR = OAh Tidak ada

AL = Kode ASCII

BH = Halaman layar

CX = Banyaknya karakter yang dicetak

BL = Warna (untuk grafik)

Interrupt lOh Service OBh

Kegunaan: Set Color Palette .

Fungsi ini berguna untuk mengatur komposisi warna (palette) suatu layar grafik. Register

BH harus berisikan kode palette yang mempunyai 2 kemungkinan yaitu 0 dan 1. Bila register

BH berisikan 0 maka register BL dapat berisikan kode warna dengan 16 warna dengan

pembagian 4 bit untuk warna dasar dan 4 bit untuk warna border. Adapun ke-16 warna

tersebut adalah:

0 = Hitam

1 = Biru

2 = Hijau

3 = Cyan

4 = Merah

5 = Magenta

6 = Cokiat

7 = Putih 8 = Gray

9 = Biru Terang

10 = Hijau terang

11 = Cyan terang

12 = Merah terang

13 = Magenta terang

Page 25: TUGAS_SO_1411600958_MUHAMAD_FITRA_SYAWAL.pdf

Page 24 of 48

14 = Kuning

15 = Putih bersinar

Bila register BH berisikan 1, maka pilihan register BL hanya dua

yaitu:

0 untuk Hijau/Merah/Coklat

1 untuk CyanlMagenta/Putih

Input: Output

AH = OBh tidak ada

BH = Kode palette

BL = Kode warna

Interrupt 10h Service OCh

Kegunaan: Write Pixel Dot

Fungsi mi berguna untuk mencetak sebuah titik di layar grafik.

Input: Output

AH= 0Ch tidak ada

AL = warna titik

CX = kolom titik

DX = baris titik

Interrupt lOh Service ODh

Kegunaan: Read Pixel Dot

Fungsi ini berguna untuk membaca titik yang terdapat di warna layar grafik.

Input: output

AH = ODh AL = warna titik

CX = Kolom titik CX = colom titik

DX = Baris titik DX = baris titik

Interrupt 10h Service 0Eh

Kegunaan: TTY Character Output

Fungsi mi berguna untuk mencetak karakter dan tabel ASCII ke layar.

Input: Output:

AH = OEh Tidak ada

Page 26: TUGAS_SO_1411600958_MUHAMAD_FITRA_SYAWAL.pdf

Page 25 of 48

AL = Kode ASCII

BH = Halaman layar

BL = Warna tulisari (pada layar grafik)

Interrupt 10h Service 0Fh

Kegunaan: Get Current Aktive Page

Fungsi mi berguna untuk mengambil halaman layar yang sedang aktif pada saat interrupt mi

dijalankan.

Input: Output:

AH = OFh AH = Lebar layar

AL = Mode layar

BH = Halaman layar yang aktif

Interrupt 11h

Kegunaan: Get Equipment List

Interrupt 11h berguna untuk mengambil Equipment list. Equipment List merupakan suatu

byte data yang bit-bitnya menyatakan komposisi peralatan komputer yang terdiri atas:

Bit Keterangan

14—15 banyaknya parallel printer

13 serial printer/internal modem

12 GAME I/O

9 — 11 Jumlah RS-232

8 Reserved (kosong)

6 — 7 Jumlah disk drive ( 0 = 1 drive).

4 — 5 Inisial Mode layar.

2 — 3 RAM di Motherboard

1 NDP (Co-Processor 8087)

0 Disk Drive

Input: Output:

Tidak Ada AL = Equipment List

Page 27: TUGAS_SO_1411600958_MUHAMAD_FITRA_SYAWAL.pdf

Page 26 of 48

Interrupt 12h

Kegunaan: Get Memory Size

Interrupt 12h ini berguna untuk mengambil besarnya memory induk (base memory) yang

terdapat pada komputer.

Input: Output:

Tidak Ada AX = Besarnya memory dalam KB

Interrupt 13h

Kegunaan: Disk Function

Interrupt 13h Berguna untuk mengatur operasi disk.

Interrupt 13h Service 0h

Kegunaan: Reset Disk Drive

Fungsi 0h dan Interrupt 13h berguna untuk melakukan Reset terhadap suatu disk drive.

Input: Output:

AH = 0 Tidak Ada

Interrupt 13h Service 01h

Kegunaan: Get Floppy Disk Status

Fungsi mi berguna untuk mengetahui apakah terjadi kesalahan pada disk. Adapun kesalahan

pada disk tersebut adalah:

Isi Disket/Hard disk Arti

0(0) SEMUA Tidak ada error

1(1) SEMUA Kesalahan Parameter Disket (Invalid diskette parameter)

2(2) SEMUA Alamat yang dituju tidak ada (Address mark was not found)

3(3) DISKET Menulis di disket yang terproteksi (Attempted write on protected diskette)

4(4) SEMUA Sector tidak ditemukan (Sector was not found)

5(5) Hard disk Reset gagal (Reset failed)

6(6) DISKET Disket dipindahkan (Diskette was removed)

7(7) Hard Disk Kesalahan tabel parameter (Bad Parameter Table)

8(8) DISKET DMA melampaui operasi sebenarnya (DMA Overrun on previous operation)

9(9) SEMUA Operasi melewati 1 segment (Attempted to cross 64k segment)

A(10) Hard Disk Bad Sector Flag 10(16) SEMUA kesalahan CRC atau ECC pada saat baca

(CRC or ECC error on disk read)

Page 28: TUGAS_SO_1411600958_MUHAMAD_FITRA_SYAWAL.pdf

Page 27 of 48

11(17) Hard Disk Data yang dibenarkan dan ECC (ECC corrected data error)

20(32) SEMUA Controller failed

40(80) SEMUA Seek Operation Failed

80(128) SEMUA Drive tidak siap (Drive timed out,assumed not ready)

AA(170) Hard Disk Drive not ready

BB(187) Hard Disk Undefined Error

CC(204) Hard Disk Write fault

E0(224) Hard Disk Status Error

Input: Output:

AH = 1 AL = Status

Interrupt 13h Service 02h

Kegunaan: Read Disk Sectors

Fungsi ini berguna untuk membaca suatu sector dan disket. Bila terjadi kesalahan, kesalahan

akan sama dengan status yang terdapat pada fungsi 1.

Input: Output:

AH = 02h AH = Kode Kesalahan

AL = Jumlah sector

BX = Offset buffer tampung

CH = Track

CL = Sector

DH = Side

DL = Drive

ES = Segment buffer tampung

Interrupt 13h Service 03h

Kegunaan: Write Disk Sectors

Fungsi ini berguna untuk menulis sector ke disk. Bila terjadi kesalahan operasi akan terdapat

kode kesalahan di register AH yang artinya dapat Anda lihat pada service 01h.

Input: Output:

AH = 03h AH = Kode kesalahan

AL = Jumlah sector

BX = Offset data yang akan ditulis

CH = Track

Page 29: TUGAS_SO_1411600958_MUHAMAD_FITRA_SYAWAL.pdf

Page 28 of 48

CL = Sector

DH = Side

DL = Drive

ES = Segment data yang akan ditulis

Interrupt 13h Service 04h

Kegunaan: Verify Disk Sectors

Fungsi ini berguna untuk mengecek kesalahan suatu sector dan disk. Kode kembali dan hasil

interrupt mi dapat Anda cocokan dengan daftar yang terdapat pada fungsi 0lh.

Input: Output:

AH = 04h AH = Kode kesalahan

AL = Jumlah sector

CH = Track

CL = Sector

DH = Side

DL = Drive

Interrupt iSh Service 05h

Kegunaan: Format Disk Track

Fungsi ini berguna untuk memformat disket secara per track.

Input: Output:

AH = 02h AH = Kode kesalahan

AL = Jumlah sector

BX = Offset dan CHRN

CH = Track

CL = Sector

DH = Side

DL = Drive

ES = Segment dan CHRN

Page 30: TUGAS_SO_1411600958_MUHAMAD_FITRA_SYAWAL.pdf

Page 29 of 48

Interrupt 13h Service 06h & 07h

Kegunaan: Tidak ada

Interrupt 13h Service 08h

Kegunaan: Return Drive Parameters

Fungsi ini berguna untuk mengambil parameter hard disk. Karena kadang-kadang nomor track

lebih besar dan 1 byte data (255), maka 2 bit paling atas dan CL yang berisi sector akan

digunakan untuk 2 bit paling besar dan CH yang berisi track.

Nomor drive yang diberikan harus lebih besar atau sama dengan 80h.

Input: Output:

AR = 08h CH = Track

DL = Drive Hard Disk CL = Sector /Track

(80≤ ) DH = Side

DL = Banyak drive dalam 1 harddisk

Interrupt 13h Service 09h

Kegunaan: Initialize Fixed Disk Table

Fungsi ini hampir sama dengan fungsi 0 dan interrupt 13h. Perbedaannya, fungsi ini hanya

khusus untuk hard disk sehingga nomor drive yang diberikan paling kecil 80h.

Input: Output:

AH = OAh Tidak ada

DL = Drive (80h)

Interrupt 13h Service 0Ah

Kegunaan: Read Long Sectors

Fungsi mi berguna untuk membaca suatu sector dan hard disk, isi register DL harus lebih

besar dan 80h.

Input: Output:

AR = OAh AH = Kode Kesalahan

AL = Sector

BX = Offset buffer penampung

CH = Track

CL = Sector

DH = Side

DL = Drive ( 80h≤)

ES = Segment Buffer Penampung

Page 31: TUGAS_SO_1411600958_MUHAMAD_FITRA_SYAWAL.pdf

Page 30 of 48

Interrupt 13h Service 0bh

Kegunaan: Write Long Sectors

Fungsi ini berguna untuk menulis suatu sector ke hard disk.

Input: Output:

AH = OBh AH = Kode kesalahan

AL = Sector

BX = Offset data

CH = Track

CL = Sector

DH = Side

DL = Drive ( 8Oh)

ES = Segment Data

Interrupt 13h Service 0Ch

Kegunaan: Seek Cylinder

Fungsi ini berguna untuk memindahkan head pembaca hard disk dan suatu track ke track lain.

Input: Output:

AH = OCh AH = Kode kesalahan

CH = Bagian bawah track

CL = Bagian atas track (bit 6 & 7)

DH = Head

DL = Drive ( 80h )

Interrupt 13h Service 0Dh

Kegunaan: Alternate Reset

Fungsi ini hampir sama dengan fungsi 0, namun fungsi ini digunakan untuk hard disk.

Input: Output:

AH = 0Dh AH = Kode kesalahan

DL = Drive (80h )

Page 32: TUGAS_SO_1411600958_MUHAMAD_FITRA_SYAWAL.pdf

Page 31 of 48

Interrupt 14h

Kegunaan: Comunication

Fungsi ini berguna untuk memprogram port komunikasi.

Interrupt 14h Service Oh

Kegunaan: Initialize Communications Port

Fungsi ini berguna untuk melakukan inisialisasi suatu port komunikasi.

2. Interrupt DOS

definisi : Interrupt yang disediakan oleh DOS (int di atas 1Fh)

NO Service Fungsi

INT 20 - Menghentikan proses komputer terhadap suatu program

COM

INT 21 01 Membaca karakter dari keyboard dan

menampilkan di layar

Register input : AH=01h

Register output : AL=kode ASCII

02 Mencetak karakter ke layar

Register input : AH=02

05 Output ke printer

Register input : AH=05

Register output : DL

09 Mencetak string ke layar

Register input : AH=09

22h - Terminate Code

23h - Ctrl-Break Code

24h - Critical Error Handler

25h - Absolute Disk Read

26h - Absolute Disk Write

27h - Terminate But Stay Resident

Page 33: TUGAS_SO_1411600958_MUHAMAD_FITRA_SYAWAL.pdf

Page 32 of 48

Mengenal Lebih Detail tentang Interrupt – Interrupt DOS

.Interrupt DOS yang paling bermanfaat adalah 21 heks, karena banyak sekali operasi yang

dapat dikerjakannya, tetapi kita harus meninjau interrupt-interrupt DOS lainnya.

Interrupt 20 Heks : Menghentikan program

Kita biasanya rnenghentikan program dengan interrupt DOS 20 heks untuk mudah-nya. Kita

hanya perlu memberikan perintah 2 byte ini:

INT 20h

dan kendali akan dialihkan pada DOS. Metode penghentian program ini hanya dapat

digunakan pada program-program COM, tidak untuk EXE. Namun ini bukan masalah sebab

kita umurnnya membuat program COM. Tentu saja saudara dapat mempelajari cara-cara

penghentian program EXE. Cobalah lihat interrupt 27 dan interrupt 21 fungsi 4C heks.

Interrupt 23 Heks : Menjebak Control-Break

Sering kali kita dapat menghentikan dan menjalankan suatu program dengan menekan

Ctrl-Break atau dengan Ctrl-C. Kombinasi tombol ini memang menyebabkan pembelokan

mula-mula ke interrupt 23 heks, lalu ke suatu rutin DOS untuk menghentikan program

tersebut. Tetapi, saudara dapat melarang pemakai untuk menghentikan program melalui cara

ini atau malah memperbaiki aksi ini dengan menampilkan pertolongan atau pertanyaan.

Caranya adalah dengan mengubah vektor interrupt 23 heks sehingga mengarah ke program

saudara. Lalu, jika pemakai menekan Ctrl-Break, kendali akan dialihkan pada rutin buatan

saudara sendiri. Saudara juga dapat menghentikan program dengan menjalankan instruksi

INT 23.

Kadang-kadang jika saudara mengubah suatu vektor interrupt, saudara ingin nilai-nilai barn

tersebut tetap ada hingga 1(omputer dirnatikan. Kadang-kadang pula saudara ingin

memulihkan nilai-nilai lama sebelum program berhenti. Dengan interrupt 23 heks, DOS

selalu memulihkan nilai-nilai awal begitu program selesai.

Interrupt 27 Heks : Program Tetap ada di memori

Kedua interrupt di atas sangat mudah digunakan karena selalu menjalankan tugas yang sama;

saudara cukup memberika instruksi dua-byte tersebut. Tetapi jika kita dapat mengubah aksi

suatu interrupt, maka kita harus menyediakan informasi tambahan dalam suatu register.

Page 34: TUGAS_SO_1411600958_MUHAMAD_FITRA_SYAWAL.pdf

Page 33 of 48

Interrupt 27 hek adalah salah satu contohnya. Intruksi ini dipakai untuk memasang resident-

code, yaitu program yang tetap tinggal dalam memori hingga komputer dimatikan atau

di- reset. Biasanya resident code akan menjebak interrupt lain dan mengubah operasinya. Dapat

juga program itu menjalankan suatu peripheral. Device driver dan program yang menyediakan

RAM disk serta print spooler menggunakan interrupt ini.

Untuk menggunakan interrupt ini kita harus menjalankan program ganda. Salah satu bagian

meliputi instruksi pemasangan, dan lainnya adalah bagian yang resident. Kita

mengarahkan register DX pada akhir bagian resident program tersebut, lalu menjalankan

intruksi 27 heks. Bagian program pemasangan dihentikan, dan kendaH diaJihkan ke DOS.

Tetapi, DOS tidak membebaskan semua memori yang barn saja dipakai oleh program tadi.

DOS mengurangi ukuran memori uantuk kerja dengan menaikkan awal alamat untuk

menjalankan.program, untuk melindungi bagian resident yang barn saja dipasang. Memori

yang disisihkan untuk program resident ini tidak dapat dipakai lagi sampai komputer dirnatikan

atau di-reset.

Kita akan menggunakan interrupt ini nanti untuk menukar tombol-tombol papan-ketik,

mengganti karakter pencetak, dan memperkecil ukuran memori di bawah 512K byte (seperti

yang dikendaki sebagai program). Sekarang, marilah melihat fungsi-fungsi yang tersedia

pada interrupt 21 heks.

1. FUNGSI DOS

Kita telah meninjau beberapa interrupt DOS yang hanya melakukan layanan tunggal. Kita

sekarang akan melihat suatu layanan yang cukup rumit yang dapat menjalankan lusinan tugas

yang berbeda, yaitu interrupt 21 heks DOS. Operasi yang dikehendaki ditentukan dengan

nilai pada register AH. Register lain kadang-kadang juga harus diatur. Dengan inter- rupt ini

kita dapat membaca papan-ketik, menulis pada layar dan pencetak, serta menjalankan berbagai

operasi disk. Tampaknya, ada sepasang fungsi DOS yang menjalankan tugas yang sarna.

Tetapi sebenamya satu golongan dirancang untuk DOS versi 1 dan menggunakan konsep file

control block (FCB), sedangkan satunya dikembangkan untuk DOS versi 2 atau lebih tinggi,

yang menggunakan konsep file-handle. Kita hanya akan menggunakan metode yang kedua,

karena jauh lebih mudah. Karena itu fungsi-fungsi yang menggunakan FCB tidak dibahas

di sini. Daftar fungsi DOS yang dibahas ada pada Tabel 8.1 dan dibicarakan dengan rinci

pada bagian berikut.

Page 35: TUGAS_SO_1411600958_MUHAMAD_FITRA_SYAWAL.pdf

Page 34 of 48

2. RINGKASAN SEBAGIAN FUNGSI INTERRUPT DOS 21 HEKS

Fungsi-fungsi DOS 21 heks yang digunakan dalam buku ini diuraikan dalarn bagian ini,

bersama-sarna dengan fungsi-fungsi hebat yang tidak digunakan dalarn buku ini. Untuk

menggunakan fungsi-fungsi ini, letakkan nomor fungsi dan register AH. Register lain hams

. diisi seperti yang diuraikan. Lalu perintah:

INT 21h

juga diberikan. Data mungkin tersedia dalarn satu register atau lebih sekembalinya dari

interrupt.

Fungsi 1: Membaca menampilkan karakter papan-ketik

Saat fungsi ini dijalankan, pemrosesan akan berhenti sarnpai ada tombol ditekan. Jadi fungsi

ini menunggu input. Jika karakter yang diketik adalah ASCII, maka ini ditampilkan pada

layar video. Karakter tab secara otomatis diperlebar dengan menarnbahkan spasi hingga ke akhir

bidang 8-kolom berikutnya. Menekan Ctrl-Break akan menghentikan operasi. Untuk

menggunakan fungsi ini, isi register AH dengan 1 dan jalankan interrupt 21 heks. Karakter

input dikembalikan pada register AL jika itu adalah ASCII. Jika tombol yang ditekan

sarna dengan sandi yang diperluas, maka register AL akan berisi O. Lalu fungsi ini harns

diulangi untuk mendapatkan sandi yang diperluas tersebut. Jika nilai kedua lebih kecil dari 84,

maka nilai ini mewakili sandi lacak tombol yang ditekan. Controlnya, nilai 30

menunjukkan bahwa tombol Alt dan huruf A ditekan, karena sandi lacak huruf A adalah 30.

Begitu pula, jika nilai kedua sarna dengan 81, ini menunjukkan bahwa tombol PgDn telah

ditekan, karen a ini adalah sandi lacak tombol ini. Contoh ketiga: nilai 59 menunjukkan

bahwa tombol Fl yang ditekan, karena itulah sandi lacaknya. Nilai di atas 83 lebih sukar

dicari. Misalnya, penekanan Shift dengan Fl menghasilkan 84, sedangkan Alt dengan 1

menghasilkan 120. Lihat fungsi 6, 7, dan 8 untuk operasi yang serupa. Saudara dapat

menentukan apakah suatu karakter papan-ketik sedang menunggu untuk dibaca dengan fungsi

B heks Input dapat dibaca dari piranti atau disk lain dengan penyaluran (redirection) dari

standar input.

Page 36: TUGAS_SO_1411600958_MUHAMAD_FITRA_SYAWAL.pdf

Page 35 of 48

Fungsi 2: Menulis karakter ke layar video

Fungsi ini menampilkan karakter dalam register DL pada layar video. Ini bermanfaat untuk

menuliskan satu atau dua karakter di layar video (gunakan fungsi 9 untuk string yang lebih

panjang). Fungsi ini amat berguna untuk menampilkan tanda dolar, karena fungsi 9 tak bisa

melakukannya. Fungsi ini juga berpasangan dengan fungsi 8, yang membaca karakter dari

papan-ketik tetapi tidak menampilkannya. Karakter backspace menggerakkan kursor ke kiri,

tapi tidak mengganti (menghapus) karakter di sana. Output dapat dikirimkan ke piranti

lain atau berkas disk dengan menyalurkan (redirect) standar output dengan karakter >.

Page 37: TUGAS_SO_1411600958_MUHAMAD_FITRA_SYAWAL.pdf

Page 36 of 48

Fungsi 3: Membaca dari port serial

Fungsi 3 membaca satu karakter dari standar auxiliary input, yang didefmisikan sebagai AUX

atau COMI. Tetapi, kita dapat mengubah port standard auxiliary ke COM2 dengan program

MODE. Fungsi ini akan menunggu hingga satu byte muncul. Letakkan nilai 3 dalam register

All dan jalankan interrupt 21 heks. Karakter yang dibaca dapat dilihat dalam register AL.

Fungsi 4: Menulis ke Port Serial

Fungsi 4 mengirirnkan byte dalam register DL ke port AUX atau COMI. lsi register All dengan

nilai 4, lalu jalankan interrupt 21. Port lain dapat digunakan dengan mengubahnya lebih dulu

dengan program MODE.

Fungsi 5: Menulis ke port pencetak

Gunakan fungsi ini untuk mengirirnkan karakter dalam register DL ke port pencetak

standard, PRN atau LPTI. Tetapi dapat juga LPT2 atau LPT3 digunakan, asal dipilih lebih

dulu dengan program MODE. Letakkan nilai 5 dalam AH dan jalankan interrupt 21.

Fungsi 6: Input papan-ketik dan output video langsung

Fungsi 6 dapat melakukan baik input ataupun output; dan juga dapat menentukan status input.

Berbeda dengan fungsi input lainnya, yang ini tidak menunggu hingga karkter

dimasukkan. Perhatikan pula bahwa karakter input tidak ditarnpilkan dan Ctrl-Break tidak

dapt menghentikan operasi ini.

Seperti biasa, DL berisikan karakter output dan AL menerima karakter yang masuk. Proses

input dimulai dengan menempatkan FF heks dalam DL. Letakkan nilai 6 dalam register

All dan jalankan interrupt 21 heks. Sekembalinya dari fungsi ini, zero flag akan dinyalakan

jika tak ada karakter yang masuk. Jika zero flag kosong, berarti karakter tersebut ada dalam

AL. Jika DL berisikan nilai lain selain FF Heks, maka karakter tersebut akan dikirirnkan

ke piranti output standard. Bandingkan pula dengan fungsi 7 dan 8.

Fungsi 7: Membaca karakter papan-ketik tanpa dpantulkan ataupun Break Detection

Untuk menggunakan fungsi 7, letakkan nilai 7 dalam AH dan jalankan interrupt 21 heks. Fungsi

ini, seperti fungsi 1, juga menunggu ketika karakter. Jika yang masuk adalah karakter ASCII,

maka nilai ASCII-nya dikembalikan dalam AL. Karakter grafik IDM dapat dimasukkan dengan

menekan tombol Alt dan mengetik nilai desimalnya pada tombol-tombol bilangan khusus

di bagian kiri papan ketik. Nomor akan muncul pada register AL. Tetapi jika karakter yang

Page 38: TUGAS_SO_1411600958_MUHAMAD_FITRA_SYAWAL.pdf

Page 37 of 48

diperluas seperti tombol fungsi, tombol kursor atau kombinasi Alt dimasukkan, nilai nol

nampak pada register AL. Fungsi harus dipanggil dua kali untuk menentukan karakter. Tetapi

tidak seperti fungsi 1, fungsi ini tidak menampilkan karakter input. Lebih lanjut, Ctrl -Break

tidak menghentikan proses. Bandingkan juga dengan fungsi 6 dan 8.

Fungsi 8: Membaca karakter papan-ketik tanpa dipantulkan tetapi dengan Break

Detection

Fungsi 8 mirip dengan fungsi 1 karena sama-sama menunggu ketikan tombol dan berhenti jika

Ctrl-Break ditekan. Tetapi, karakter input tidak ditampilkan, dan karakter tab tidak

diperlebar. Isikan nilai 8 dalam AH dan jalankan interrupt 21 heks. Bandingkan pula dengan

fungsi 6 dan 7.

Fungsi 9: Menampilkan sederetan karakter

Fungsi ini amat berguna untuk menampilkan sederetan karakter pada layar. Telah kita Iihat

bahwa fungsi 2 dan 6 dapat menampilkan satu karakter, tetapi fungsi 9 lebih mudah

digunakan jika untuk menampilkan Iebih dari satu karaker. Tentu saja, karakter tak-tercetak

(misaInya carriage return, line feed, dan Esc) dapat disertakan dalam string ini.Untuk

menggunakan fungsi ini, letakkan string tersebut di suatu tempat dalam memori dan akhirilah

dengan tanda dolar (saudara tidak dapat menggunakan tanda dolar dalam string ini, gunaka,n

fungsi 2 untuk keperluan ini). Alamat string ini nantinya harus di-letakkan dalam register

DS:DX. lsi AH dengan 9 dan jalankan interrupt 21 heks.Nanti kita akan membuat suatu macro

yang akan mempermudah pemakaian fungsi ini. Selanjutnya, kita cukup menampilkan string

dengan ekspresi sederhana seperti ini

@mulai 'Contoh pemakaian @mulai'

Fungsi A heks: Input papan-ketik dengan buffer

Tadi telah kita lihat bahwa fungsi 1, 6, 7, dan 8 membaca karakter tunggal sekali setiap waktu.

Tetapi seringkali lebih mudah membaca sederetan karakter sekaligus, sehingga pemakai dapat

mengadakan pembetulan sebelum deretan terse but diterima komputer. Fungsi A heks

dirancang untuk maksud ini. Semua karakter yang diketik oleh pemakai akan melewati buffer

papan-ketik, Keampuhan tombol-tombol penyunting DOS, misalnya kursor ke kiri, ke kanan,

penyisipan dan penghapusan juga tersedia. Jika tombol Return ditekan, maka deretan karakter

tadi dimasukkan buffer input.

Page 39: TUGAS_SO_1411600958_MUHAMAD_FITRA_SYAWAL.pdf

Page 38 of 48

Sebelum menggunakan fungsi ini, saudara harus menyiapkan buffer tadi dalam memori. Ada

dua byte pembantu yang terletak di awal buffer. Yang pertama men-definisikan panjang

maksimum teks yang dapat disimpan dalam buffer; sedangkan yang kedua menunjukkan

jumlah karakter yang dimasukkan oleh pemakai. anda yang mencntukan nilai byte pertama;

sedangkan DOS akan mengisi byte kedua setelah buffer dibaca. DOS juga menambahkan

karakter carriage return pada akhir string input. Tetapi, carriage return ini tidak ikut dihitung

dalam nilai kedua. Karenanya, saudara harus mengatur kapasitas maksimum buffer menjadi

satu byte lebih besar daripada yang saudara perlukan. Untuk menggunakan papan-ketik

dengan buffer, atur register DS:DX hingga sarna dengan byte pembantu pertama, yaitu byte

yang menentukan ukuran maksimum buffer. Letaknya. adalah dua byte sebelum teks. lsi

AH dengan A heks dan jalankan interrupt 21 heks.

Fungsi B heks: Status papan-ketik

Telah kita lihat bahwa fungsi 1, 7 dan 8 menunggu input papan-ketik. Jika tidak ada tombol

yang ditekan, komputer akan menunggu terus hingga ada tombol yang ditekan. Tetapi kita dapat

menghindari penungguan input ini dengan memeriksa status dengan fungsi B heks. lsi AH

dengan ~ heks dan jalankan interrupt 21 heks. Sekembalinya dari fungsi ini, AL akan berisi nol

jika tak ada tombol yang ditekan. Nilai lain yang terdapat pada AL menunjukkan bahwa ada

karakter yang sedang ditunggu. Fungsi ini tidak membaca karakter; gunakan fungsi 1, 7,

atau 8 untuk maksud tersebut.

Fungsi File Control Block

Kelompok fungsi berikut ini menggunakan operasi disk dengan file control block (FCB). Teknik

Ini sedemikian canggung sehingga kita tidak akan menggunakannya. Sebagai gantinya, kita

akan menggunakan sederetan fungsi sepadan yang merujuk suatu file handle. Akan saudara

lihat bahwa ada satu fungsi, yaitu 40 heks, yang bisa digunakan dengan 31 heks, suatu

fungsi FCB, atau 4C heks, suatu fungsi file-handle.

Fungsi 25 heks: Mengganti vektor interrupt

Telah kita ketahui bahwa bagian awal memori berisikan vektor-vektor interrupt, yaitu

alamat empat-byte yang mengarah pada rutin-rutin ROM BIOS dan DOS. Kita dapat mengubah

aksi rutin-rutin ini dengan mengganti vektor interruptnya. Contohnya, kita dapat mematikan

tombo] PrtSc dengan mengubah vektor interrupt 5 pada alamat 14 heks.

Pada prinsipnya, kita dapat mengubah suatu vektor interrupt cukup dengan me-nuliskan yang

Page 40: TUGAS_SO_1411600958_MUHAMAD_FITRA_SYAWAL.pdf

Page 39 of 48

tak terduga jika interrupt itu dijalankan pada saat sedang diubah. karena itu, lebih arnan

menyuruh DOS mengubah vektor ini dengan fungsi 25 heks. Vektor 32-bit yang baru ini

ditempatkan pada rgister DS:DX, dan register AL diisi dengan nomor vektor. Isilah AH

dengan 25 heks dan jalankan interrupt 21 heks. Lihatlah fungsi 35 heks untuk operasi

pelengkapnya.

Fungsi 30 heks: Menear; nomor versi DOS

Banyak hal baru yang diperkenalkan pada DOS versi 2 atau lebih. Tetapi operasi-operasi ini tak

dapat digunakan pada versi-versi DOS sebelumnya. Karena itu, jika saudara

menggunakan fasiJitas barn ini, saudara pertama-tama harus menggunakan fungsi 30-heks untuk

melihat apakah DOS yang digunakan adalah versi 2 atau lebih baru. Jika nomor versinya

adalah 1, saudara harus menghentikan program dengan memberitahukan bahwa program

harus dijalankan dengan DOS versi 2 atau lebih.Untuk menggunakan fungsi ini, isi AH

dengan 30 heks dan jalankan interrupt 21 heks, Nomor versi "mayor" akan dihasilkan pada

AL, kecuali lebih kecil daripada 2. Jika hal ini yang terjadi maka hasilnya akan nol. Register

AH akan berisikan nomor versi "minor't-nya, yaitu yang terletak di belakang desimal. Jadi

versi 3.1 akan menghasilkan 3 pada AL dan 1 pada AH, sedangkan versi 1.1 hanya akan

menghasilkan 0 pada AL.

Fungsi 31 heks: Selesai tetapi tetap berada di memori

Telah kita lihat bahwa penggerak piranti dan pemegang interrupt dapat dipasang dengan

interrupt 27 heks DOS. Fungsi 31 heks menyediakan layanan yan sarna, tetapi dengan tambahan

fasilitas. Fungsi ini juga menghasilkan sandi kesalahan yang dapat diuji dengan perintah

ERRORLEVEL dalam berkas batch. kalau tidak, sandi kesalahan dapat diperoleh dengan

fungsi 4D heks.

Seperti dengan fungsi 27 heks, kita juga harus meletakkan offset akhir program resident tersebut

pada DX. Lalu kita isi register AH dengan 31 heks dan jalankan interrupt 21 heks,

Fungsi 35 heks: Mencari vektor interrupt

Telah kita lihat bahwa kita dapat mengubah operasi rutin DOS dan BIOS dengan

mengganti vektor-vektor interruptnya di bagian awal memori. Caranya adalah dengan menyalin

vektor-vektor asli ke dalam program kita sebelum mengubah suatu vektor hingga mengarah

pada program kita. Selanjutnya kita dapat meloncat dari program kita ke alamat asli. Contoh

Page 41: TUGAS_SO_1411600958_MUHAMAD_FITRA_SYAWAL.pdf

Page 40 of 48

lain: kita ingin memulihkan suatu vektor interrupt dengan nilai aslinya pada suatu saat. Kita

harus menyalin vektor aslinya ke suatu daerah penyimpanan sebelum kita mengubahnya,

Segera sete'ah kita lakukan itu, kita dengan mudah me-rnulihkan yang asli dari temper

penyimpanan tadi.

Tempatkan nomor interrupt dalam register AL, isi AH dengan 35 heks dan jalankan

interrupt 21 heks. Sekembalinya dari interrupt, register ES:BX akan berisikan vektor yang

saudara inginkan. Lihatlah fungsi 25 heks untuk lawannya.

Berkas disk dan file handle

Fungsi-fungsi DOS berikutnya memanipulasi berkas dengan file handle. Ini hanya bisa

dilakukan dengan DOS versi 2 atau sesudahnya. Kita dapat menggunakan suatu handle untuk

mencipta, membaca menulis, mengganti nama, atau menghapus berkas disk.

Suatu nama berkas pada DOS versi 1 hanya terbatas pada satu disk drive, delapan karakter

nama utama, dan tiga karakter akhiran, misalnya:

C:SORTFAST.ASM

DOS versi 2 memperkenalkan konsep subdirectory. Sekarang, satu atau lebih nama subdirectory,

diakhiri dengan karakter backslash, juga dapat disertakan sebagai nama berkas. Jadi suatu

rujukan untuk berkas dengan DOS 2 akan tampak seperti ini :

C:\ASSEMBLER\sYSTEMS\sORTFAST.ASM

File handle diperkenalkan untuk menyederhanakan rujukan pada nama jalur yang sangat

panjang. Kita akhiri suatu namajalur dengan nol (ini disebut string ASCIIZ), lalu mengarahkan

register DS:DX ke awal nama berkas itu, isi register CX dengan atribut herkas (biasanya 0), lalu

jalankan fungsi yang sesuai. Setelah itu DOS akan menghasilkan (mengembalikan) handle yang

dimaksud atau suatu sandi kesalahan dalam register AX. Kita dapat membedakan antara

keduanya dengan flag carry - yang nyala jika ada kesalahan Atribut berkas dicantumkan pada

Tabel 8.2. Sandi kesalahan standard ada pada Tahel 8.3.

Page 42: TUGAS_SO_1411600958_MUHAMAD_FITRA_SYAWAL.pdf

Page 41 of 48

Page 43: TUGAS_SO_1411600958_MUHAMAD_FITRA_SYAWAL.pdf

Page 42 of 48

Jumlah maksimum file-handle yang dapat digunakan program awalnya adalah 8. Tetapi

saudara dapat meningkatkan jumlah ini menjadi 20 dengan perintah.

FILES = 20

Selain itu, DOS secara otomatis memasang lima handle (0-4) ke tiga piranti peripheral

CON, AUX, PRN (tiga handle digunakan CON). Tetapi program saudara hanya membutuhkan

3 handle. Dengan demikian sisanya adalah 5 handle, suatu bilangan yang dapat dinaikkan

hingga 17. pembagian handle DOS ditampilkan dalam TabeI8.4. Handle untuk berkas saudara

dimulai dari nomor 5.

Fungsi 3C heks: Buat berkas baru

Fungsi 3C heks menciptakan berkas barn sesuai dengan nama jalur yang ditentukan. Jika bekas

dengan nama yang sama sudah ada, maka berkas itu dihapus. Biasanya memang ini yang

diinginkan. Tetapi jika saudara ingin menghindari penghapusan tidak sengaja, saudara harns

memeriksa directory lebih dahulu.

Seperti yang kita lihat dalam bagian berikut, kita meletakkan nol pada akhir nama jalur dan

mengarahkan resister DS:DX ke awal nama jalur. Register CX berisi nol, yaitu atribut

berkasnya. Pada waktu membuat berkas barn, DOS tak peduli nilai CX, dan selalu mengisinya

dengan DOl. lsi AH dengan 3C heks dan jalankan interrupt 21 heks. Sekembalinya, periksalah

apakah carry flag nyala, yang berarti ada kesalahan. karena sandi kesalahan adalah sama

untuk semua pemakaian file-handle, saudara dapat menciptakan rutin kesalahan standard

untuk semua rutin penanganan berkas. Jika tidak ada kesalahan, simpanlah file handle tersebut,

karena nanti ini harns digunakan sebagai rujukan pada berkas ini.

Fungsi 3D heks: Membuka berkas yang sudah ada

Jika kita ingin membaca berkas yang sudah ada, mula-mula kita harus membukanya dengan

fungsi 3D heks. Seperti tadi, kita tempatkan nol pada akhir nama jalur dan mengarahkan register

DS:DX ke awal nama jalur. Kita isikan salah satu mode akses seperti dalam Tabel 8.5 ke

dalam AL yang biasanya DOl. isi AH dengan 3D heks dan jalankan interrupt 21 heks.

Sekernbalinya, lihatlah apakah carry flag menyala, yang berarti ada kesalahan. Jika tidak ada

kesalahan, simpanlah file handle yang saudara dapatkan dalam register AX.

Page 44: TUGAS_SO_1411600958_MUHAMAD_FITRA_SYAWAL.pdf

Page 43 of 48

Fungsi 3E heks: Menutup berkas disk

Setelah menciptakan berkas dengan fungsi 3C heks, dan menuliskan data padanya dengan fungsi

40 heks, kita harns menutup berkas, karena kalau tidak bisa rusak. Isikan file handle yang

bersangkutan pada register BX, lalu isi AH dengan 3E hex, dan jalankan interrupt 2J heks.

Sekembalinya, lihat apakah carry flag nyala; jika ya berarti ada kesalahan.

Fungsi 3F heks: Membaca berkas atau piranti

Setelah suatu berkas disk diciptakan, ditulis, dan ditutup, kita bisa mernbacanya Iagi.

Tentu saja, mula-mula kita harus membuka berkas tersebut dengan fungsi 3D heks untuk

mendapatkan file handle. Kita isikan handle pada BX dan tempatkan dalam ex jumlah byte

yang akan dibaca pada suatu saat. Jumlahnya bisa kita tentukan sendiri, namun lebih besar

lebih baik. Selain 'itu, jumlah tersebut harus merupakan kelipatan sektor- 512 atau 1024

supaya lebih cepat. Register DS:DX menunjuk lokasi pada memori tempat data akan disalin.

Page 45: TUGAS_SO_1411600958_MUHAMAD_FITRA_SYAWAL.pdf

Page 44 of 48

lsi AH dengan 3F heks dan jalankan interrupt 21 heks. Sekembalinya dari proses tersebut,

lihatlah apakah carry hag nyala, tanda bahwa ada kesalahan. Jika tidak ada kesalahan, AX

akan berisikan jumlah byte yang terbaca dari disk. Jika jumlah ini lebih kecil daripada jumlah

dalam ex, berarti saudara telah mencapai akhir berkas. Kalau tidak, berarti masih ada data

lagi yang belum terbaca. karenanya, setelah mengolah data yang barn dibaca, jalankan sekali

lagi fungsi 3F heks. Saudara tidak perlu menutup suatu berkas jika yang saudara lakukan

hanya membacanya, meskipun dengan menutup berkas saudara akan membebaskan satu

handle yang tadi terpasang pada berkas tersebut.

Karena DOS secara otomatis memang handle ke peripheral, saudara dapat menggunakan fungsi

ini untuk membaca dari papan-ketik. Dalam hal ini, bile handle dalam BX adalah O.

Fungsi 40 heks: menulis berkas atau piranti

Setelah menciptakan berkas dengan fungsi 3C heks, kita dapat rnenuliskan data ke

dalamnya dengan fungsi 40 heks. Fungsi ini adalah pelengkap dari fungsi 3F heks. File

handle yang digunakan ditempatkan dalam BX, sedangkan register DS:DX rnengarah pada

lokasi data dalam memori, dan jumlah byte yang ditulis dari buffer memori ditempatkan

dalam CX. lsi AH dengan 40 heks dan jalankan interrupt 21 heks. Sekembalinya, periksalah

apakah carry flag nyala, yaitu tanda adanya kesalahan. Jika tidak ada, AX akan berisikan

jumlah byte yang dituliskan ke disk. Jika bilangan ini lebih kecil daripada yang ada dalam

register CX, berarti saudara telah mencapai akhir berkas. kalau tidak berarti masih ada data

yang hams dituliskan. Jangan lupa menutup berkas dengan fungsi 3E.

Karena DOS secara otomatis rnemasang handle ke peripheral, saudara dapat rnenggunakan

fungsi ini untuk menulis ke video. Dalam hal ini, file handle dalam BX adalah 1.

Fungsi 41 heks: Menghapus berkas disk

Fungsi 41 heks dipakai untuk rnenghapus berkas yang sudah ada; sebenarnya yang dikerjakannya

hanya menandai catatan directory untuk menunjukkan bahwa berkas sudah dihapus. Karena

itu, mungkin bagi kita untuk memulihkan isi berkas yang tak sengaja terhapus. Kita perIu

menghapus suatu berkas yang sudah ada jika kita menciptakan berkas bam dengan nama sarna.

Fungsi 3C heks otomatis melakukan hal ini.

Untuk menggunakan 41 heks, kita letakkan nol pada akhir narna jalur dan arahkan register

DS:I)X ke awal nama jalur. Isikan 41 heks ke AH dan jalankan intenupt 21 heks. Setelah itu,

periksalah apakah carry flag nyala, yaitu tanda adanya kesalahan. Saudara tidak bisa

menghapus berkas yang sedang terbuka atau yang berstatus baca-saja.

Page 46: TUGAS_SO_1411600958_MUHAMAD_FITRA_SYAWAL.pdf

Page 45 of 48

Fungsi 43 heks: Atribut berkas

~G.tagunakan fungsi 43 heks untuk menentukan atau untuk mengubah atribut berkas. Kita

letakkan ncl pada akhir nama jalur dan arahkan register DS:DX ke awal nama jalur. Untuk

rnenentukan atribut, isi AL dengan nol, isi AH dengan 43 heks, dan jalankan interrupt.

Sekembalinya, periksalah apakah carry flag nyala, yaitu tanda adanya kesalahan. Jika tidak

ada, atribut berkas dapat dilihat dalam register CX. Nilai FFFF heks dalam register AX

menandakan tidak ada kesalahan untuk hard disk.

Fungsi 4A heks: Mengubah ukuran memori

Jika suatu program dijalankan, maka semua memori yang tersisa akan disisihkan untuknya. Jika

kita melakukan hal itu, maka kita hams membebaskan semua memori yang disisihkan pada

program pertama untuk program kedua. Fungsi 4A heks digunakan untuk maksud

ini.Register ES merujuk pada blok yang akan diubah; untuk program-program kita ini sarna

dengan yang ada dalam CS. Register BX berisikan jumlah paragraf 16-byte yang tersisa

setelah kita menurunkan jumlah memori yang diperlukan program pertama hingga rruru-

mum. Saudara dapat menghitung nilai ini dengan membagi panjang program dengan 16 dan

menaikkan hasilnya. lsi AH dengan 4A heks dan jalankan interrupt 21 heks, Sekembalinya,

periksalah apakah carry flag nyala, yaitu tanda adanya kesalahan. Sekarang kita siap

menggunakan fungsi ini dengan fungsi 4B heks.

Fungsi 4B heks: Memuat dan menjalankan program

Fungsi 4B heks dapat melakukan dua hal yang berbeda dengan menyalin isi berkas disk ke

memori. Kita dapat memuat data dan menggunakannya, atau kita bisa menyalin program lain

ke memori dan menjalankannya. Namnn, sebelum kita bisa memuat program lain, kita harus

melepaskan sejumlah memori dengan fungsi di atas, yaitu 4A heks.

U ntuk memuat suatu program, kita meletakkan nol pada akhir nama jalur yang dimaksud dan

mengarahkan register DS:DX ke awal nama jalur itu. Register AL berisikan nilai nol jika yang

dimuat dan dijalankan adalah program barn, atau 3 jika yang dimuat adalah berkas dan tak

dijalankan:

Page 47: TUGAS_SO_1411600958_MUHAMAD_FITRA_SYAWAL.pdf

Page 46 of 48

Register ES:BX akan mengarah ke suatu biok parameter yang berisikan infonnasi tentang

program barn itu. Tabel 8.6 adalah rincian biok parameter untuk pemuatan dan penjalanan

suatu program. Blok parameter berisikan 7 word (14 byte). Word pertama adalah alamat

Segment string lingkungan (environment string); nilainya terletak pada alamat 2C heks dalam

program. String ini menentukan drive yang berisikan Ietak modul COMMAND. Di situ juga

disertakan jalur pencarian yang sudah ditetapkan.

Tiga word ganda sisanya menunjukkan letak informasi yang harus disampaikan pada

program. Yang pertama adalah baris perintah, dua lainnya adalah FCB pertama dan kedua.

Kita dapat menggunakan baik baris perintah atau FCB untuk menyampaikan parameter ke

program barn. Jika ada subdirectory yang perlu disertakan dalam parameter tersebut, maka

kita hams menggunakan baris perintah. Kalau tidak kita dapat menggunakan FCB. Selanjutnya,

AH kita isi dengan 4B heks dan jalankan interrupt 21 heks. Sekembalinya, periksalah apakah

carry flag nyala, yaitu tanda adanya kesalahan.

Jika kita hanya ingin memuat suatu berkas disk ke memori tanpa menjalankannya, kita

menggunakan blok parameter lain, yang panjangnya hanya 2 word. W od pertama adalah

Segment tujuan pemuatan berkas tersebut, sedangkan yang kedua adalah faktor relokasi yang

diperlukan jika program .EXE yang dimuat. Ini akan menghasilkan penempatan relatif pro-

gram itu dalam Segment. Blok parameter pemuatan ditampilkan pada Tabel 8.7.

Page 48: TUGAS_SO_1411600958_MUHAMAD_FITRA_SYAWAL.pdf

Page 47 of 48

Setelah program kedua dihentikan, kendall akan dikembalikan ke program semula Karena

program kedua bisa saja mengubah seluruh register, kita harus menyimpan nilai asal stack-

pointer dan register-register stack-segment sebelum menjalankan fungsi 4B heks. Sesudah

itu, kita pulihkan lagi isi register-register sekembalinya dari program kedua.

Fungsi 4C heks: Menghentikan program

Ada beberapa cara untuk menghentikan program dan kembali ke DOS. Kita biasanya

menggunakan interruppt 20 heks, tetapi fungsi ini hanya dapat digunakan dalam berkas

COM; tidak bisa untuk menghentikan program EXE. Metode umum untuk menghentikan

baik program COM atau EXE adalah dengan fungsi 4C heks.

Fungsi ini juga menyediakan suatu sandi kesalahan yang bisa diuji dengan perintah

ERRORLEVEL dalam berkas batch. Selain itu, suatu subprogram yang dimuat dengan

kesalahan ini diambil dengan fungsi 40 heks. lsi AH dengan 4C heks dan jalankan interrupt

21 heks. Fungsi ini juga menutup tiap berkas yang dibuka dengan fungsi-fungsi 3C heks dan

30 heks.

Fungsi 4D heks: Menentukan sandi kesalahan

Seperti yang kita lihat tadi, suatu sandi kesalahan dapat diperoleh saat subprogram

dihentikan baik dengan fungsi 31 atau 4C heks. Sandi ini ditentukan dengan memanggil

fungsi 40 heks dan ditampilkan dalam register AL. Register AH menunjukkan sebab

penghentian, seperti yang dicantumkan dalam Tabel 8.8. Nol berarti penghentian normal, 1

berarti Ctrl-Break ditekan, 2 karena ada kesalahan krisis piranti, dan 3 jika program dihentikan

dengan fungsi 31 heks.

Fungsi 56 heks: Mengubah nama berkas

Saudara dapat mengubah nama suatu berkas dengan fungsi 56 heks, tetapi nama baru tersebut

sebelumnya tidak boleh ada. Nama baru dan nama lama bisa terdapat dalam directory yang

berbeda pada disk yang sama, tetapi tidak boleh mengacu pada disk yang berbeda.Sebelum

menjalankan fungsi ini, letakkan nol biner pada akhir tiap nama. Ini akan mengarahkan register

DS:DX ke nama lama dan register ES:DI ke nama yang bam. lsi AH dengan 56 heks dan

jalankan interrupt 21 heks. Sekembalinya, periksa keadaan carry flag untuk mencari

kesalahan. Register AL akan berisi 3 jika kedua nama ada pada disk yang berbeda. Nilai

5 berarti nama bam sudah ada.

Page 49: TUGAS_SO_1411600958_MUHAMAD_FITRA_SYAWAL.pdf

Page 48 of 48