- Memahami penggunaan EMU 8086
- Mengetahui program perkalian dengan MUL
- 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).
Instruksi MUL
adalah instruksi yang digunakan untuk melakukan operasi perkalian tanpa tanda (unsigned multiplication) pada mikroprosesor Intel. MUL
bekerja dengan mengalikan nilai operand dengan isi register akumulator (AX, EAX, atau RAX tergantung arsitektur dan operand yang digunakan) dan menempatkan hasilnya pada register tertentu.
2. Jenis Operand pada Instruksi MUL
Instruksi MUL
dapat menerima operand 8-bit, 16-bit, 32-bit, atau 64-bit, tergantung pada arsitektur mikroprosesor yang digunakan (8086 hingga keluarga x86 dan x64 modern):
- 8-bit Operand: Mengalikan isi register AL (Accumulator Low) dengan operand 8-bit, dan hasil 16-bit ditempatkan di register AX.
- 16-bit Operand: Mengalikan isi register AX dengan operand 16-bit, dan hasil 32-bit ditempatkan di register DX(DX berisi upper word dan AX berisi lower word).
- 32-bit Operand: Mengalikan isi register EAX dengan operand 32-bit, dan hasil 64-bit ditempatkan di register EDX.
- 64-bit Operand: Mengalikan isi register RAX dengan operand 64-bit, dan hasil 128-bit ditempatkan di register RDX.
3. Pemahaman Register yang Terlibat
- Register Akumulator (AX, EAX, RAX): Register ini digunakan sebagai akumulator utama dalam operasi perkalian.
- Register Hasil (DX, EDX, RDX): Digunakan untuk menyimpan bagian atas dari hasil perkalian, terutama jika hasilnya lebih besar daripada ukuran operand asal.
4. Instruksi dan Flag yang Terpengaruh
MUL
tidak mengubah flag, kecuali overflow (OF
) dan carry (CF
) yang akan di-set jika hasilnya lebih besar dari kapasitas register tujuan.MUL
mengasumsikan operand sebagai unsigned integer, sehingga hasilnya harus dianalisis dengan mempertimbangkan ukuran register.
1. MOV CX,
4H
Menginisialisasi register CX dengan nilai 4. Ini berfungsi
sebagai counter untuk loop yang akan berjalan sebanyak 4 kali.
2. MOV
BH, 1H
Menginisialisasi register BH dengan nilai 1. BH digunakan
sebagai multiplier dalam instruksi MUL.
3. ulangi:
Label untuk menandai awal dari loop program.
4. MOV AH,
02H
Mengatur fungsi INT 21H untuk menampilkan karakter pada layar.
5. MOV DL,
0DH
Memasukkan 0DH (carriage return) ke register DL. Ini digunakan
untuk memindahkan kursor ke awal baris berikutnya saat output.
6. INT 21H
Memanggil interrupt DOS untuk menampilkan karakter dalam DL (carriage
return).
7. MOV DL,
0AH
Memasukkan 0AH (line feed) ke register DL. Ini membuat kursor
berpindah ke baris baru.
8. INT 21H
Memanggil interrupt DOS untuk menampilkan line feed.
9. MOV DL,
BH
Memindahkan nilai dari BH ke DL untuk ditampilkan sebagai
karakter ASCII.
10. ADD
DL, 30H
Menambahkan 30H ke nilai DL untuk mengonversi angka menjadi
karakter ASCII numerik (0-9).
11. INT
21H
Menampilkan karakter numerik dari register DL.
12. MOV
AH, 02H
Mengatur fungsi INT 21H lagi untuk menampilkan karakter.
13. MOV
DL, 2AH
Menampilkan simbol * sebagai penanda operasi perkalian.
14. INT
21H
Memanggil interrupt untuk menampilkan simbol *.
15. MOV
DL, 32H
Memasukkan nilai 32H ke DL, yang berarti karakter ‘2’ dalam
ASCII.
16. INT
21H
Menampilkan karakter ‘2’.
17. MOV
DL, 3DH
Memasukkan 3DH (karakter =) ke register DL.
18. INT
21H
Menampilkan karakter =.
19. MOV
AL, 02H
Memasukkan nilai 2 ke AL sebagai bilangan yang akan
dikalikan dengan BH.
20. MUL BH
Mengalikan AL dengan BH. Hasilnya disimpan dalam AX.
21. MOV
DL, AL
Memindahkan hasil perkalian dari AL ke DL untuk
ditampilkan.
22. ADD
DL, 30H
Mengonversi hasil numerik ke bentuk ASCII.
23. INT
21H
Menampilkan hasil perkalian sebagai karakter numerik.
24. MOV
AH, 02H
Mengatur ulang fungsi untuk menampilkan karakter baru.
25. MOV
DL, 0DH
Memasukkan carriage return lagi.
26. INT
21H
Menampilkan carriage return.
27. MOV
DL, 0AH
Memasukkan line feed lagi.
28. INT
21H
Menampilkan line feed.
29. INC BH
Meningkatkan nilai BH sebesar 1 untuk loop berikutnya.
30. LOOP
ulangi
Mengulangi program selama CX belum mencapai nilai 0, mengurangi CX setiap
iterasi.
31. MOV
AH, 4CH
Mengatur interrupt untuk mengakhiri program.
32. INT
21H
Mengakhiri program dan kembali ke DOS.
Tidak ada komentar:
Posting Komentar