Kamis, 23 Juni 2011

Festival Rath Yatra


ORGANISASI KEROHANIAN HINDU ISKCON-INDONESIA
RATH YATRA FESTIVAL
3 JULI 2011

Setiap tahunnya pada hari yang penuh keberuntungan pada awal bulan juli, para umat hindu merayakan festival Rath Yatra. Rath(kereta pertempuran), Yatra(arak-arakan atau pawai). Festival Rath Yatra adalah sebuah pawai kereta pertempuran dimana krishna dalam wujudnya sebagai Sri Jagannatha diarak bersama Sri Balaram dan Dewi Subadra di puri Jagannatha,india

Berpartisipasi dalam festival Rath Yatra ini, sangatlah berkarunia, karena membebaskan seseorang dari reaksi dosa, dan apabila di akhir kehidupan seseorang mengingat perayaan festival Rath Yatra ini, selanjutnya dia bisa pulang kembali ke dunia rohani

Dengan ini kami mengundang segenap umat untuk ikut menyaksikan dan menghadiri upacara Sri Jagantaha Maha Rata Yatra yang akan berlangsung tanggal 3 Juli 2011 dimulai pukul 12 siang sampai dengan selesai.

Sri Sri Krishna Balaram Ashram
Jl. Padang Galak, Penyu Dewata III, Kesiman, Denpasar-Bali
Phone: 0361-9940919, 285376 Fax: 0361-289893
Email: iskcon_ind@yahoo.com

Rabu, 22 Juni 2011

ASSEMBLER DIRECTIVE

Selain menyediakan mekanisme untuk menyatakan instruksi dalam suatu program, bahasa assembly memungkinkan programer untuk menetapkan informasi lain yang diperlukan untuk mentranslasikan source program ke dalam object program. Kita telah menyebutkan bahwa kita perlu untuk menetapkan nilai numerik ke tiap nama yang digunakan dalam program. Misalkan nama SUM digunakan untuk menyatakan nilai 200. Fakta ini mungkin disampaikan ke program assembler melalui pernyataan seperti
SUM EQU 200’
Pernyataan ini tidak menunjuk suatu instruksi yang akan dieksekusi pada saat object program dijalankan; sebenarnya, bahkan tidak akan muncul dalam object program. Hanya memberitahu assembler bahwa nama SUM seharusnya digantikan dengan nilai 200 kapanpun muncul dalam program. Pernyataan semacam itu, yang disebut assembler directive (atau perintah), digunakan oleh assembler pada saat mentranslasikan source program menjaadi object program.
Untuk menjalankan program pada komputer, maka kita perlu untuk menuliskan source codenya dalam bahasa assembly yang diperlukan, menetapkan semua informasi yang diperlukan untuk menghasilkan object program yang sesuai. Misalkan tiap instruksi dan tiap item data memiliki satu word memori. Juga asumsikan bahwa memori tersebut adalah byte addressable dan word lengthnya adalah 32 bit. Misalkan juga bahwa object program diload dalam memori utama sebagaimana yang ditunjukkan dalam Gambar 8.1. Gambar tersebut menujukkan alamat memori dimana instruksi mesin dan item data yang diminta didapatkan setelah program diload untuk eksekusi. Jika assembler adalah untuk menghasilkan object program sesuai dengan pengaturan ini, maka harus mengetahui :
· Bagaimana menginterpretasikan nama tersebut
· Dimana barns menempatkan instruksi tersebut dalam memori
· Dimana harus menempatkan operand data dalam memori
Untuk mendapatkan informasi ini, source program dapat ditulis sebagaimana ditampilkan pada Gambar 8.2. Program dimulai dengan assembler directives. Kita telah membahas direktive Equate, EQU, yang menginformasikan pada assembler tentang nilai SUM. Assembler directive yang kedua, ORIGIN, menyatakan pada program assembler tempat untuk meletakkan blok data berikutnya di memori. Dalam hal ini, lokasi yang ditetapkan memiliki alamat 204. Karena lokasi ini diload dengan nilai 100 (yang merupakan bilangan entri dalam list), maka directive DATAWORD digunakan untuk menginfonnasikan pada assembler persyaratan ini. Dinyatakan bahwa nilai data 100 ditempatkan dalarn word memori pada alamat 204.
Pernyataan apapun yang menghasilkan instruksi atau data ditempatkan dalam lokasi memori dapat diberi label alamat memori. Label tersebut menetapkan suatu nilai yang setara dengan alamat lokasi tersebut. Karena pernyataan DATAWORD diberi label N, maka nama N ditetapkan dengan nilai 204. Kapanpun N digunakan pada sebagian program, maka akan digantikan dengan nilai tersebut. Menggunakan N sebagai label dengan cara tersebut ekuivalen dengan menggunakan assembler directive :
N EQU 204
Directive RESERVE menyatakan bahwa suatu blok memori 400 byte akan direserve untuk data, dan nama NUM1 dihubungkan dengan alamat 208. Directive initidak menyebabkan data apapun diload ke lokasi tersebut. Data dapat diload dalam memori menggunakan prosedur input.
Directive ORIGIN kedua menetapkan bahwa instruksi object program akan diload dalam memori mulai dari alamat 100. Diikuti dengan instruksi yang ditulis dengan mnemonic dan syntax yang sesuai. Pernyataan terakhir dalam source program adalah assembler directive END, yang menyatakan pada assembler bahwa ini merupakan akhir teks source program. Directive END menyertakan label START, yang merupakan alamat lokasi dimana eksekusi program dimulai.
Kita telah menjelaskan semua pernyataan dalam Gambar 8.2 kecuali RETURN. Ini merupakan assembler directive yang menyatakan titik dimana eksekusi program harus dihentikan. Pernyataan ini menyebabkan assembler menyisipkan suatu instruksi mesin yang sesuai yang mengembalikan kontrol ke sistem operasi komputer tersebut. Kebanyakan bahasa assembly meminta pernyataan dalam source program dituliskan dalam bentuk :
Label Operation Operand Comment
Empat field tersebut dipisahkan oleh delimiter yang sesuai, biasanya satu atau lebih karakter kosong. Label adalah nama opsional yang dihubungkan dengan alamat memori dimana instruksi bahasa mesin yang dihasilkan dari pernyataan tersebut akan diload. Label juga dapat dihubungkan denagn alamat item data. Pada Gambar 8.2 terdapat lima label: SUM, N, NUM1, START, dan LOOP.
Field Operation berisi mnemonic OPcode dari instruksi yang dimaksud atau directive assembler. Field Operand berisi informasi pengalamatan untuk mengakses satu atau dua operand, tergantung pada tipe informasinya. Field Comment diabaikan oleh program assembly. Field tersebut digunakan untuk tujuan dokumentasi sehingga program lebih mudah dipahami.
Kita hanya telah memperkenalkan karakteristik bahasa assembly yang sangat dasar. Bahasa ini berbeda detil dan kompleksitasnya dari satu komputer ke komputer lain.

