Gambar 28. Program dengan MUL

[menuju akhir]

Gambar 28. Program dengan MUL



1. Tujuan [kembali]

    a.) Memahami penggunaan EMU 8086

    b.) Mengetahui program perkalian dengan MUL


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]

    1.     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.


4. Percobaan [kembali]

Program :

Penjelasan dari Program tersebut dapat kita uraikan sebagai berikut ini:

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.


Output :


5. Video [kembali]


6. Link Download [kembali]





Tidak ada komentar:

Posting Komentar