การใช้ DEBUG เขียนโปรแกรม

พฤศจิกายน 27, 2008

 

 

การใช้ DEBUG เขียนโปรแกรม

คำสั่ง D (Dump) คำสั่ง F (fill) คำสั่ง A (Assemble) คำสั่ง G (G) คำสั่ง U (Unassemble) คำสั่ง R (Registers) คำสั่ง N (Name) และคำสั่ง W (Write) คำสั่ง Q (Quit) DEBUG เป็นโปรแกรม ซึ่งใช้ในการตรวจสอบหาข้อผิดพลาดของโปรแกรมแอสแซมบลี นอกจากนี้ยังสามารถใช้ DEBUG เขียนโปรแกรมภาษาแอสแซมบลี สั้น ๆ เพราะว่ามี Overhead น้อย ในส่วนนี้จะแสดงคำสั่งของ DEBUG และผลที่แสดงบนจอภาพ และใช้ DEBUG เขียนโปรแกรมสั้น ๆ เริ่มด้วยเมื่อผู้ใช้โหลด DOS เรียบร้อยแล้ว จะเห็น Prompt A> บนจอภาพ ในการใช้ DEBUG ให้พิมพ์ debug ตามด้วย ก็จะได้ prompt ของ debug คือ A>debug พิมพ์บรรทัดนี้ – debug’s prompt charactor

คำสั่ง D (Dump)
– d100 พิมพ์บรรทัดนี้
5BA5 : 0110 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ……………………
5BA5 : 0110 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ……………………
5BA5 : 0120 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ……………………
5BA5 : 0130 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ……………………
5BA5 : 0140 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ……………………
5BA5 : 0150 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ……………………
ดังที่ปรากฏในจอภาพ คือค่าที่อยู่ในคอมพิวเตอร์ ค่าที่แสดงเป็นเลขฐานสิบหก โดยที่เลขฐานสิบหก 2 ตัวคือ 1 ไบต์ ค่าของเลขฐานสิบหก 2 ตัว มีค่าอยู่ระหว่าง 00h ถึง FFh หรือค่า 0 ถึง 255 ของเลขฐานสิบนั่นเอง บนจอภาพจะบอก address คือตำแหน่งที่อยู่ในหน่วยความจำและ Content คือค่าที่อยู่ในตำแหน่งนั้น ๆ ตำแหน่งที่อยู่ในหน่วยความจำ คือค่าในคอลัมน์แรก เช่น 5BA5:0100 จะเห็นว่าตำแหน่งที่อยู่ประกอบด้วยสองส่วน คั่นด้วยเครื่องหมาย : ค่าทางซ้ายมือคือ 5BA5 ซึ่งในเครื่องที่คุณใช้อาจได้เป็นค่าอื่น หมายถึงค่าของเซ็กเมนต์ และค่าทางขวามือ คือ ออฟเซตค่าที่อยู่ในหน่วยความจำ อยู่ในส่วนถัดมา โดยที่แต่ละบรรทัดจะมี 16 ค่า หรือ 16 ไบต์ เรียงลำดับดังนี้
0 1 2 3 4 5 6 7 8 9 A B C D E F
5BA5 : 0100 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ……………………
5BA5 : 0110 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ……………………
5BA5 : 0120 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ……………………
ซึ่งก็คือค่าที่เรียงอยู่ในหน่วยความจำดังรูป
: 0100 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ……………………
ส่วนของหน่วยความจำ
:0100 00
: 0101 00
: 0102 00
: 0103 00
: 0104 00
: 0105 00
: 0106 00
:010E 00
:010F 00
การหาค่า absolute address ทำโดยการ Shift ค่าของ เซกเมนต์ 4 บิตทางซ้ายแล้วบวกด้วยค่าของออฟเซต
เซกเมนต์ เ 05BA50
ออฟเซต เ __0100
Ablolute address 05BA50

 

 


 

 asdfggg

 

คำสั่ง G (G)
ถ้าต้องการทราบว่าโปรแกรมที่เพิ่มสั่งพิมพ์เข้าไป ให้ผลอย่างไร พิมพ์คำสั่ง g
– g
a
Program terminated normally
– จะเห็นว่าโปรแกรมนั้นพิมพ์ตัวอักษร a บนจอภาพ ทีนี้ลองพิมพ์ d 100
5BA5 : 0100
5BA5 : 0100 B2 61 B4 02 CD 20-61 61 61 61 61 61 61 61 .a…!.aaaaaaaaaaaaaaaaa
5BA5 : 0110 61 61 61 00 00 00 00 00-00 00 00 00 00 00 00 00 aaa………………..
5BA5 : 0120 FF FF FF FF FF FF FF FF-FF FF FF FF FF FF FF FF ………………
5BA5 : 0130 FF FF FF FF FF FF FF FF-FF FF FF FF FF FF FF FF ………………
5BA5 : 0140 FF FF FF FF FF FF FF FF-FF FF FF FF FF FF FF FF ………………
5BA5 : 0160 24 24 24 24 24 24 24 24-00 00 00 00 00 00 00 00 $$$$$$$$………..
5BA5 : 0170 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 …………………..
จะเห็นว่าตำแหน่ง 0100 ถึงตำแหน่ง 0107 คือ ส่วนของโปรแกรมที่เพิ่งพิมพ์เข้าไป โดยที่ ตัวอักษรทางขวามือคือ .a….!. นั้นไม่มีความหมายอะไร โปรแกรม 4 บรรทัด ที่พิมพ์เข้าไปโดยใช้คำสั่ง “A” จะถูก assemble คือ ถูกแปรจากโปรแกรมภาษาแอสแซมบลี เป็นภาษาเครื่อง