BAHASA ASSEMBLY NOTASI BILANGAN dan OPERASI INPUT/OUTPUT DASAR

NOTASI BILANGAN
Pada saat berhadapan dengan nilai numerik, seringkali lebih mudah untuk menggunakan notasi desimal yang telah dikenal. Tentu saja, nilai tersebut disimpan dalam komputer sebagai bilangan biner. Pada beberapa situasi, lebih mudah untuk menetapkan pola biner secara langsung. Kebanyakan assembler memungkinkan bilangan numerik dinyatakan dengan berbagai cara yang berbeda, menggunakan konvensi yang ditetapkan oleh syntax bahasa assembly. Misalkan, bilangan 93, yang dinyatakan dengan bilangan biner 8bit 01011101. Jika nilai ini digunakan sebagai operand Immediate, maka dapat dinyatakan sebagai bilangan desimal, sebagaimana dalam instruksi :
ADD #93, RI
atau sebagai bilangan bitter yang diidentifikasi dengan simbol awalan seperti tanda persen, sebagaimana dalam
ADD #%01011101, R1
Bilangan biner dapat dituliskan lebih padat sebagai bilangan heksadesimal, atau hex, dengan empat bit dinyatakan dengan digit hex tunggal. Notasi hex adalah ekstensi langsung dari kode BCD yang terdapat dalam Apendiks E. Sepuluh pola pertama 0000, 0001, ..., 1001, dinyatakan dengan digit 0, 1, ..., 9 sebagaimana dalam BCD. Sisa enam pola 4bit, 1010, 1011, ..., I111, dinyatakan dengan huruf A, B, ..., F. Dalam representasi heksadesimal, nilai desimal 93 menjadi SD. Dalam bahasa assembly, representasi hex seringkali diidentifikasi dengan awalan tanda dolar. Sehingga kita menuliskannya
ADD #$SD, R1

