Menggunakan DEBUG
Debug adalah suatu program kecil yang telah ada sejak MS-DOS versi 3.0 dikeluarkan. Sampai sekarangpun program Debug tetap disertakan pada saat anda menginstall MS Windows. Program ini digunakan untuk melihat isi suatu blok memori (view), mengubahnya (edit), dan menjalankan (run) instruksi-instruksi yang ada di blok tersebut.
Cara menjalankan Debug :
1. Klik ‘Start’
dan kemudian pilih ‘Run’. Dari window ‘Run’ ketikkan ‘Debug’ dan klik tombol ‘OK’.
Cara tersebut akan memanggil program Debug dengan menampilkan cursor berbentuk strip (-), ketik tanda Tanya (?) untuk memunculkan command-command debug.
C:\>Debug
-?
Penjelasan perintah-perintah/commands pada DEBUG
Disini Debug menanti perintah (command) dari kita
Command
|
Arti
|
Keterangan
|
a
|
assemble
|
menulis instruksi-instruksi yang akan dijalankan ke memori
|
c
|
compare
|
membandingkan isi sebuah blok memori dengan isi blok memori lainnya.
|
d
|
dump
|
melihat isi dari memori (128 bytes ditampilkan)
|
e
|
enter
|
berfungsi untuk mengisi atau mengubah data dalam memori.
|
f
|
fill
|
mengisi secara langsung suatu blok memori
|
g
|
go
|
menjalankan semua instruksi yg ada di memori
|
h
|
hexarithmetic
|
Perintah H melakukan penambahan dan pengurangan pada dua angka heksadesimal
|
i
|
input
|
Masukan perintah dalam byte dari suatu input yang ditetapkan output port dan menampilkan nilainya
|
l
|
load
|
Load suatu file ke memori (nama file telah didefinisikan terlebih dahulu dengan command ‘n’)
|
m
|
move
|
Berfungsi untuk memindahkan atau menyalin data yang ada di suatu lokasi memori ke alamat memori lainnya.
|
n
|
name
|
memberikan nama file yg akan di-edit atau di-save |
o
|
output
|
|
p
|
proceed
|
Perintah P menjalankan satu atau lebih instruksi atau subrutin
|
q |
quit
|
Untuk keluar dari mode Debug dan kembali ke DOS
|
r
|
register
|
menampilkan isi semua register
|
s
|
search
|
Berfungsi untuk mencari data baik yang berupa karakter maupun untaian karakter (string) di dalam suatu blok memori tertentu.
|
t
|
trace
|
menjalankan instruksi-instruksi yang ada di memori instruction-by-instruction (1 ‘t’ menjalankan 1 instruksi)
|
u
|
unassemble
|
melihat instruksi-instruksi yg ada di memori
|
w
|
write
|
menulis isi memori ke file
|
rxx
|
register
xx
|
mengubah isi suatu register xx (contoh
: rax, rip, rss)
|
Fungsi perintah-perintah pada Debug:- Assemble
Merakit sebuah program ke dalam bahasa mesin. Perintah format:
A
A address
Jika hanya bagian offset alamat diberikan, diasumsikan untuk menjadi offset dari CS.
Berikut
adalah contoh:
Example Description
A 100 Assemble at CS:100h.
A Assemble from the current location.
A DS:2000 Assemble at DS:2000h.
Bila Anda menekan Enter pada akhir setiap baris, debug meminta Anda untuk menginput baris berikutnya. Setiap baris input dimulai dengan offset alamat segmen. Masukkan kunci pada sebuah baris kosong. Sebagai contoh:
–a 100
5514:0100 mov ah,2
5514:0102 mov dl,41
5514:0104 int 21
5514:0106
- compare
compare pada debug berfungsi untuk membandingkan isi sebuah blok memori dengan isi blok memori lainnya.
syntax perintah : C alamat1 panjang alamat2
Contoh :
A:\>Debug (enter)
-C 0100 L 10 0200 (enter)
Berarti mulai offset 0100 sebanyak 16 byte (10 heksa) bandingkan dengan offset 0200. Hasil yang dimunculkan hanyalah nilai-nilai yang berbeda setiap alamat.
Apabila dilayar tidak memberikan reaksi apapun selain kembali ke prompt '-' atau hyphen, berarti kedua blok memori persis sama.
- dump
Dump pada debug berfungsi untuk melihat isi blok memori. Contoh :
A:\>Debug (enter)-d0100 (enter)
Hasil yang diperoleh dari tampilan tersebut, terbagi menjadi 3 bagian, yaitu :
Ø Bagian kiri : menampilkan alamat-alamat memori dengan format segment:offset
Ø Bagian tengah : menampilkan angka-angka dalam heksadesimal sebagai isi dari alamat-alamat memori
Ø Bagian kanan : menampilkan kode-kode karakter ASCII sebagai terjemahan dari angka heksadesimal tersebut Debug hanya akan memperlihatkan 96 jenis karakter ASCII tercetak (printable character), mulai dari nilai desimal 33 - 127. Di luar nilai itu, karakter yang ditampilkan hanyalah berupa tanda titik (dot atau period).
Beberapa parameter yang dapat
digunakan :
· L (length / panjang)Memiliki arti menampilkan data sepanjang 2 byte, bila parameter 'L' tidak diberikan, maka otomatis akan ditampilkan 128 byte data.
-D 0100 L 2 (enter)
· Alamat awal - alamat akhir-D 0100 01FF (enter)
· Alamat segment:offset-D FFFF:0000 (enter)· Alamat segment:offset sampai segment:offset-D F000:E000 F000:E000 (enter)
- Enter
Berfungsi untuk mengisi atau mengubah data dalam memori.
Contoh :
A:\>Debug (enter)
-E 0100 (enter)
Hasil :
29E7:0100 01.
Setelah angka 01, dapat dimasukkan nilai untuk mengganti angkat tersebut langsung di belakangnya yang diakhir dengan menekan ENTER atau menekan SPACE BAR untuk berpindah ke alamat berikutnya atau menekan tanda '-' (Hyphen) untuk mundur ke lokasi sebelumnya.
- Fill
Fill pada debug berfungsi untuk mengisi lokasi memori. Perbedaan dengan perintah 'E (Enter)', yang menawarkan modifikasi memori secara satu alamt demi satu alamat, sedang 'F (Fill" untuk mengubah isi alamat memori dalam jumlah besar, sesuai dengan rentang (range) yang dikehendaki.
Contoh :
A:\>Debug (enter)
-F 0100
017F 58 (enter)
Berarti isilah mulai alamat offset 0100 sampai offset 017F dengan nilai heksa 58 (karakter ASCII 'x').
atau
- F F 0100 017F 'x' (enter)
Beberapa bentuk perintah 'F' :
·F 0100 L 1 41 (enter)
Arti : mulai offset 0100 sebanyak 1 byte diisi dengan nilai heksa 41 (karakter ASCII 'A').
- Go
Perintah Go pada debug berfungsi untuk menjalankan program di memori. Anda juga dapat menentukan breakpoint,menyebabkan program untuk berhenti di sebuah alamat yang diberikan.
Syntax perintah go:
G
G breakpoint
G = startAddr breakpoint
G = startAddr
breakpoint1 breakpoint2 ...
Breakpoint
adalah 16 - atau 32-bit alamat di mana prosesor harus berhenti, dan startAddr adalah alamat mulai opsional untuk prosesor. Jika tidak ada breakpoint yang ditentukan, program berjalan sampai berhenti dengan sendirinya dan kembali ke Debug. Sampai dengan 10 breakpoints mungkin ditentukan pada baris perintah yang sama. Contoh:
Example Description
G Execute from the current location to the end of the program.
G 50 Execute from the current location and stop before the instruction at offset CS:50.
G=10 50 Begin execution at CS:10 and stop before the instruction at offset CS:50.
- Hexarithmetic
Perintah Hexaritmetic berfungsi untuk melakukan penambahan dan pengurangan pada dua angka heksadesimal.
Format perintah:
H value1 value2
Misalnya, nilai heksadesimal 1A dan 10 ditambahkan dan dikurangi:
H 1A 10
2A 0A (displayed by Debug)
- Input
Fungsinya untuk memasukan perintah dari suatu input yang ditetapkan / output port dan menampilkan nilai heksadesimalnya.
Syntax perintah input:
I port
Dimana port adalah nomor port antara 0 dan FFFF. Sebagai contoh, kita masukan byte dari pelabuhan 3F8 (salah satu COM1 port), dan mengembalikan debug nilai 00:
-I
3F8
00
- Load
Perintah Load berfungsi untuk meload data (atau sektor disk logis) ke memori pada alamat yang diberikan. Untuk membaca file, Anda harus terlebih dahulu menginisialisasi nama dengan perintah (Nama) N.
Contoh Deskripsi
L Load bernama file ke memori di CS: 0100
L DS: 0200 Load bernama file ke memori di DS:0200
L 100 2 A 5 Load lima sektor dari drive C, mulai pukul logis sektor nomor 0Ah.
L 100 0 0 2 Load dua sektor ke memori di CS: 100, dari disk dalam drive, mulai di nomor sektor logika 0.dihilangkan,file dimuat di CS: 100. Debug set BX dan CX dengan jumlah byte yang dibaca.
Syntax perintah load:
L
L address
L address drive firstsector number
Format pertama, tanpa parameter, menyiratkan bahwa Anda ingin membaca dari file ke dalam
memori di CS:0100. (Gunakan perintah N untuk nama file.)
Format kedua juga membaca dari file bernama, namun memungkinkan Anda menentukan alamat target.
Format ketiga , di mana Anda menentukan nomor drive (0 = A, 1 = B,dll), logical pertama nomor sektor, dan jumlah sektor untuk membaca.
Setiap sektor adalah 512 byte, sehingga sektor dimuat pada 100 offset akan mengisi memori melalui offset 2FF. sektor logis diberi nomor dari 0 sampai angka tertinggi di sektor drive. Angka-angka ini berbeda dari nomor sektor fisik, yang tergantung pada hardware.
Untuk menghitung jumlah sektor logis, mengambil ukuran drive dan dibagi dengan 512. Sebagai contoh, sebuah disket 1,44 MB memiliki 2.880 sektor, dihitung sebagai 1.474.560 / 512.
Berikut ini adalah pembongkaran sektor 0 dibaca dari floppy disk, dengan menggunakan debug. Ini adalah biasa disebut boot record. Rekor boot berisi informasi tentang disk, bersama dengan program pendek yang bertanggung jawab untuk memuat sisa dari sistem operasi ketika komputer dinyalakan:
1F6E:0100 EB34 JMP 0136
...
1F6E:0136 CLI FA
1F6E:0137 33C0 XOR AX, AX
1F6E:MOV SS 8ED0 0139, AX
1F6E:013B MOV BC007C SP, 7C00
- move
Move pada debug berfungsi untuk memindahkan atau menyalin data yang ada di suatu lokasi memori ke alamat memori lainnya.
Syntax perintah move : M alamat_asal panjang_alamat_tujuan
Contoh :
A:\>Debug (enter)
-M 0100 L 7F 0200 (enter)
Berarti mulai alamat offset 0100 sebanyak 7Fh byte isi memorinya pindahkan atau kopikan ke offset 0200.
- Name
Menginisialisasi nama file (dan file blok kontrol) dalam memori sebelum menggunakan
Perintah Load atau Write. Format perintahnya:
N [d:][filename][.ext]
Contoh:
N b:myfile.dta
- Output
- Proceed
Perintah Proceed berfungsi untuk menjalankan satu atau lebih instruksi atau subrutin. Sedangkan T (trace) perintah jejak menjadi panggilan subrutin, perintah P hanya menjalankan subruti, Juga LOOP instruksi dan string instruksi primitif (SCAS, LODS, dll) yang dieksekusi sepenuhnya terserah pada instruksi yang mengikuti mereka.
Syntax perintah proceed:
P
P =address
P =address number
Contoh:
Example Description
P =200 Execute a single instruction at CS:0200.
P =150 6 Execute 6 instructions starting at CS:0150.
P 5 Execute the next 5 instructions.
Contoh: Debugging sebuah Loop.
Mari kita lihat contoh di mana langkah-langkah perintah P melalui instruksi MOV dan ADD satu per satu. Bila perintah P mencapai instruksi LOOP, bagaimanapun, loop selesai dilaksanakan lima kali:
-A 100
4A66:0100 mov cx,5 ; loop counter = 5
4A66:0103 mov ax,0
4A66:0106 add ax,cx
4A66:0108 loop 106 ; loop to location 0106h
- quit
Untuk keluar dari mode Debug dan kembali ke DOS
- register
register pada debug berfungsi untuk menampilkan informasi komposisi register-register di dalam mikroprosesor, alamat memori, serta isi dari alamat memori tersebut yang mungkin berupa instruksi yang akan dilaksanakan oleh komputer, atau data.
Contoh :
A:\>DEBUG (enter)
r (enter)
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=29E7 ES=29E7 SS=29E7 CS=29E7 IP=0100 NV UP EI PL NZ NA PO NC
29E7:0100 0114 ADD[SI],DX DS:0000=20CD
AX, BX, CX, DX, SP, BP, SI, DI, DS, ES, SS,CS, dan IP adalah register internal mikroprosesor yang dipakai dalam CPU.
NV, UP, EI, PL, NZ, NA, PO, dan NC adalah output dari sebuah register yang disebut register status atau register flag.
Angka 29E7:0100 adalah alamat lokasi memori dengan format segment:offset. Kedua nilai tersebut merupakan kombinas antara register CS (Code Segment) dengan IP (Instruction Pointer). 0114 adalah isi alamat memori bersangkutan, byte ke-1 berisi nilai '01', dan byte ke-2 berisi nilai '14'. Karena setiap alamat memori berisi satu byte, tentunya nilai 01 itulah yang berdiam pada alamat offset 0100, sedangkan nilai 14 ada di alamat 0101 ADD[SI],DX adalah terjemahan intruksi dari alamat memori bersangkutan.
Untuk mengubah nilai-nilai register internal dapat menggunakan perintah :
RAX = mengubah nilai register AX
RBX = mengubah nilai register BX
RCX = mengubah nilai register CX
RDX = mengubah nilai register DX
RSP = mengubah nilai register SP
RBP = mengubah nilai register BP
RSI = mengubah nilai register SI
RDI = mengubah nilai register DI
RDS = mengubah nilai register DS
RES = mengubah nilai register ES
RSS = mengubah nilai register SS
RCS = mengubah nilai register CS
RIP = mengubah nilai register IP
Sebagai contoh untuk mengubah nilai register AX dari nilai '0000' ke nilai '1111' :
A:\>Debug (enter)
-RAX (enter)
AX 0000
: 1111 (diisi setelah ':' dan enter)
Contoh diatas juga berlaku untuk register internal lainnya dan untuk diperhatikan bahwa angka-angka yang dimasukkan kedalam register harus nilai heksadesimal.
- Search
Search pada debug berfungsi berfungsi untuk mencari data baik yang berupa karakter maupun untaian karakter (string) di dalam suatu blok memori tertentu. Apabila dalam pencarian, data yang dicari diketemukan, maka akan ditampilkan semua alamat dari data tersebut lengkap dengan nilai segment dan offsetnya, sebaliknya bila tidak diketemukan akan kembali ke prompt '-'.
Syntax perintah search :
S alamat_awal panjang_alamat_akhir
Contoh :
A:\>Debug (enter)
-S F000:E000 L FF "IBM" (enter)
Berarti mulai alamat F000:E000 sebanyak FFh byte cari string "IBM".
-S F000:E000 L FF "A" (enter)
Berarti mulai alamat F000:E000 sebanyak FFh byte cari string "A"..
- Trace
Trace pada debug berfungsi untuk menjalankan satu atau lebih instruksi yang dimulai lokasi CS: IP saat ini Atau pada alamat lainnya. Isi dari register akan ditampilkan setelah setiap instruksi dieksekusi. Format perintahnya trace adalah:
T
T count
T =address count
Di Mana count adalah jumlah instruksi yang akan di Trace, dan address adalah alamat awal untuk trace. Contoh:
Example Description
T Trace the next instruction.
T 5 Trace the next five instructions.
T =105 10 Trace 16 instructions starting at CS:105.
Command ini men-Trace Iterasi loop secara individu, sehingga Anda mungkin ingin menggunakannya untuk debug dengan sebuah loop.
- unassembled
Berfungsi untuk menampilkan listring dari suatu program bahasa mesin.
Contoh :
A:\>Debug (enter)
-U FFFF:0000 (enter)
Beberapa bentuk perintah 'U' :
·U F000:E05B (enter)
- write
Perintah write pada debug dipakai untuk menulis sebuah blok memori ke sebuah file atau ke sektor disk individu. Untuk menulis Ke sebuah file, nama pertama harus diinisialisasi dengan perintah N (Jika file itu hanya dimuat baik pada command DOS atau dengan command Load, Anda tidak perlu mengulangi namanya . command write mirip dengan perintah (Load) L:
W
W address
W address drive firstsector number
Tempatkan jumlah byte yang akan ditulis dalam BX: CX. Misal jika sebuah file panjangnya 12345h byte, BX dan CX akan berisi nilai berikut:
BX= 0001 CX = 2345
Berikut ini contoh lainnya:
Example Description
N EXAMPLE.COM Initialize the filenameEXAMPLE.COM on the default drive.
R BX 0 R CX 20 Set the BX and CX registers to 00000020h, the length of the file.
W Write 20h bytes to the file, starting at CS:100.
W 0 Write from location CS:0 to the file.
W Write named file from location CS:0100.
W DS:0200 Write named file from location DS:0200.
HATI-HATI! Perintah berikut ini sangat berbahaya untuk data pada drive disk Anda, karena menulis pada sektor dapat menghapus file yang ada sistem disk. Gunakan perintah berikut sangat hati-hati!
W 100 2 A 5 Write five sectors to drive C from locationCS:100, starting at logical sector 0Ah.
W 100 0 0 2 Write two sectorsto drive A from location CS:100,starting at logical sector number 0.
Dari pembahasan perintah-perintah DEBUG dapat disimpulkan bahwa DEBUG dibuat dengan tujuan untuk dapat mengeksplorasi program-program yang sudah dibuat berikut segala dampaknya terhadap sistem dan aplikasi, sedangkan EMBLY diadakan dengan untuk mempermudah seorang programmer dalam menyusun instruksi-instruksi pada sebuah program yang sedang dibuat.