Program Int 21h Service 01h



1. Tujuan[Kembali]

Untuk memahami bagaimana cara kerja program assembly sederhana dalam membaca input dari keyboard, serta menampilkan hasil berdasarkan kondisi yang diberikan. 

2. Alat dan Bahan[Kembali]

1. PC/Laptop: Digunakan untuk menjalankan program.




2. Assembler Software (Disini menggunakan emu8086): Untuk menulis dan mengompilasi kode assembly.

3. Dasar Teori[Kembali]

INPUT DARI KEYBOARD

Input Per Huruf dengan Echo (tercetak ke layar) 

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.

Gambar 3.1 Program Aplikasi Int 21 hexa Service 01 hexa

Prinsip Kerja

org 100h ; Mengatur awal alamat memori menjadi 100h
Mengatur program agar dimulai dari alamat memori 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 DXMULAI: 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.

4. Percobaan[Kembali]

1.Tulis kode seperti pada Gambar atau bisa download file nya lewat link di bawah

Gambar 4.1. Code

2.Setelah di running, emulator akan muncul 

Gambar 4.2. Emulator dan Original Source Code pada EMU8086


3.Setelah di run, tampilannya akan seperti ini

Gambar 4.3. Hasil run dari Code

4. Jika mengisi Y, maka akan mendapatkan hasil seperti ini

Gambar 4.4.  Hasil dari input Y dari keyboard


4. Jika mengisi T, maka akan mendapatkan hasil seperti ini

Gambar 4.5.  Hasil dari input T dari keyboard



5. Video Penjelasan[Kembali]







6. Download File[Kembali]

  • Download Code Assembly Klik Disini
  • Download EMU8086 Klik Disini
  • Komentar

    Postingan populer dari blog ini

    Op Amp Ramp Generator

    Home

    Modul 1 Sistem Digital