OPERASI INPUT/OUTPUT DASAR
Bagian sebelumnya dalam bab ini mendeskripsikan instruksi mesin dan mode pengalamatan. Kita telah mengasumsikan bahwa data yang dikenai operasi instruksi ini telah disimpan dalam memori. Kita sekarang membahas sarana yang digunakan untuk mentransfer data antara memori komputer dan dunia luar. Operasi Input/Output (I/O) sangat penting, dan cara operasi tersebut dijalankan dapat memiliki efek yang signifikan pada performa komputer.
Misalkan suatu tugas untuk membaca input karakter dari keyboard dan menghasilkan output karakter pada layar display. Cara sederhana untuk menjalankan tugas I/O tersebut adalah dengan menggunakan metode yang dikenal sebagai programcontrolled I/O. Kecepatan transfer data dari keyboard ke komputer dibatasi oleh kecepatan mengetik user, yang tampaknya tidak melebihi beberapa karakter per detik. Kecepatan transfer output dari komputer untuk ditampilkan jauh lebih tinggi. Hal ini ditentukan oleh kecepatan karakter ditransmisikan melalui link antara komputer dan perangkat display, biasanya, beberapa ribu karakter per dedtik. Akan tetapi ini masih jauh lebih lambat daripada kecepatan prosesor yang dapat mengeksekusi jutaan instruksi per detik. Perbedaan kecepatan antara prosesor dan perangkat I/O menimbulkan kebutuhan akan adanya mekanisme untuk mensinkronisasikan transfer data diantara keduanya.
Gambar Koneksi bus untuk prosesar, keyboard, dan display.
Solusi untuk persoalan tersebut adalah sebagai berikut: pada output, prosesor mengirim karakter pertama dan kemudian menunggu sinyal dari display bahwa karakter telah diterima. Kemudian mengirim karakter kedua, dan seterusnya. Input dikirim dari keyboard dengan cara yang sama; prosesor menunggu sinyal yang mengindikasikan bahwa suatu tombol karakter telah ditekan dan kodenya tersedia dalam beberapa register buffer yang diasosiasikan dengan keyboard. Kemudian prosesor membaca kode tersebut.
Keyboard dan display adalah perangkat yang terpisah. Tindakan menekan suatu tombol pada keyboard tidak secara otomatis menyebabkan karakter yang sesuai ditampilkan pada layar. Satu blok instruksi dalam program I/O mentransfer karakter tersebut ke prosesor, dan blok lain yang berhubungan dengan instruksi tersebut menyebabkan ditampilkannya karakter tersebut.
Misalkan suatu persoalan pemindahan kode karakter dari keyboard ke prosesor. Menekan suatu tombol akan menyimpan kode karakter yang sesuai dalam register buffer 8bit
yang sesuai dengan keyboard. Mari kita sebut register ini DATAIN. Untuk memberitahu prosesor bahwa karakter yang valid berada dalam DATAIN, suatu status control flag, SIN, diset ke 1. Suatu program memonitor SIN, dan saat SIN diset ke 1, prosesor membaca isi DATAIN. Pada saat karakter ditransfer ke prosesor, maka SIN secar otomatis dikosongkan ke 0. Jika karakter kedua dimasukkan melalui keyboard, maka SIN diset lagi ke 1 dan proses tersebut diulang.
Proses yang analog terjadi pada saat karakter ditransfer dari prosesor ke display. Register buffer, DATAOUT, dan status control flag, SOUT, digunakan untuk transfer ini. Pada saat SOUT setara dengan I, maka display siap untuk menerima suatu karakter. Di bawah kontrol program, prosesor memonitor SOUT, dan pada saat SOUT diset ke 1, prosesor mentransfer kode karaktei ke DATAOUT. Transfer karakter ke DATAOUT mengosongkan SOUT ke 0; pada saat perangkat display siap untuk menerima karakter kedua, maka SOUT sekali lagi di set ke 1. Register buffer DATAIN dan DATAOUT dan flag status SIN dan SOUT adalah bagian dari sirkuit yang biasanya dikenal sebagai device interface. Sirkuit untuk tiap perangkat dihubungkan ke prosessor melalui bus.
Untuk menjalankan transfer I/O, kita memerlukan instruksi mesin yang dapat memeriksa keadaan flag status dan transfer data antara prosesor dan perangkat I/O. Instruksi tersebut memiliki kemiripan format dengan yang digunakan untuk memindahkan data antara prosesor dan memori. Misalnya, prosesor dapat memonitor flag status keyboard SIN dan transfer karakter dari DATAIN ke register Rl dengan rangkaian operasi sebagai berikut:
READWAIT Branch to READMIT if SIN = 0
Input from DATAIN to R1
Operasi Branch biasanya diimplementasikan oleh dua instruksi mesin. Instruksi pertama menguji flag status dan yang kedua menjalankan branch. Sekalipun detilnya bervariasi dan satu komputer ke komputer lain, ide utamanya adalah prosesor memonitor flag status dengan mengeksekusi wait loop pendek dan melanjutkan untuk mentransfer data input pada saat SIN diset ke 1 sebagai hasil dari adanya suatu tombol yang ditekan. Operasi Input mereset SIN ke 0.
Rangkaian yang analog dari operasi tersebut digunakan untuk mentransfer output ke dis play. Contohnya adalah WRITEWAIT Branch to WRITEWAIT if SOUT = 0 Output from R1 to DATAOUT Lagi, operasi Branch biasanya diimplementasikan oleh dua instruksi mesin. Wait loop dieksekusi berulangkali hingga flag status SOUT diset ke 1 oleh display pada saat display bebas untuk menerima suatu karakter. Operasi Output mentransfer suatu karakter dari RI ke DATAOUi untuk ditampilkan, dan operasi tersebut mengosongkan SOUT ke 0.
Kita mengasumsikan bahwa keadaan awal SIN adalah 0 dan keadaan awal SOUT adalah 1. Awalan ini biasanya dilakukan oleh sirkuit kontrol perangkat pada saat perangkat ditempatkan di bawah kontrol komputer sebelum eksekusi program dimulai.
Hingga sekarang, kita telah mengasumsikan bahwa alamat yang dinyatakan oleh prosesor untuk untuk mengakses iustruksi dan operand selalu mengacu ke lokasi memori. Banyak komputer menggunakan pengaturan yang disebut memorymapped I/O dimana beberapa nilai alamat memori digunakan untuk mengacu ke register buffer perangkat periferal, seperti DATAIN dan DATAOUT. Sehingga, tidak ada instruksi khusus untuk mengakses isi register tersebut; data dapat ditransfer antara register dan prosesor menggunakan instruksi yang telah kita bahas, seperti Move, Load, atau Store. Misalnya, isi buffer karakter keyboard DATAIN dapat ditransfer ke register R1 dalam prosesor dengan instruksi MoveByte DATAIN, RI Serupa dengan isi register RI dapat ditransfer ke DATAOUT dengan instruksi MoveByte R1, DATAOUT Flag status SIN dan SOUT secara otomatis dikosongkan pada saat masingmasing mengacu pada register buffer DATAIN dan DATAOUT. Kode operasi MoveByte menunjukkan bahwa ukuran operand adalah satu byte, untuk membedakannya dari kode operasi Move yang telah digunakan untuk operand word. Kita telah menetapkan bahwa dua buffer data, dapat diberi alamat seakan keduanya adalah dua lokasi memori. Sangat dimungkinkan untuk menangani flag status SIN dan SOUT dengan cara yang sama, dengan menetapkan alamat yang berbeda padanya. Akan tetapi, lebih umum untuk menyertakan SIN dan SOUT pada register device status, satu untuk tiap dua perangkat. Mari kita asumsikan bahwa bit b3 dalam register INSTATUS dan OUTSTATUS masingmasing berhubungan dengan SIN dan SOUT. Operasi baca yang barn saja dideskripsikan dapat diimplementasikan dengan rangkaian instruksi mesin
READWAIT Testbit #3,INSTATUS
Branch=0 READWAIT
MoveByte DATAIN, R1
Operasi tulis dapat diimplementasikan sebagai berikut:
WRITEWAIT Testbit #3, OUTSTATUS
Branch=0 WRITEWAIT
MoveByte RI, DATAOUT
Instruksi Testbit menguji keadaan satu bit pada lokasi destinasi, dimana posisi bit yang diuji diindikasikan oleh operand pertama. Jika bit yang diuji setara dengan 0, maka kondisi instruksi branch adalah benar, dan suatu branch dibuat pada awal wait loop. Pada saat perangkat tersebut siap, yaitu pada saat bit yang diuji menjadi setara dengan 1, data dibaca dari buffer input atau ditulis ke buffer output.
Program yang ditampilkan pada gambar di bawah menggunakan dua operasi untuk membaca baris karakter yang diketikkan pada keyboard dan dikirim ke parangkat display. Pada saat karakter tersebut dibaca, satu demi satu, karakter tersebut disimpan pada area data dalam memori dan kemudian ditampilkan pada display. Program berakhir pada saat karakter carriage return, CR, dibaca, disimpan, dan dikirim ke display. Alamat lokasi byte pertama dari memori data area tempat baris tersebut disimpan adalah LOC dengan instruksi pertama dari program tersebut. RO dinaikkan untuk tiap karakter yang dibaca dan ditampilkan oleh mode pengalamatan Autoincrement yang digunakan dalam instruksi Compare
.

