立德树人的教育理念:masm调试程序步骤及debug命令

来源:百度文库 编辑:偶看新闻 时间:2024/04/28 22:22:59

MASM调试程序使用步骤

1、在运行中输入cmd,进入DOS界面
2、输入edit c:\abc.asm 编辑程序文件
3、通过 “cd 目录” 到指定masm目录 
4、masm 文件名.asm (汇编),生成obj文件
5、link 文件名.obj(链接),生成可执行文件
6、 文件名.exe(执行)

DEBUG及其常用命令

转帖[http://wwdyjdx.blog.163.com/blog/static/163401212006101413352405/]

一 DEBUG简介

DEBUG是DOS的一个外部命令, 其命令格式为:

[path]DEBUG [filename] [parm1] [parm2]

[path]是DEBUG命令在磁盘上的路径

filename是要用DEBUG来处理的文件的名字, 它包括文件的盘符、路径、 文件主名和扩展名。

参数parm1和parm2是文件filename运行时使用的参数。

当启动DEBUG时, 将对CPU的各寄存器进行初始化:

1. 如果启动时指定的filename是.EXE文件, 则DEBUG启动后将自动把指定的文件装入内存, 并置:

CS为程序代码段段地址

IP为第一条要执行指令的偏移地址

SS为堆栈段段地址

SP为堆栈底部+1单元的偏移地址

DS和ES是装入文件前第一个可用内存段的段地址(即DEBUG程 序后的第一个段地址)

标志寄存器的所有标志位为0

BX(0)和CX是装入的文件长度

其余寄存器为0。

2. 如果启动DEBUG时指定的文件filename不是.EXE文件, 则DEBUG 将把文件装入内存, 并置:

四个段寄存器为DEBUG程序后面的第一个段地址

IP指向100H

SP指向这个段的段尾

标志寄存器的所有标志位为0

BX和CX是装入的文件长度

其余寄存器为0。

3. 如果启动DEBUG时不指定filename, 则只是把CPU 的各寄存器进行初始化, 初始化结果与上述的第2点相同。这时要想显示、修改文件,可以用DEBUG的子命令装入文件。

二 。DEBUG的命令

DEBUG的命令都用单个字母表示, 其后可跟一个或多个参数, 参数之间用空格或逗号分隔。

DEBUG的命令参数大多数是地址或地址范围, 其地址书写格式为:

[段地址:]偏移地址

其中的段地址可以用段寄存器名表示, 也可以用一个十六进制数表示。

如: ES:100 43A5:200

地址范围的书写格式为:

Ⅰ. [段地址:]起始偏移地址 终止偏移地址

Ⅱ. [段地址:]起始领衔地址 L长度

如: CS:100 10F和CS:100 L10所指的地址范围是一致的。

当输入的命令不正确时, DEBUG将在该行底下指出错误所在。

注意: 在DEBUG下, 输入的数据和显示的数据都是十六进制数,不用在数据后加“H”。
A 汇编与反汇编命令

1.汇编命令A

格式: A [地址]

功能:从键盘输入汇编程序, 并逐条地把汇编指令翻译成机器代码指令存入对应内存单元。

说明: 如果不指定汇编地址, 则以CS:IP为地址

2. 反汇编命令U

格式: U [地址]/[地址范围]

功能: 将指定地址范围内的机器代码翻译成汇编源程序指令显示出来, 并同时显示地址及代码。

注意: 反汇编时一定确认指令的起始地址, 否则得不到正确的结果。

B 显示与修改内存单元内容的命令

1. 显示内存单元内容命令D

格式1: D [地址]

格式2: D 地址范围

说明: D命令在屏幕上显示的内容分为三部分, 左边是每一行存储单元的起始地址, 中间是各字节单元的内容, 右边是各单元内容对应的ASCII码字符( 不可显示的字符用"."代替)。

2. 修改内存单元内容命令E

格式1: E 地址 内容表

说明: 内容表可以是以逗号或空格分隔的两位16进制数, 也可以是用单引号''或双引号""括起来的字符串, 还可以是二者的组合。

格式2: E 地址

说明: 在修改数据时可用以下键进行不同操作:

1)键入空格键。修改后一个字节单元的内容。

