Sebelumnya kita sudah mengenal apa itu instruksi Interupsi pada halaman:
Kali ini kita akan membahas sesi TUGAS, akan tetapi silahkan Anda mencoba dulu mengetikkan soal dibawah ini:
- Ketiklah tulisan berikut pada notepad, dan simpan dengan nama bukanfilee.txt!
ini adalah kalimat yang diambil dari bukanfilee.txt
simpan pada direktori c:\emu8086\myBuild
Ketiklah listing dibawah ini:
MOV AL,2 LEA DX,bukanfile MOV AH,3Dh INT 21H MOV handle,AX MOV BX,handle MOV CX,30 LEA DX,data MOV AH,3FH INT 21H MOV AH,9 INT 21H RET bukanfile db "bukanfilee.txt", 0 handle dw ? data db "coba baca karakter dari file! $"
- Emulate program
- Amati perubahan isi memori sebelum intruksi dieksekusi
(Keadaan memori segmen kode)
- Amati perubahan register pada saat program dieksekusi (setiap single step instruksi)
(Keadaan register setelah dan sebelum INT 21h pada program dieksekusi)
- Amati perubahan yang terjadi pada jendela “Emulator Screen” pada saat program dieksekusi?
(Catat tampilan “Emulator Screen” saat program selesai di RUN)
- Jelaskan tentang apa program di atas o Apa fungsi dari program diatas? o Berapa banyak instruksi yang digunakan pada program di atas?
- Pada saat intruksi bari ke 6 dieksekusi, terjadi perubahan nilai register AX, apa penyebabnya?
- Sub function berapa yang digunakan untuk membaca data dari file?
Pada alamat berapa data tersebut disimpan? o Apa fungsi variable handle pada program diatas?
TUGAS
Modifikasi program pada kegiatan 3 agar dapat mengganti nama file “bukanfilee.txt” menjadi “filebaruuuu.txt”
(CLUE: Gunakan interupsi 21h sub fuction 56h untuk mengganti nama file dan sub function 3Eh untuk menutup file)
PENYELESAIAN:
Lihat dulu di Emu8086 Anda, cek pada bagian HELP > Documentation and tutorials > Interupsi.
disanaa akan ada banyak sekali instruksi instruksi yang tersedia dari Interupsi.
LEA berfungsi untuk mendapatkan alamat OFFSET dari register yang kita tunjuk
dan penjelasan Interupsi untuk 21/56h bisa kita lihat demikian:
DS:DX menunjuk pada nama file sebelum di rename
Sedangkan ES:DI menunjuk pada nama file yang ingin kita rubah.
Sehingga jika kita ingin merubah nama file bukanfile.txt menggunakan interupsi 21H/56H, kita harus menempatkan DI merujuk pada data baru yang kita inginkan yaitu filebaruuuu.txt yang dideklarasi dalam dobleword (db) pada data
Sehingga bisa kita dapatkan bahwa:
DI >> data
data db “filebaruuu.txt”,0 (string)
Jadi untuk merubah nama file bukanfile.txt menggunakan interupsi 21h/56h menjadi filebaruuuu.txt kodenya sebagai berikut:
(Deklarasikan dalam COM)
org 100h LEA DX,data ;MENGAMBIL alamat offset dari /data/ MOV DI,DX ;memindahkan isi DX ke DI ;DI disini adalah sebagai yang nantinya ;menjadi inputan untuk mengganti nama file ;menjadi nama file yang baru LEA DX,bukanfile ;mengambil alamat offset dari bukanfile MOV AH,56H ;ubah nama file! INT 21H ;ambil register DI, dan ;terapkan (pengerjaan dari ah,56h) MOV AH,3EH ;memberhentikan pengerjaan/close file INT 21H ;terapkan! program berakhir RET bukanfile db "bukanfilee.txt", 0 data db "filebaruuu.txt",0
Ketika program tersebut di compile maka step by step yang terjadi adalah:
Disini coba fokuskan perhatian pada 2 gambar dibawah ini:
Dimana kedua file dirubah bukanfile.txt menjadi filebaruuuu.txt
Gimana, sudah cukup jelas, kan?
thanks for sharing this aricle..