Gambar program yang membaca sebaris karakter dan menampilkannya
Program controlled IO memerlukan keterlibatan kontinyu prosesor dalam aktifitas l/0. Hampir semua waktu eksekusi untuk program dalam gambar dihitung dalam dua wait loop, pada saat prosesor menunggu karakter yang akan ditekan atau menunggu display tersedia. Sangat diinginkan untuk menghindari terbuangnya waktu eksekusi prosesor pada situasi ini. Teknik I/O yang lain, berdasar pada penggunaan interrupt, dapat digunakan untuk meningkatkan utilisasi prosesor.

Bahasa Assembly Layanan Input/Output

  1. 1. PROSEDUR / SUBRUTIN
Prosedur adalah suatu blok intruksi yang secara logic melakukan suatu tugas tetentu yang dapat dipanggil oleh program utama atau prosedur lain. Setap prosedur mempunyai suatu tugas otomik yang tidak tergantung pada program lain. Pada beberapa bahasa pemrograman, prosedur juga sering disebut subrutin.
Unsur penting dalam suatu prosedur adalah nama prosedur. Suatu prosedur dapat digunakan oleh prosedur lain atau program utama dengan cara memanggil nama prosedurnya. Penggunaan prosedur dapat dilakukan berulang-ulang sesuai keperluan.
Dalam pemrograman high level, terdapat dua istilah yang memiliki karakteristik yang sedikit berbeda, yaitu konsep prosedur dan fungsi. Fungsi adalah ssubrutin yang mengembalikan hasil, sedangkan prosedur tidak. Istilah subrutin merupan istilah umum dari keduanya. Kata prosedur dan subrutin sering dipakai secara bergantian.
KEYWORD PROC, ENDP, CALL DAN RET
Dalam bahasa assembly, KEYWORD PROC dan ENDP menandai awal dan akhir prosedur. Pada contoh program dibawah ini terdapat dua prosedur yang diberi nama “main” dan “first_proc”. Dalam prosedur main terdapat perintah call, yaitu perintah untuk memanggil prosedur. Pada akhir prosedur first_proc terdapat perintah ret, yaitu perintah untuk kembali ke intruksi pada prsedur pemanggil.
.code
Main PROC
...
Mov ax,1
Mov dx,ax
Call first_proc
...
...
Main ENDP
First_proc PROC
...
Mov cx, 2
Mov bx, 3
...
...
First_proc ENDP
Contoh program : FIRST2PROC.ASM
Pada contoh berikut terdapat dua buah prosedur, yaitu prosedur input_char dan calc_sum. Prosedur input_char berfungsi untuk memasukkan karakter dari keyboard dan mengembalikanya kedalam AL. Prosedurnya sangat sederhana, hanya mengandung dua intruksi yang diperlukan untuk memanggil fungsi 1 DOS (input keyboard). DOS otomatis mengembalikan karakterke dalam AL. Jadi, nilai akan tersimpan disana ketika input_char kembali kepemanggilnya, yaitu prosedur main.
Title contoh program subrutin
Dosseg
.model small
.stack 100h

