Gambar 45. Program Mencetak 3 Digit
1. Tujuan [kembali]
a.) Memahami penggunaan EMU 8086
b.) Mengetahui program mencetak 3 digit angka ke layar
2. Alat dan Bahan [kembali]
EMU 8086
Untuk membantu dalam memahami atau penyesuaikan alur
kerja program yang diinginkan maka dapat dilakukan dengan bantuan emulator
emu86. Pada emulator ini ada menu emulate untuk 16 menjalankan program dengan
dua pilihan yaitu single step untuk eksekusi per baris instruksi atau Run untuk
eksekusi keseluruhan instruksi sampai akhir program.
- Dalam “emu8086” terdapat beberapa menu, antara lain:
- Emulate
: untuk menjalankan emulator kode program yang kita buat
- Compile
: untuk membuat (compile) “binary executable file” atau ekstensi “.com” atau
“.exe” dari kode program.
- Run
: menjalankan aplikasi dari emulator yang dihasilkan (execute).
- Single Step : Menjalankan aplikasi dengan cara tracing (diproses perbaris kode program).
3. Dasar Teori [kembali]
A. Representasi Bilangan dalam Register
Mikroprosesor Intel menggunakan register sebagai penyimpanan data sementara dalam operasi aritmatika dan logika. Untuk mencetak angka 3 digit, angka tersebut perlu dipecah menjadi ratusan, puluhan, dan satuan, dan masing-masing digit dikonversi menjadi karakter ASCII sebelum ditampilkan.
B. Konversi
Bilangan ke Format ASCII
Untuk menampilkan bilangan sebagai karakter, nilai numerik harus dikonversi menjadi karakter ASCII. Angka 0 dalam ASCII memiliki nilai 30H, sehingga setiap digit numerik ditambahkan dengan 30H untuk mengubahnya menjadi karakter ASCII yang dapat ditampilkan.
C. Penggunaan
Instruksi Aritmatika
Instruksi seperti DIV digunakan untuk membagi angka menjadi digit-digit yang lebih kecil (misalnya, ratusan, puluhan, dan satuan). Mikroprosesor Intel menggunakan register AX untuk menyimpan nilai yang akan dibagi dan AL untuk hasil pembagian digit.
D. Instruksi
Interrupt DOS (INT 21H)
Interrupt INT 21H adalah layanan yang disediakan oleh DOS untuk berbagai fungsi, termasuk menampilkan karakter di layar. Untuk menampilkan karakter, biasanya digunakan fungsi AH = 02H di mana karakter yang akan ditampilkan harus ditempatkan di register DL.
E. Pemecahan
Bilangan Menjadi Digit-Digitnya
Misalnya, untuk mencetak angka 123,
diperlukan beberapa langkah:
· Pembagian
pertama: Angka dibagi 100 untuk mendapatkan digit ratusan.
· Pembagian
kedua: Sisanya dibagi 10 untuk mendapatkan digit puluhan.
· Sisa pembagian kedua: Menjadi digit satuan.
F. Penggunaan
Register dalam Pembagian
Register AX, DX, dan AL digunakan untuk menyimpan angka, hasil pembagian, dan sisa. AX sering digunakan sebagai akumulator utama, sementara DX dapat digunakan untuk menyimpan sisa saat melakukan pembagian.
4. Percobaan [kembali]
Register AX, DX, dan AL digunakan untuk
menyimpan angka, hasil pembagian, dan sisa. AX sering digunakan sebagai
akumulator utama, sementara DX dapat digunakan untuk menyimpan sisa saat
melakukan pembagian.
Program :
1. MULAI:
Label untuk menandai awal program.
2. MOV AX, 469
Memasukkan angka 469 ke dalam register AX. Angka ini akan dipecah menjadi digit-digitnya.
3. XOR CX, CX
Mengosongkan register CX (set CX ke 0). CX digunakan untuk menghitung berapa banyak digit yang ada.
4. ULANG1:
Label untuk memulai loop pertama.
5. MOV BH, 10
Memasukkan nilai 10 ke register BH. Ini digunakan sebagai pembagi untuk memisahkan digit.
6. DIV BH
Membagi AX dengan BH (10). Hasil pembagian disimpan di AL, dan sisa pembagian (digit paling kanan) disimpan di AH.
7. PUSH AX
Menyimpan nilai AX (hasil pembagian) ke dalam stack. Stack digunakan untuk menyimpan digit sementara sebelum dicetak.
8. INC CX
Menambahkan 1 ke CX. Ini menghitung jumlah digit yang telah diproses.
9. XOR AH, AH
Mengosongkan register AH (set AH ke 0). Ini dilakukan untuk memastikan register AH siap untuk pembagian berikutnya.
10. CMP AL, 00
Membandingkan nilai AL dengan 0. Jika AL adalah 0, berarti tidak ada digit tersisa untuk diproses.
11. JNE ULANG1
Jika AL tidak sama dengan 0, lompat kembali ke ULANG1 untuk mengulang pembagian dengan digit berikutnya.
12. ULANG2:
Label untuk memulai loop kedua yang mencetak digit.
13. POP DX
Mengambil nilai dari stack ke DX. Ini adalah digit paling kanan yang sudah diproses sebelumnya.
14. MOV DL, DH
Memindahkan sisa pembagian (digit) dari DH ke DL agar dapat dicetak.
15. ADD DL, 30H
Menambahkan 30H ke DL untuk mengonversi digit numerik menjadi karakter ASCII. Digit 0 (0x00) menjadi ‘0’ (0x30), 1 menjadi ‘1’ (0x31), dan seterusnya.
16. MOV AH, 02
Mengatur fungsi INT 21H untuk mencetak karakter dari register DL.
17. INT 21H
Menampilkan karakter dalam DL pada layar.
18. LOOP ULANG2
Mengulangi pencetakan sampai semua digit yang tersimpan di stack telah ditampilkan. Mengurangi CX setiap kali instruksi dijalankan hingga CX mencapai 0.
19. MOV AH, 4CH
Mengatur fungsi INT 21H untuk keluar dari program.
20. INT 21H
Mengakhiri program dan kembali ke DOS.
Output :
5. Video [kembali]
6. Link Download [kembali]
Tidak ada komentar:
Posting Komentar