Pengenalan Debug


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:


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

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

  1. dump
Dump pada debug berfungsi untuk melihat isi blok memori.

Contoh :
A:\>Debug (enter)
-d
0100 (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)

  1. Enter

Berfungsi untuk mengisi atau mengubah data dalam memori.
Contoh :
A:\>Debug (enter)
-E 0100 (enter)


Hasil :
-E 0100
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.

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


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

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

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

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

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

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

  1. Output

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

  1. quit
Untuk keluar dari mode Debug dan kembali ke DOS

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

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

  1. 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 fivinstructions.
T =105 10 Trace 16 instructions starting aCS:105.


Command ini men-Trace Iterasi loop secara individu, sehingga Anda mungkin ingin menggunakannya untuk debug dengan sebuah loop.

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

  1. 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 namefile from locatioCS:0100. 
W DS:0200                   Write namefile 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 secto0Ah.
W 100 0 0 2 Write two sectorsto drive A from location CS:100,starting at logicasector 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.


Semua Artikel di Blog ini boleh dicopy,disalin,dibajak,diketik sendiri, difoto dll asal tetap mencantumkan link http://kumpulantipskomputer.blogspot.com/
 
Copyright 2010 News Tutorials. All rights reserved.
Themes by Ex Templates Blogger Templates l Home Recordings l Studio Rekaman