.data
Char db ?
Array dw 100h, 200h,300h,400h,500h
Array_size equ 5
Sum dw ?

.code
Main proc
Mov ds, ax
Call input_char
Mov char, al
Mov bx,offset array
Mov cx,array_size
Call calc_sum
Mov sum,ax

Mov ax,4000h
Int 21h
Main endp

Cala_sum proc
Push bx
Push cx
Mov ax,0
Cls :
Add ax,[bx]
Add bx,2
Loop csl
Pop cx
Pop bx
Ret
Calc_sum endp
End main
Prosedur calc_sum menghitung jumblah isi array integer sampai 65,535 integer. Untuk memangggil prosedur ini, pada prosedur main dilakukan settiing offset array. Nilai offset array ditempatkan dalam register bx. Untuk menghitung jumlah elemen, digunakan register cx. Program pemanggil harus menyesuaikan parameter sesuai keperluan subrutin yang dipangggil
TIPE PROSEDUR NEAR DAN FAR
NEAR
Pemanggilan prosedur NEAR dilakukan ketika pemangil dan surutin berada dalammsegment program yang sama. Dalam hal ini assembler akan membuat kode mesin untuk near call. Sebelum mengakses subrutin, intruksi call menyimpan nilai IP (INTUKTION POINTER) saat ini kedalam stack. Kemudian nilai IP diganti dengan nilai offset subrutin. Dengan cara inilah subrutin dijalankan.
Intruksi RET (kependekan dari Return) pada akhir prosrdur berfungsi untuk mengembalikan eksekusi intuksi pada program pemanggil. Proses yang terjadi adalah nilai yang terdapat dalam stack diambil kembali dan dimasukkan kedalam IP. Dengan cara ini maka intruksi yang akan eksekusi berikutnya adalah intruksi yang terdapat pada program pemanggil.
Tabel diatas menjelaskan tentang proses pemanggilan prosedur NEAR dengan contoh offset.
FAR
Pemanggilan prosedur FAR dilakukan ketika pemanggil dan subrutin berada pada segment kode yang berbeda. Dalam hal ini assembler akan membuat kodee mesin untuk far call. Sebelum mengaksees subrutin, intruksi CALL terlebiih dahulu menyimpan nilai register CS dan IP saat inii kedalam stack. Kemudian, intruksi tersebut mengambil alamat segment subrutin kedalamm CS dan offsetnya kedalam IP.
Tabel diatas menunjukkan prosedur main membuat pemanggiln prosedur FAR terhadap subrutin dalam segmen berbeda. Deklarasi FAR harus ditambahkan sesudah nama subrutin 1 dan operator FAR PTR ditambahkan pada intruksi call pada saat memanggil. Pada akhir subruti 1, assembler akan membuat intruksi mesin khusus RETF. Intruksi ini berfungsi untuk mengembalikan eksekusi kepada pemanggilnya. Waktu eksekusi untuk prosedur FAR lebih lambat dari pada prosedur NEAR karena adnya penambahan proses push dan pop untuk nilai segmennya ( CS ).
2. INTERRUPT
Interrupt terdiri dari dua jenis yaitu :
A. Interrupt Perangkat Keras
Interrupt perangkat keras adalah sinyal yang dikirim perangakat keras sistem yang memerlukan respons segera dari CPU. Interrupt perangkat keras ini dihasilkan oleh chip khusus, controlle interrupt, yang memberi sinyal pada CPU untuk menangguhkan eksekusi program yang sedang dieksekusi dan memproses intrrupt. Contoh sederhana interrupt perangkat keras adalah akses input dari keyboard. Pada saat salah satu kunci (key) ditekan maka CPU akan menangguhkan program yang sedang dieksekusi dan mengalikannya untuk mengeksekusi rutin BIOS yang membaca karakter dari port input keyboard dan menyimpannya dalam buffer memori. CPU dapat melanjutkan mengeksekusi intruksi yang tertunda setelah proses interrupt selesai.
Dalam pemrograman ada saatnya progremer harus menghentikan interrupt perangkat keras secara termporer. Misalnya pada saat melakukan operasi yang sensitif pada registe segmen dan stck. Untuk mematikn sementara interrupt perngkat keras, diguunakan intruksi CLI ( clear interrupt flag). Setelah normal kembali, untuk mengaktifkannya, digunakan intruksi STI ( set interrupt flag ).

B. Interrupt Perangkat Lunak
Interrupt perangkat lunak adalah proses pemanggilan salah satu rutin layanan interrup BIOS atau DOS. Interrupt jenis ini sebenarnya interrupt tiruan, bukan interrupt sesungguhnya. Istilah interrupt masih digunakan karena proses yang terjadi mirip dengan interrupt pada perangkat keras. Interrupt perangkat lunak menyediakan menyediaan akses untuk menangani proses I/O secara rinci. Intruksi interrupt ditandai dengan intruksi INT ( kependekan dari interrupt ). Intruksi INT meminta layanan dari sistem operasi, biasanya untuk I/O. Layanan ini adalah program kecil yang berlokasi di dalam BIOS dan bagian resident DOS.
Intriksi INT
Intriksi INT berfungsi untuk memanggil subrutin yang yang terdapat pada sistem operasi. Identifikasi jenis interrupt ditentukan oleh angka yang nilainya dalam range 00h-FFh. Untuk melengkapi intruksi INT, sebelumnya register AH harus diisi terlebih dahulu dengan nomor fungsi yang mengidentifikasikan subrutin yang diinginkan. Sintak intruksi INT adalah :
INT nomor
Intriksi INT digunakan untuk tampilan konsol baik input maupun output, manipulasi file dan video dan berbagai layanan lain yang disediakan oleh BIOS dan DOS.

INTERRUPT VECTOR TABLE ( IVT )
Dalam proses interrupt, CUP mengakses interrupt vector table, yaitu alamat memori yang besarnya 1 KB. Tabel IVT adalah kumpulan pointer yang lebarnya 32 bit yang menunjukkan kesubrutin yang terdapat pada sisstem operasi. Gambar dibawah ini mengilustrasikan langkah-langkah yang diambil oleh CPU pada saat intruksi INT ditemukan dalam program :
  • Nomor yang interrupt pada intruksi INT digunakan oleh CPU untuk mengakses data pada interrupt vector table. Dalam contoh, INT 10h. Intruksi ini berfungsi untuk meminta layanan video.
  • Langkah berikutnya, CPU akan mengambil alamat yang terdapat pada IVT, yaitu (F000:F065).
  • Alamat ini digunakan untuk mengakses subrutin DOS yang menangani interrupt pada alamat F000:F065, CPU akan mengeksekusi fungsi yang terdapat pada alamat tersebut sampai ditemukan alamat intruksi IRET.
Sti
Cld
Push es
Push ds
IRET
  • Pada saat ditemukan intruksi IRET maka CPU akan mngeksekusi kembali intruksi pada program pemanggil.
Interrupt prangkat lunak memanggil rutin layanan interrupt dalam BIOS atau DOS. Beberapa interrupt yang serring digunakan :
1. INT 10h : layanan video; rutin layanan video yang mengatur posisi kursor, geser layar, dan menampilkan grafik video.

2. INT 16h : layanan keyboard; rutin yang membaca keyboard dan mengecek statusnya.
3. INT 17h : layanan printer ; rutin untuk instalasi, pint dan mengembalikan status printer.
4. INT 1Ah : rutin yang mendapat nmor jam pada saat mesin dinyalakan, atau menset pencacah dengan nilai baru.
5. INT 1Ch : intrrup waktu bagi pengguna; ruti kosong tang dieksekusi 18.2 kali per detik.
6. INT 21h : layanan DOS ; rutin layanan DOS untuk masukan/ keluaran, penanganan file, manajemen memori dan dikenal sebagai fungsi call DOS.
2.3 FUNGSI CALL DOS
INT 21h disebut juga fungsi call DOS. Terdapat 87 fungsi berbeda yang didukung oleh interrupt ini,didentifikasikan oleh nomor fungsi yang ditempatkan dalam register AH. Berikut ini daftar fungsi 00h sampai 0Ch :


1. 01H : INPUT KONSOL DENGAN ECHO
Fungsi 1 DOS menunggu karakter yang akan ditampilkan yang diinputkan dari konsol dan menyimpannya dalam register AL. (karakter yang sedang berada dalam buffer secara otomatis akan disimpan kedalam AL).
CTRL-BREAK aktif. Dalam contoh berikut sebuah karakter akan diinput dan ditempatkan dalam variable bernama char :
Mov ah, 1
Int 21h
Mov char, al

2. 02H : OUTPUT KARAKTER

Fungsi 2 DOS mengirim karakter ke konsol. CTRL-BREAK aktif. Karakter yang akan ditampilkan disimpan dalam register DL, seperti contoh berikut :
Mov ah, 2
Mov DL, ‘*’
Int 21h
AL diubah oleh DOS selama pemanggilan int 21h. agar nilainya bias digunakan kembali maka terlebih dahulu harus disimpan dalam stack sebelum pemaggilan int 21h. pada saat selesai pemanggilan int 21h nilai AL dpat iambil kembali.

1. 05H : OUTPUT PRINTER
Untuk mecetak karakter, tempatkan karakter dalam DL dan panggil fungsi 5. DOS menunggu sampai printer siap untuk menerima karakter. Output akan keluar keprinter 1(nama perangkat LPT 1). Contoh berikut mencetak karakter dolar ($).
Mov ah, 5
Mov DL,’$’
INT 21h
Mov dl, 0Dh
INT 21h
2. 06H : INPUT OUTPUT KONSOL LANGSUNG
Fungsi 6 DOS melakukan proses baca atau tulis pada konsol. CTRL-BREAK tidak aktif dan tidak ada filter terhadap karakter. Untuk meminta konsol inpt (tanpa menunggu), register DL harus ber nilai 0FFh. Karakter disimpan dalam register AL. contoh berikut untuk input/output :
Input karakter
Moov ah, 6
Mov dl, 0FFh
Int 21h
Output karakter
Mov ah, 6
Mov dl, ‘&’
Int 21h
Menghapus buffer keyboard. Program aplikasi biasanya dibutuhkan untuk menghapus buffer keyboard. Berikut ini contoh prosedur yang menggabungkan INT 21h dengan intruksi Loop untuk menghapus buffer :
Hapus_keyboard proc
Mov cx, 15
L1 :
Mov ah,6
Mov dl,0FFh
Int 21
Loop L1
Ret
Hapus_keyboard endp

3. 07H : INPUT KONSOL LANGSUNG
Fungsi 7 menunggu karakter yang tidak terfilter dari konsol. Karakter tidak ditampilkan di konsol dan CTRL-BREAK aktif. Fungsi input ini cocok untuk karakter khusus seperti karakter fungsi dan panah kursor.
Contoh program:
Mov ah, 7
Int 21h
Mov char,al
4. 08H : INPUT KONSOL TANPA ECHO
Fungsi 8 menunggu karakter yang tidak difilter dari konsol tanpa menampilkannya, sementara CTRL-BREAK aktif. Karakter disimpan dalam register AL. fungsi input ini cocok untuk larakter khusus.
Contoh :
Mov ah, 8
Int 21h
Mov char, al

5. 09H : OUTPUT STRING
Fungsi 9 menampilkan string karakter pada konsol. Alamat offset string harus ada dalam DX, dan string harus diakhiri oleh karakter dolar ($).
Contoh :
Mov ah, 9
Mov dx, offset string
Int 21h
String db ‘hallo kota bandung.’,Odh, Oah,’$’

6. 0AH : BUFFER INPUT KONSOL
Fungsi 0Ah membaca string karakter sampai 255 karakter dari konsol dan menyimpannya dalam buffer. Enter digunakan untuk mengakhiri input. CTRL-BREAK aktif dan seluruh karakter ditampilkan pada konsol.
Sebelum fungsi dipanggil, DX harus diisi dengan offset area parameter keyboard. Format area sebagai berikut :
Dalam byte offset 0 ditempatkan jumlah maksimum karakter yang bias diinput. Jika jumlahnya 5, misalnya, dos akan mengizinkan 4 karakter tambah enter yang diinput. Sesudah interrupt dipanggil, dos menempatkan jumlah karakter yang benar-benar pada byte offset 1. Karakter tersebut sisimpan mulai offset 2. Contoh :

Mov ah, 0Ah
Mov dx, offset max_kunci
Int 21h
Max_kuncidb 32
Chars_input db ?
Buffer db 32 dup(0)
Misalnya, kita meninputkan 21 karakter dari konsol :
Nama saya Demian Saba
Maka isi buffer akan sebagai berikut :

1. 0B H : MENGAMBIL STATUS INPUT KONSOL
Fungsi 0Bh adalah menerima buffer keyboard DOS untuk melihat karakter dalam buffer. Jika ada karakter, DOS mengembalikan nilai 0FFh dalam register AL. jika tidak, DOS mengembalikan 00 dalam register Al, sementara CTRL-BREAK aktif. Contoh :
Mov ah, 0Bh
Int 21
2. 0CH : MEMBERSIHKAN BUFFER INPUT, MENEMUKAN FUNGSI INPUT
Fungsi 0Ch membersihkan buffer keyboard dan memanggil fungsi input konsol. Funsi yang dipanggil (1,6,7,dan 8) diidentifikasikan oleh nilai dalam AL. karakter input akan dikembalikan dalam AL.contoh :
Mov ah, 0Ch
Mov al, 1
Int21h
Mov chr, al
Input keyboard level BIOS (INT 16H)
Cara langsung untuk mengambil input keyboard adalah dengan mengunakan int 16h layanan keyboard dalam system BIOS. Berikut ini daftar layanan INT 16h :