Program Int 21h Service 01h
Untuk memahami bagaimana cara kerja program assembly sederhana dalam membaca input dari keyboard, serta menampilkan hasil berdasarkan kondisi yang diberikan.
1. PC/Laptop: Digunakan untuk menjalankan program.2. Assembler Software (Disini menggunakan emu8086): Untuk menulis dan mengompilasi kode assembly.
Interrupt 21h dan Service Number 01h: Interrupt 21h adalah salah satu interrupt yang paling umum digunakan dalam pemrograman Assembly di lingkungan DOS. Interrupt ini menyediakan berbagai layanan (services) yang dapat digunakan untuk berbagai operasi, seperti mengakses file, membaca input dari keyboard, mencetak ke layar, dan lain-lain. Setiap layanan diidentifikasi dengan nomor layanan (service number) yang dimasukkan ke dalam register AH sebelum memanggil interrupt 21h.
Service number 01h digunakan untuk membaca satu karakter dari keyboard dengan echo otomatis ke layar. Ketika service ini dipanggil, karakter yang ditekan oleh pengguna akan ditampilkan di layar, dan karakter tersebut akan disimpan dalam register AL.
Detail Operasi:
- AH=01H:
- Mengatur service number 01h yang akan membaca satu karakter dari keyboard dan secara otomatis mencetak karakter tersebut ke layar.
- AL=Hasil Penekanan Input dari Keyboard:
- Setelah interrupt 21h dengan service 01h dipanggil, register AL akan berisi karakter ASCII yang dihasilkan dari penekanan tombol pada keyboard. Karakter ini adalah hasil input dari pengguna.
Penghentian Proses:
Proses ini dapat dihentikan oleh pengguna dengan menekan kombinasi tombol Ctrl + Break
atau Ctrl + C
.
Contoh program menggunakan Int 21 hexa service 01 hexa ditunjukkan pada Gambar 3.1.
Mengatur program agar dimulai dari alamat memoriorg 100h ; Mengatur awal alamat memori menjadi 100h
100h
. Ini adalah praktik standar untuk program yang berjalan di mode real DOS.START: JMP MULAI ; Melompat ke label MULAI untuk memulai program
JMP MULAI
: Memerintahkan program untuk langsung melompat ke bagian yang diberi label MULAI
, melewati bagian deklarasi data di bawahnya. Ini adalah titik awal eksekusi program.Tanya db 'Jawablah Pertanyaan Di Bawah Ini!',13,10 db 'Apakah Anda seorang mahasiswa? (Y/T)',13,10,'$'
Tanya
: Mendeklarasikan string yang akan ditampilkan di layar. String ini berisi pertanyaan untuk pengguna dan diakhiri dengan $
yang digunakan oleh DOS untuk menandai akhir dari string.13,10
: Karakter Carriage Return
dan Line Feed
, digunakan untuk memindahkan kursor ke baris berikutnya setelah mencetak string.Jawab1 db 13,10,'Anda Adalah Seorang Mahasiswa',13,10,'$'
Jawab1
: Mendefinisikan string yang akan dicetak jika pengguna menjawab bahwa mereka adalah mahasiswa (Y
atau y
).Jawab2 db 13,10,'Anda Adalah Seorang Mahasiswi',13,10,'$'
Jawab2
: Mendefinisikan string yang akan dicetak jika pengguna menjawab bahwa mereka adalah mahasiswi (T
atau t
).MULAI: MOV AH,09H ; Mengatur service untuk mencetak string LEA DX,Tanya ; Memuat alamat dari string Tanya ke register DX INT 21H ; Memanggil interrupt 21H untuk mencetak string yang ada di DX
MULAI
: Label ini menandai awal bagian eksekusi utama dari program.
MOV AH,09H
: Mengatur register AH
untuk menggunakan fungsi 09H dari interrupt 21H, yang digunakan untuk mencetak string ke layar.LEA DX,Tanya
: Mengisi register DX
dengan alamat dari string Tanya
.INT 21H
: Memanggil interrupt 21H dengan fungsi 09H, yang mencetak string di layar hingga menemukan karakter $
.ULANG: MOV AH,01H ; Mengatur service untuk membaca karakter input dari keyboard INT 21H ; Memanggil interrupt 21H untuk membaca satu karakter dari input pengguna
ULANG
: Label yang digunakan untuk menandai bagian kode yang mengulang pertanyaan jika input tidak valid.MOV AH,01H
: Mengatur register AH
untuk menggunakan fungsi 01H dari interrupt 21H, yang digunakan untuk membaca satu karakter dari keyboard.INT 21H
: Memanggil interrupt 21H dengan fungsi 01H untuk membaca input dari pengguna.CMP AL,'y' ; Membandingkan input dengan 'y' JZ Mahasiswa ; Jika input adalah 'y', lompat ke label Mahasiswa
CMP AL,'y'
: Membandingkan nilai input yang tersimpan di register AL
dengan karakter 'y'.JZ Mahasiswa
: Jika perbandingan menghasilkan 0 (berarti input sama dengan 'y'), maka program akan melompat ke label Mahasiswa
.CMP AL,'Y' ; Membandingkan input dengan 'Y' JZ Mahasiswa ; Jika input adalah 'Y', lompat ke label Mahasiswa
CMP AL,'Y'
: Membandingkan nilai input yang tersimpan di register AL
dengan karakter 'Y'.JZ Mahasiswa
: Jika perbandingan menghasilkan 0, maka program akan melompat ke label Mahasiswa
.CMP AL,'T' ; Membandingkan input dengan 'T' JZ Mahasiswi ; Jika input adalah 'T', lompat ke label Mahasiswi
CMP AL,'T'
: Membandingkan nilai input yang tersimpan di register AL
dengan karakter 'T'.JZ Mahasiswi
: Jika perbandingan menghasilkan 0, maka program akan melompat ke label Mahasiswi
.CMP AL,'t' ; Membandingkan input dengan 't' JZ Mahasiswi ; Jika input adalah 't', lompat ke label Mahasiswi
CMP AL,'t'
: Membandingkan nilai input yang tersimpan di register AL
dengan karakter 't'.JZ Mahasiswi
: Jika perbandingan menghasilkan 0, maka program akan melompat ke label Mahasiswi
.JMP ULANG ; Jika tidak ada yang cocok, lompat kembali ke ULANG
JMP ULANG
: Jika tidak ada kondisi yang terpenuhi (input tidak valid), program akan kembali ke label ULANG
untuk meminta input ulang dari pengguna.Mahasiswi: MOV AH,09H ; Mengatur service untuk mencetak string LEA DX,Jawab2 ; Memuat alamat dari string Jawab2 ke register DX INT 21H ; Memanggil interrupt 21H untuk mencetak string JMP SELESAI ; Melompat ke label SELESAI
Mahasiswi
: Label ini digunakan jika pengguna memilih 'T' atau 't'.MOV AH,09H
: Mengatur register AH
untuk mencetak string ke layar.LEA DX,Jawab2
: Memuat alamat string Jawab2
ke register DX
.INT 21H
: Mencetak string Jawab2
ke layar.JMP SELESAI
: Setelah mencetak pesan, program melompat ke label SELESAI
untuk mengakhiri program.Mahasiswa: MOV AH,09H ; Mengatur service untuk mencetak string LEA DX,Jawab1 ; Memuat alamat dari string Jawab1 ke register DX INT 21H ; Memanggil interrupt 21H untuk mencetak string
Mahasiswa
: Label ini digunakan jika pengguna memilih 'Y' atau 'y'.MOV AH,09H
: Mengatur register AH
untuk mencetak string ke layar.LEA DX,Jawab1
: Memuat alamat string Jawab1
ke register DX
.INT 21H
: Mencetak string Jawab1
ke layar.SELESAI: MOV AH,4CH ; Mengatur service untuk keluar dari program INT 21H ; Memanggil interrupt 21H untuk keluar dari program
SELESAI
: Label ini digunakan untuk mengakhiri program.MOV AH,4CH
: Mengatur register AH
untuk menggunakan fungsi 4CH dari interrupt 21H, yang digunakan untuk keluar dari program.INT 21H
: Memanggil interrupt 21H dengan fungsi 4CH untuk mengakhiri program.ret ; Mengakhiri program
ret
: Mengakhiri eksekusi program dan mengembalikan kontrol ke sistem operasi.
1.Tulis kode seperti pada Gambar atau bisa download file nya lewat link di bawah
4. Jika mengisi T, maka akan mendapatkan hasil seperti ini
Komentar
Posting Komentar