คำสั่ง U (Unassemble)
เป็นคำสั่งที่ทำงานตรงกันข้ามกับคำสั่ง “A” คือ จะแปลโปรแกรมภาษาเครื่อง ให้เป็นโปรแกรม
ภาษาแอสแซมบลี
U 100,106
5BA5 : 0100 B261 mov dl,61
5BA5 : 0102 B402 mov ah,2
5BA5 : 0104 CD21 int 21
5BA5 : 0106 CD20 int 20
Machine Assembly
Language Language
Disassembly

คำสั่ง R (Registers)

เป็นคำสั่งที่แสดงค่าที่อยู่ในรีจิสเตอร์ ของ 8088
– r AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=5BA5 ES=5BS5 SS=5BA5 CS=5BA5 IP=0100 NV UP EI PL NZ NA PO NC
5BA5:0100 MOV DL,61
จะเห็นว่า รีจิสเตอร์ AX มีค่า 0000 รีจิสเตอร์ BX มีค่า 0000 รีจิสเตอร์ IP มีค่า 0100 ถ้าต้องการเปลี่ยนค่าในรีจิสเตอร์ก็ทำได้โดยใช้คำสั่ง r ตามด้วยชือ่รีจิสเตอร์
เช่น ถ้าต้องการเปลี่ยนค่าในรีจิสเตอร์ CX เป็น 100 ทำได้โดย
– rcx
CX 0000
0100
– r
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=5BA5 ES=5BS5 SS=5BA5 CS=5BA5 IP=0100 NV UP EI PL NZ NA PO NC
5BA5:0100 MOV DL,61
จะเห็นว่ารีจิสเตอร์ CX ม่ค่า 0100
Flag Name Set (=1) Clear (=0)
Overflow (yes/no) OV NV
Direction (decrement/increment) DN UP
Interrupt (enable/disable) EI DI
Sign (negative/positive) NG PL
Zero (yes/no) ZR NZ
Auxilliary carry (yes/no) AC NA
Parity (even/odd) PE PO
Carry (yes/no) CY NC
โปรแกรมพิมพ์ ASCII character
– a 100
5BA5 : 0100 mov cx,100
5BA5 : 0103 mov dl,00
5BA5 : 0105 mov ah,2
5BA5 : 0107 int 21
5BA5 : 0109 inc dl
5BA5 : 010B loop 0105
5BA5 : 010D int 20
5BA5 : 010F
– u 100,10d
5BA5 : 0100 B90001 mov cx,100
5BA5 : 0103 B200 mov dl,00
5BA5 : 0105 B402 mov ah,2
5BA5 : 0107 CD21 int 21
5BA5 : 0109 FEC2 inc dl
5BA5 : 010B E2F8 loop 0105
5BA5 : 010D CD20 int 20
จะพิมพ์ ASCII character set บนจอภาพ

คำสั่ง N (Name) และคำสั่ง W (Write)
เป็นคำสั่งที่เก็บโปรแกรมบนแผ่นดิสก์เก็ต โดยผู้ใช้ต้องบอกชื่อของโปรแกรม โปรแกรมมีกี่ไบต์ และบอกคอมพิวเตอร์ ให้เขียนโปรแกรมลงบนดิสก์
– n adcii.com โปรแกรมชื่อ ascii.com
– r bx
BX 0000 BX มีค่า 0 เสมอ
: – r cx
CX 0000
: f โปรแกรมยาว 16 ไบต์
– w เขียนโปรแกรมลงบนดิสก์เก็ต
Writing 000F bytes

คำสั่ง Q (Quit)
เป็นคำสั่งที่ออกจาก DEBUG สู่ DOS
– q
> ผู้ใช้สามารถ execute โปรแกรมที่ได้เก็บไว้บนแผ่นดิสก์เก็ต โดยพิมพ์ชื่อของโปรแกรม
> ascii
จะเห็น ASCII character บนจอภาพ ตามด้วย A>


 

 

 

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s

%d bloggers like this: