Detailed Explanation of debug
First of all, I would like to recommend using DR-DEBUG that comes with DR-DOS7. It supports instructions up to Pentium pro, is powerful, and supports macros. The most convenient thing is that you can use the Enter key to replace the previous u/d/p/t instruction, which is convenient for viewing and debugging.
The following is the translation of its help:
Assemble, convert the input assembly language into machine code
A (example: Acs:100)
Set breakpoints for debugging
B (example: B100 2 al=80)
Compare the contents of two segments of memory
Compare C range address (example: C200 20d 500)
Display the specified memory data
Dump D (example: Dcs:500 L 10)
Edit memory data
Enter E (example: Eds:500 "Hello ")
Fill memory
Fill F range data (example: F100 13f "Test ")
Run the program from the specified point
Go G (example: Gcs:4bb0)
Calculate
Hex H (example: H10e 01)
Input from I/O port
Input I port (example: I3f2)
Load the content of a file or a specified logical sector
Load L (ex: L0Cff 3 09 10)
Move (copy) the content of memory
Move M range address (example: Mcs:200 220 cs:400)
Specify the operation file name
Name N filename (example: Ntest.com)
Output to I/O port
Output O port value (example: O3ff 10)
Step through (skip int/rep/call, etc.)
Proceed P (example: P=ds:3fff)
Quit debug
Quit Q
Change or display registers
Register R (example: Rax 1000)
Search for data in the specified memory
Search S range data (example: Sds:200 500 32)
Step through (enter int/rep/call, etc.)
Trace T (example: T=3cff:0100 10)
Unassemble the machine code in the specified memory
Unassemble U (example: U3cff:0200 400)
Display the screen content (equivalent to)
Viewswap V (any key returns)
Write the content of a file or a specified logical sector
Write W (ex: Wds:200 0 16 0f)
(range can be: start offset end offset or start address L length)
The following are detailed usage instructions:
--- Glossary ---
pathname - File name (optional path)
testparms - Parameters
address - Memory address offset
If the segment address is omitted, CS is used for assembly/disassembly; DS is used for other functions
range - Can be: start offset end offset
start address L length
start address, + length
reg - Register name
list - Some values separated by spaces or commas (of a given type)
drive - 0 = A:, 1 = B:, ...
firstsec - Logical sector number (starting from 0)
--- Operators ---
Numbers can be hexadecimal (default), # decimal, \ octal, % binary, '' string '' ("chars"),
Registers, , ^ stack.
Operators (+ - * /) and (parentheses) can be used.
Example: Rax=(^ + (bl * %1001) + ''a'').
- represents basic debug commands
+ represents commands unique to dr-debug
x represents instructions that can only be executed in dr-debug extended mode. Enter /s to enter default mode, and enter /x to enter extended mode
--- Dump commands ---
-D x Set/query default display length (in bytes)
-DB x Set/query default display length and return in byte mode
D= x Set/query the start point of viewing (0-f)
D - Display the specified memory content (/S mode) / repeat the last D? command (/X mode)
DB - Display the specified memory content (in bytes)
DW x Display the specified memory content (in words)
DD x Display the specified memory content (in double words)
DP x Display the pointer of the specified memory (far pointer - segment: offset)
DI x Display the interrupt vector table (range = interrupt number)
--- Enter commands ---
(When the list is omitted, enter data after pressing Enter, "." to exit)
E ] + Enter data
EB] x Enter data (in bytes)
EW] x Enter data (in words)
ED] x Enter data (in double words)
EP] x Enter data (in far pointers)
EI] x Enter interrupt vector
--- Compare commands ---
C range,address - Compare the contents of two segments of memory
CBrange,address x Compare the contents of two segments of memory (in bytes)
CWrange,address x Compare the contents of two segments of memory (in words)
CDrange,address x Compare the contents of two segments of memory (in double words)
CPrange,address x Compare the contents of two segments of memory (in far pointers)
--- Fill commands ---
F range,list - Fill data into memory
FBrange,list x Fill data into memory (in bytes)
FWrange,list x Fill data into memory (in words)
FDrange,list x Fill data into memory (in double words)
FPrange,list x Fill data into memory (in far pointers)
--- Search commands ---
S address list - Search for data in the specified memory
-Saddress list x Search for data in the specified memory and save the offset address of the (cx+1)th match in cx
SBaddress list x Search for data in the specified memory (in bytes) (-SB is as before)
SWaddress list x Search for data in the specified memory (in words) (-SW is as before)
SDaddress list x Search for data in the specified memory (in double words) (-SD is as before)
SPaddress list x Search for data in the specified memory (in far pointers) (-SP is as before)
--- Port I/O commands ---
I port - Input from I/O port
IB port x Input from I/O port (in bytes)
IW port x Input from I/O port (in words)
ID port x Input from I/O port (in double words) (supported above 386)
O port,value - Output to I/O port
OB port,value x Output to I/O port (in bytes)
OW port,value x Output to I/O port (in words)
OD port,value x Output to I/O port (in double words) (supported above 386)
--- Macro commands ---
-: + Clear all macros
:macroname + Define macro
= + List macro or execute macro
--- Disk I/O commands ---
N - Release parameters for the next disk operation
N? + Display parameters
N
- Specify file
L - Load file
Laddress - Load file to the specified memory address
W - Write memory to file, starting from cs:100 with length BX-CX
W - Write memory to file, starting from the specified address with length BX-CX
Laddress,drive,firstsec,number
- Load the specified logical sector to the specified memory (num = number of sectors to load)
Waddress,drive,firstsec,number
- Save the specified memory to the specified logical sector (num = number of sectors to save, or use BX-CX to specify its length - in bytes)
--- Trace commands ---
-B x Clear all breakpoints (translated as breakpoint, the same below)
-Baddress x Clear the breakpoint at the specified address
B + List breakpoints
Baddress]
+ Set breakpoint at the specified memory, interrupt every count times, interrupt condition: reg=val
T - Step through starting from the specified address for number instructions
TU + Same as T, but do not display the execution result of intermediate instructions
P - Same as T, but skip call and int subroutines
PU + Same as P, but do not display the execution result of intermediate instructions
G Execute starting from the specified address (or CS:IP), stop at
--- Assemble command ---
A - Enter the input assembly language mode (press Enter/. to exit), support comments
--- Unassemble commands ---
-Unumber x Set/query default unassemble length
U - Unassemble the specified memory instructions
--- Help commands ---
? - Display basic help
?topic + Display specific topic or page number (1..8)
?? or ?0 + Display all help
--- Display and input modes ---
A= x Set/query default address mode (16-bit/32-bit)
O= x Set/query default operand mode (16-bit/32-bit)
R= + Set/query default register display mode (16-bit/32-bit)
RF - Set/query flag register
RDR x Display flag register in 16-bit register mode (default in /X mode)
RMS x Display flag register in standard mode (default in /S mode)
--- Utility commands ---
ASCII + Display an ASCII table
CLS + Clear screen
CPU + Display CPU type (support up to Pentium pro) and working mode (real mode/32-bit protected mode/virtual 86 mode)
H value + Display ''value'' in hexadecimal, decimal, character, octal and binary
H value1 value2 + Display the results of adding, subtracting, multiplying, dividing and taking modulus of value1 and value2
V + Display the user screen (execution result of the program, just like in c)
; comment + Comment
First of all, I would like to recommend using DR-DEBUG that comes with DR-DOS7. It supports instructions up to Pentium pro, is powerful, and supports macros. The most convenient thing is that you can use the Enter key to replace the previous u/d/p/t instruction, which is convenient for viewing and debugging.
The following is the translation of its help:
Assemble, convert the input assembly language into machine code
A (example: Acs:100)
Set breakpoints for debugging
B (example: B100 2 al=80)
Compare the contents of two segments of memory
Compare C range address (example: C200 20d 500)
Display the specified memory data
Dump D (example: Dcs:500 L 10)
Edit memory data
Enter E (example: Eds:500 "Hello ")
Fill memory
Fill F range data (example: F100 13f "Test ")
Run the program from the specified point
Go G (example: Gcs:4bb0)
Calculate
Hex H (example: H10e 01)
Input from I/O port
Input I port (example: I3f2)
Load the content of a file or a specified logical sector
Load L (ex: L0Cff 3 09 10)
Move (copy) the content of memory
Move M range address (example: Mcs:200 220 cs:400)
Specify the operation file name
Name N filename (example: Ntest.com)
Output to I/O port
Output O port value (example: O3ff 10)
Step through (skip int/rep/call, etc.)
Proceed P (example: P=ds:3fff)
Quit debug
Quit Q
Change or display registers
Register R (example: Rax 1000)
Search for data in the specified memory
Search S range data (example: Sds:200 500 32)
Step through (enter int/rep/call, etc.)
Trace T (example: T=3cff:0100 10)
Unassemble the machine code in the specified memory
Unassemble U (example: U3cff:0200 400)
Display the screen content (equivalent to)
Viewswap V (any key returns)
Write the content of a file or a specified logical sector
Write W (ex: Wds:200 0 16 0f)
(range can be: start offset end offset or start address L length)
The following are detailed usage instructions:
--- Glossary ---
pathname - File name (optional path)
testparms - Parameters
address - Memory address offset
If the segment address is omitted, CS is used for assembly/disassembly; DS is used for other functions
range - Can be: start offset end offset
start address L length
start address, + length
reg - Register name
list - Some values separated by spaces or commas (of a given type)
drive - 0 = A:, 1 = B:, ...
firstsec - Logical sector number (starting from 0)
--- Operators ---
Numbers can be hexadecimal (default), # decimal, \ octal, % binary, '' string '' ("chars"),
Registers, , ^ stack.
Operators (+ - * /) and (parentheses) can be used.
Example: Rax=(^ + (bl * %1001) + ''a'').
- represents basic debug commands
+ represents commands unique to dr-debug
x represents instructions that can only be executed in dr-debug extended mode. Enter /s to enter default mode, and enter /x to enter extended mode
--- Dump commands ---
-D x Set/query default display length (in bytes)
-DB x Set/query default display length and return in byte mode
D= x Set/query the start point of viewing (0-f)
D - Display the specified memory content (/S mode) / repeat the last D? command (/X mode)
DB - Display the specified memory content (in bytes)
DW x Display the specified memory content (in words)
DD x Display the specified memory content (in double words)
DP x Display the pointer of the specified memory (far pointer - segment: offset)
DI x Display the interrupt vector table (range = interrupt number)
--- Enter commands ---
(When the list is omitted, enter data after pressing Enter, "." to exit)
E ] + Enter data
EB] x Enter data (in bytes)
EW] x Enter data (in words)
ED] x Enter data (in double words)
EP] x Enter data (in far pointers)
EI] x Enter interrupt vector
--- Compare commands ---
C range,address - Compare the contents of two segments of memory
CBrange,address x Compare the contents of two segments of memory (in bytes)
CWrange,address x Compare the contents of two segments of memory (in words)
CDrange,address x Compare the contents of two segments of memory (in double words)
CPrange,address x Compare the contents of two segments of memory (in far pointers)
--- Fill commands ---
F range,list - Fill data into memory
FBrange,list x Fill data into memory (in bytes)
FWrange,list x Fill data into memory (in words)
FDrange,list x Fill data into memory (in double words)
FPrange,list x Fill data into memory (in far pointers)
--- Search commands ---
S address list - Search for data in the specified memory
-Saddress list x Search for data in the specified memory and save the offset address of the (cx+1)th match in cx
SBaddress list x Search for data in the specified memory (in bytes) (-SB is as before)
SWaddress list x Search for data in the specified memory (in words) (-SW is as before)
SDaddress list x Search for data in the specified memory (in double words) (-SD is as before)
SPaddress list x Search for data in the specified memory (in far pointers) (-SP is as before)
--- Port I/O commands ---
I port - Input from I/O port
IB port x Input from I/O port (in bytes)
IW port x Input from I/O port (in words)
ID port x Input from I/O port (in double words) (supported above 386)
O port,value - Output to I/O port
OB port,value x Output to I/O port (in bytes)
OW port,value x Output to I/O port (in words)
OD port,value x Output to I/O port (in double words) (supported above 386)
--- Macro commands ---
-: + Clear all macros
:macroname + Define macro
= + List macro or execute macro
--- Disk I/O commands ---
N - Release parameters for the next disk operation
N? + Display parameters
N
- Specify file
L - Load file
Laddress - Load file to the specified memory address
W - Write memory to file, starting from cs:100 with length BX-CX
W - Write memory to file, starting from the specified address with length BX-CX
Laddress,drive,firstsec,number
- Load the specified logical sector to the specified memory (num = number of sectors to load)
Waddress,drive,firstsec,number
- Save the specified memory to the specified logical sector (num = number of sectors to save, or use BX-CX to specify its length - in bytes)
--- Trace commands ---
-B x Clear all breakpoints (translated as breakpoint, the same below)
-Baddress x Clear the breakpoint at the specified address
B + List breakpoints
Baddress]
+ Set breakpoint at the specified memory, interrupt every count times, interrupt condition: reg=val
T - Step through starting from the specified address for number instructions
TU + Same as T, but do not display the execution result of intermediate instructions
P - Same as T, but skip call and int subroutines
PU + Same as P, but do not display the execution result of intermediate instructions
G Execute starting from the specified address (or CS:IP), stop at
--- Assemble command ---
A - Enter the input assembly language mode (press Enter/. to exit), support comments
--- Unassemble commands ---
-Unumber x Set/query default unassemble length
U - Unassemble the specified memory instructions
--- Help commands ---
? - Display basic help
?topic + Display specific topic or page number (1..8)
?? or ?0 + Display all help
--- Display and input modes ---
A= x Set/query default address mode (16-bit/32-bit)
O= x Set/query default operand mode (16-bit/32-bit)
R= + Set/query default register display mode (16-bit/32-bit)
RF - Set/query flag register
RDR x Display flag register in 16-bit register mode (default in /X mode)
RMS x Display flag register in standard mode (default in /S mode)
--- Utility commands ---
ASCII + Display an ASCII table
CLS + Clear screen
CPU + Display CPU type (support up to Pentium pro) and working mode (real mode/32-bit protected mode/virtual 86 mode)
H value + Display ''value'' in hexadecimal, decimal, character, octal and binary
H value1 value2 + Display the results of adding, subtracting, multiplying, dividing and taking modulus of value1 and value2
V + Display the user screen (execution result of the program, just like in c)
; comment + Comment
我不能偷也不能搶

DigestI




