Suthida Chaichomchuen std@kmitnb.ac.th DEBUG PROGRAM Suthida Chaichomchuen std@kmitnb.ac.th
DEBUG Program? เป็นโปรแกรมที่ใช้สำหรับตรวจสอบหาข้อผิดพลาดของโปรแกรม โดยจะแสดงรหัสในรูปแบบของเลขฐาน 16 และข้อมูลที่จะใส่เข้าไปก็ต้องเป็นเลขฐาน 16 ด้วย และยังสามารถ Run โปรแกรมในโหมดของการทำงานทีละขั้นได้
DEBUG allows ... View memory Enter programs in memory Trace their execution
Rule of DEBUG Command DEBUG จะไม่สนใจตัวอักษรเล็กหรือใหญ่ โดยจะถือว่าเป็นตัวเดียวกัน เมื่อต้องการแยกค่า Parameter ออกจากคำสั่งให้ใส่เพียงช่องว่างเท่านั้น การอ้างถึง Segment และ Offset ต้องเขียนให้อยู่ในรูปแบบคือ Segment:Offset
Rule . . . DEBUG จะถือว่าตัวเลขทุกตัวเป็นเลขฐาน 16 หมด
DEBUG Commands A-Assemble C-Compare D-Display/Dump E-Enter F-Fill
Commands . . . G-Go H-Hexadecimal I-Input L-Load M-Move
Commands . . . N-Name O-Output P-Proceed Q-Quit R-Register
Commands . . . S-Search T-Trace U-Unassemble W-Write
The DEBUG Display The display consists of 3 parts : Left : Hex Address [segment:offset] Center : Hexadecimal representation Right : ASCII representation Displays 8 lines of data (16 bytes/line) A hyphen (-) separates in each 8 bytes
Starting DEBUG C:\DEBUG <Enter> - (hyphen) - ? (help)
Q-Quit เป็นคำสั่งสำหรับออกจากโปรแกรม DEBUG โดยจะไม่มีการบันทึกไฟล์ก่อนออก มีรูปแบบคำสั่งคือ Q <Enter>
D-Display/Dump เป็นคำสั่งที่ใช้แสดงข้อมูลบางส่วนของหน่วยความจำในรูปแบบของ Hex และ ASCII รีจิสเตอร์ที่กำหนดเริ่มต้นคือ DS โดยมีรูปแบบคำสั่งคือ D [address] or D [range]
D : Example D 200 D แสดงค่าที่ DS:200H จำนวน 80H bytes (128 bytes)
D : Example D CS:150 D DS:20 L5 D 300 32C แสดงค่าที่ CS:150H จำนวน 80H bytes D DS:20 L5 แสดงค่าที่ DS:20H จำนวน 5 bytes D 300 32C แสดงค่าที่หน่วยความจำ 300 จนถึง 32C
D : Checking System Equipment Location 410H-411H D 40:10
D : Checking System Equipment 15,14 : Number of parallel printer ports attached 11-9 : Number of serial ports attached 7,6 : Number of diskette devices 5,4 : Initial video mode 1 : 1=math coprocessor is present 0 : 1=diskette drive present
D : Checking Memory Size Location 413H-414H D 40:13
D : Checking Serial Number & Copyright Notice Location FE000H D FE00:0
D : Checking ROM BIOS Date Location FFFF5H D FFFF:5
D : Checking Model ID Location FFFFEH D FFFF:E
D : Checking Model ID Number of model IDs: F8 : PS/2 models 70 and 80 FA : PS/2 model 30 FB : PC-XT (1986) FC : PC-AT (1984), PC-XT model 286, PS/2 models 50 and 60, etc. FE : PC-XT (1982), portable (1982) FF : Original IBM PC
E-Enter เป็นคำสั่งสำหรับใส่ข้อมูลหรือคำสั่งเครื่องลงในหน่วยความจำ รีจิสเตอร์ที่กำหนดเริ่มต้นคือ DS โดยมีรูปแบบคำสั่งคือ E address [list]
E : Example E 105 13 3A 21 E CS:211 21 2A E 110 ‘anything’ ใส่ค่าที่ DS:105H จำนวน 3 bytes E CS:211 21 2A ใส่ค่าที่ CS:211H จำนวน 2 bytes E 110 ‘anything’ ใส่ข้อความโดยเริ่มต้นที่ DS:110H
E : Example E 12C แสดงข้อมูลที่ DS:12CH
R-Register เป็นคำสั่งที่ใช้แสดงข้อมูลของรีจิสเตอร์และคำสั่งต่อไป มีรูปแบบคำสั่งคือ R [Registername]
R : Example R R DX R IP R F
R : Example FLAG NAME SET CLEAR OVERFLOW OV NV DIRECTION DN UP INTERRUPT EI DI SIGN NG(-) PL(+)
R : Example FLAG NAME SET CLEAR ZERO ZR NZ AUXILLIARY AC NA PARITY PE PO CARRY CY NC
T-Trace เป็นคำสั่งที่จะ Execute โปรแกรมที่ละ Step คู่ของรีจิสเตอร์ที่กำหนดคือ CS:IP มีรูปแบบคำสั่งคือ T [=address] [value]
T : Example T T 10 T =100 5
Machine Language Example I : Immediate data Machine Instruction Symbolic Code B82301 MOV AX,0123 052500 ADD AX,0025 8BD8 MOV BX,AX 03D8 ADD BX,AX 8BCB MOV CX,BX 2BC8 SUB CX,AX 2BC0 SUB AX,AX 90 NOP
Keying in Program Instructions E CS:100 B8 23 01 05 25 00 E CS:106 8B D8 03 D8 8B CB E CS:10C 2B C8 2B C0 90
Executing Program Instructions
Machine Language Example II : Defines data DS OFFSET HEX CONTENTS 0200H 2301H 0202H 2500H 0204H 0000H 0206H 2A2A2AH
Machine Language Example II . . . Machine Instruction Symbolic Code A10002 MOV AX,[0200] 03060202 ADD AX,[0202] A30402 MOV [0204],AX 90 NOP
Keying in Program Instructions & Data E CS:100 A1 00 02 03 06 02 02 E CS:107 A3 04 02 90 E DS:0200 23 01 25 00 00 00 E DS:0206 2A 2A 2A
Display Memory Contents To view the code: D CS:100,10A To view the data: D DS:200,208
A-Assemble เป็นคำสั่งที่ใช้แปลคำสั่งภาษาแอสเซมบลีให้เป็นภาษาเครื่อง เหมาะสำหรับการเขียนและทดสอบโปรแกรมภาษาแอสเซมบลีแบบสั้น ๆ โดยค่าเริ่มต้นของแอดเดรสจะเริ่มที่ CS:0100H เสมอ
A : Example A A 100 A 104
A : Example A 100 MOV CL,42 MOV DL,2A ADD CL,DL NOP
U-Unassemble เป็นคำสั่งที่ตรงข้ามกับคำสั่ง A คือจะแปลภาษาเครื่องให้ป็นภาษาแอสเซมบลี คู่ของรีจิสเตอร์ที่กำหนดคือ CS:IP มีรูปแบบคำสั่งคือ U [address] or U [range]
U : Example U U 100 U 100,106
F-Fill เป็นคำสั่งที่นำค่าคงที่ ไปใส่ในขอบเขตของหน่วยความจำที่กำหนด รีจิสเตอร์ที่กำหนดเป็นค่าเริ่มต้นคือ DS โดยมีรูปแบบคำสั่งคือ F range list
F : Example F 210 L19 ‘Help!’ F 210 229 ‘Help!’ กำหนดโดยใช้ Length คือ 19H (25) F 210 229 ‘Help!’ กำหนดโดยใช้ Range 210H ถึง 229H
H-Hexadecimal เป็นคำสั่งที่ใช้แสดงค่าผลบวก และผลต่างของเลขฐาน 16 สองค่า กำหนดค่าได้สูงสุดคือ 4 หลัก โดยมีรูปแบบคำสั่งคือ H value1 value2
H : Example H 14F 22 ผลลัพธ์คือ 171 (sum) และ 12D (difference)
C-Compare เป็นคำสั่งที่ใช้เปรียบเทียบข้อมูลในหน่วยความจำ รีจิสเตอร์เริ่มต้นคือ DS โดยมีรูปแบบคำสั่งคือ C [range] [address]
C : Example การเขียนคำสั่งสามารถทำได้ 2 วิธี เปรียบเทียบข้อมูลทั้งหมด 10H bytes โดยเริ่มต้นที่ DS:050 กับ DS:200 C 050 L10 200 ; เปรียบเทียบโดยการระบุความยาวของหน่วยความจำ C 050 05F 200 ; เปรียบเทียบโดยการใช้ช่วง
M-Move เป็นคำสั่งเคลื่อนย้าย/คัดลอก ข้อมูลในหน่วยความจำ รีจิสเตอร์ที่กำหนดคือ DS มีรูปแบบคำสั่งคือ M range address
M : Example M DS:50 L100 DS:400 M DS:50 150 DS:400 กำหนดขนาดโดยใช้ Length M DS:50 150 DS:400 กำหนดขนาดโดยใข้ Range
S-Search เป็นคำสั่งที่ใช้ค้นหาตัวอักษรในหน่วยความจำ รีจิสเตอร์ที่กำหนดคือ DS มีรูปแบบคำสั่งคือ S range list
S : Example S 300 L 2000 “VIRUS” S CS:100 400 51
P-Proceed เป็นคำสั่งที่ใช้ Execute Subroutine CALL, LOOP, INT หรือ REP จนถึงคำสั่งถัดไป มีรูปแบบคำสั่งคือ P [=address] number
G-Go เป็นคำสั่งที่ใช้ในการ execute โปรแกรมที่พิมพ์เข้าไป รีจิสเตอร์ที่เป็นค่าเริ่มต้นคือ CS โดยมีรูปแบบคำสั่งคือ G [=address] address [address…] การ execute จะทำจนกระทั่งเจอคำสั่ง INT
G : Example A 100 MOV DL,61 MOV AH,2 INT 21 INT 20
G : Example G G =100 104
N-Name เป็นคำสั่งใช้กำหนดชื่อโปรแกรมหรือไฟล์ที่ต้องการอ่านหรือเขียนบนดิสก์ มีรูปแบบคำสั่งคือ N pathname arglist โดยสามารถอ่านและเขียนไฟล์ได้เมื่อใช้ร่วมกับคำสั่ง L-Load หรือ W-Write
N : Example N A:Sam.com
W-Write เป็นคำสั่งที่ใช้เขียนไฟล์จาก DEBUG โดยใช้ร่วมกับคำสั่ง N-Name ในการกำหนดชื่อไฟล์ รีจิสเตอร์ที่กำหนดคือ CS มีรูปแบบคำสั่งคือ W [address] [drive] [firstsector] [number] ไฟล์ที่เก็บจะอยู่ในรูปแบบของนามสกุล .COM เท่านั้น
W นอกจากนี้สามารถใช้ในรูปแบบที่ไม่มี Operand ได้โดยการใช้คู่ของรีจิสเตอร์ BX:CX เป็นตัวกำหนดขนาดของไฟล์แทน
W R BX ; เรียกใช้รีจิสเตอร์ BX 0 ; กำหนด BX=0 N filespec ; ใส่ชื่อไฟล์ R CX ; เรียกใช้รีจิสเตอร์ CX length ; ใส่ขนาดของไฟล์ในรูปแบบของ Hex W ; เขียนไฟล์
L-Load เป็นคำสั่ง load File หรือ Disk Sector มาไว้ใน Memory คำสั่งมี 2 รูปแบบคือ 1. เรียก DEBUG พร้อมด้วย ไฟล์.EXE 2. เรียกโดยใช้ร่วมกับคำสั่ง N เมื่ออยู่ในโปรแกรม DEBUG แล้ว
L : Example C:\DEBUG SAM.EXE L [address] N c:\sam.exe ; Name of file L ; Load at CS:100
L : Example L [address [drive start number]] L 100 0 20 15 address ; ตำแหน่งหน่วยความจำเริ่มต้นที่ต้องการ Load ข้อมูล (Default คือ CS:100) drive ; กำหนด disk drive (0=A, 1=B etc.) start ; ระบุเซกเตอร์แรกที่จะ Load (default คือ 0) number ; จำนวนของเซกเตอร์ที่ต้องการ Load L 100 0 20 15
I-Input เป็นคำสั่งสำหรับใส่ค่าและแสดงค่า 1 byte จาก Port รูปแบบคำสั่งคือ I portaddress
O-Output เป็นคำสั่งใช้ส่งข้อมูล 1 byte ออก Port มีรูปแบบคำสั่งคือ O port byte
INT instruction : Getting the Current Date MOV AH,2A INT 21 NOP
INT : Getting the Current Date AL: Day of week (0=Sunday) CX: Year (07D0H=2000) DH: Month (01H - 0CH) DL: Day of the month (01H-1FH)
INT : Determining the size of memory NOP AX = The size of base memory
INT : Displays data on the screen 100 MOV AH,09 102 MOV DX,108 105 INT 21 107 NOP 108 DB ‘your name’,’$’
INT : Keyboard Input 100 MOV AH,10 102 INT 16 104 JMP 100 106 NOP
Using the PTR operator 100 MOV AX,[11A] 103 ADD AX,[11C] 107 ADD AX,25 10A MOV [11E],AX 10D MOV WORD PTR [120],25 113 MOV BYTE PTR [122],30
PTR operator . . . 118 NOP 119 NOP 11A DB 14,23 11C DB 05,00 11E DB 00,00 120 DB 00,00,00