2) 输入减号"-"。另起一行, 修改前面一个字节单元的内容。

3) 输入回车键, 结束内存单元的修改。

3. 填充内存命令F

格式: F 地址范围 内容表

功能: 将<内容表>的值逐个填入指定地址范围, 内容表中的内容用完后再重复使用。

C。显示与修改寄存器内容的R命令

格式1: R

功能: 显示当前所有寄存器内容, 状态标志及将要执行的下一条指令的地址、代码和汇编指令形式。

格式2: R 寄存器名

功能: 显示并修改指定寄存器的内容

D。运行和跟踪命令

1. 运行程序命令G

格式: G [=起始地址] [断点地址]

功能: 从起始地址开始执行程序, 直到程序结束或遇到断点地址为止。

说明: 如果不指定起始地址, 则从CS:IP处开始执行。

如果程序执行到结束,则显示"Program terminated normally"(程序正常结束)。如果遇到断点, 则程序停止执行, 并显示当时各寄存器的内容 和下一条要执行的指令。

2. 跟踪运行命令T

格式: T [=起始地址] [指令条数]

功能: 逐条跟踪程序的运行, 同时显示出各寄存器的内容、状态标志和下一条要执行的指令, 当执行够指定的指令数后就暂停程序的运行。

说明: 如果不指定起始地址, 则从CS:IP处开始执行。

不指定指令条数时, 认为只执行一条指令。

3. 继续命令P

格式: P [=起始地址] [指令条数]

功能: 与T命令一样完成跟踪程序的运行, 但遇到子程序、中断程序、循环时并不跟踪下去, 而是把它们当作一条指令来执行。

E。磁盘读写命令

1. 文件命名命令N

格式: N 文件名

功能: 指定要装入内存或写到磁盘的文件的名字(包括盘符和路径)。

2. 装入命令L

格式: L [地址] [驱动器号 扇区号 扇区数]

功能: 把指定文件或磁盘扇区的内容装入到内存指定地址

说明: 地址的默认值为CS:100。

驱动器号用0表示A盘, 1表示B盘, 2表示C盘。

3. 写磁盘命令W

格式: W [地址] [驱动器号 扇区号 扇区数]

功能: 将指定内存地址的一片单元内容写到磁盘中。

说明: 地址的默认值为CS:100。

要将内存内容写入文件时, 必须先用N命令命名一个文件,并置BX和CX为文件长度。

注意: W命令不能写入以.EXE和.HEX为扩展名的文件。

F。DEBUG的其它命令

1. 移动内存命令

格式: M 源地址范围 目标起始地址

功能: 把<源地址范围>中的内容顺序移到<目标起始地址>起的一片连续内存单元。

注意: 源区域的数据不因移动而消失, 其内容仍保持不变。

源、目标中的地址只要不指定段地址, 则都是隐含使用DS段。

2. 比较命令C

格式: C 源地址范围 目标起始地址

功能: 从<源地址范围>的起始地址单元开始, 逐个与<目标起始地址>后的单元的内容顺序进行比较, 直到源终止地址为止。遇到不相同时显示出它们的地址和内容: 源地址 源内容 目标内容 目标地址

3. 查找命令S

格式: S 地址范围 要查找的内容

功能: 在指定的地址范围内查找指定的内容, 若找到则显示出它们所

处的地址, 否则不显示任何信息。

4. 十六进制算术运算命令H

格式: H 值1 值2

功能: 显示十六进制数<值1>与<值2>的和差的结果。

5. 退出DEBUG命令Q
格式: Q
功能: 结束DEBUG程序, 返回到DOS提示符下。
注意: Q命令并不把内存中正在工作的文件存盘