debug 的基本用法
接下来,来讲述一下 debug 的基本用法
debug 基本指令 | 指令全称 | 用法 | 用途 |
---|---|---|---|
? | ---------- | ? | 显示debug的命令列表 |
A | assemble | A [ address ] | 将输入源程序的指令汇编成目标代码并从指定的地址单元开始存放。若省缺起始地址,则从当前CS:100地址开始存放。A命令按行汇编,主要用于小段程序的汇编或对目标程序的修改 |
C | compare | C range address | 比较内存的两个部分 |
D | dump | D [ range ] | 显示部分内存的内容 |
E | enter | E address [ list ] | 从指定地址开始,将数据输入 |
F | fill | F range list | 使用指定值填充一段内存 |
G | go | G [ = address ] [ addresses ] | 运行在内存中的可执行文件 |
H | hex | H value1 value2 | 执行十六进制运算 |
I | input | I port | 显示来自特定端口的 1 字节值 |
L | load | L [ address ] [driver ] [ firstsector ] [ number ] | 将文件或磁盘扇区内容加载到内存 |
M | move | M range address | 复制内存块中的内容 |
N | name | N [ pathname ] [ arglist ] | 指定 Debug l(加载)或 w(写入)命令的可执行文件的名称,或者指定正在调试的可执行文件的参数 |
O | output | O port byte | 向输出端口发送 1 个字节的值 |
P | proceed | P [ =address ] [ number ] | 执行循环、重复的字符串指令、软件中断或子例程;或通过任何其他指令跟踪 |
Q | quit | Q | 退出 debug会话,不保存当前测试文件 |
R | register | R [ register ] | 若给出寄存器名,则显示该寄存器的内存并可进行修改。缺省寄存器名,则显示所有寄存器的内容及当前值( 不能修改 ) |
S | search | S range list | 在部分内存中搜索一个或多个字节值的模式 |
T | trace | T [ =address] [ value ] | 执行一条指令,然后显示所有寄存器的内容、所有标志的状态和Debug下一步要执行的指令的解码形式 |
U | unassemble | U [ range ] | 反汇编字节并显示相应的原语句 |
W | write | W [address ] [ drive ] [ firstsector ] [ number ] | 将测试文件写入磁盘 |
XA | allocate expanded memory | XA [ # pages ] | 分配扩展内存 |
XD | deallocate expanded memory | XD [ handle ] | 释放扩展内存 |
XM | map expanded memory pages | XM [ Lpage ] [ Ppage ] [ handle ] | 映射扩展内存页 |
XS | display expanded memory status | XS | 显示扩展内存的状态 |
以上便是debug的简介。
学习汇编语言并且调用debug调试的时候,主要使用到 -L -U -D -G -T -P 指令
-L 装入 -G 运行 -U 反汇编 -T 单步(可以进入子程序) -P 单步(不进入子程序)-D 查询内存
汇编语言程序建立步骤:
- edit 建立源文件 格式:edit xxx.asm ( 必须以 asm 为扩展文件名,否则不能使用 masm 调用 ),生成 obj 文件。
- masm 生成链接文件 格式:masm xxx.asm 然后生成 obj 文件,obj 文件是可连接文件,接下来需要使用link链接文件生成exe
- link 生成 exe 文件 格式:link xxx.obj 生成 exe 可执行文件