8086汇编 DEBUG命令详解
DEBUG命令详解
- DEBUG程序的启动
- DEBUG主要命令
- 1.汇编命令 A
- 2.反汇编命令 U
- 3.运行命令 G
- 4.追踪命令 T
- 5.显示内存单元内容 D
- 6.修改内存单元内容 E
- 7.检查和修改寄存器内容 R
- ==标志位含义表==
- 8.命名命令 N
- 9.装入命令 L
- 10.写命令 W
- 11.退出命令 Q
DEBUG是专门为汇编语言设计的一种调试工具,它通过步进,设置断点等方式为汇编语言程序员提供了非常有效的调试手段。
笔者使用DOSBOX进行一些DEBUG指令的演示
DEBUG程序的启动
1.没有文件名,直接打开DEBUG
C:>DEBUG
段寄存器CS、DS、ES和SS置为DEBUG程序后的第一个段。指令指针寄存器IP置为100H(程序段前缀PSP后的第一个语句)。 堆栈指针SP置为段末或COMMAND.COM暂驻部分的结束地址(其中较小的那个地址)。
2.对指定可执行文件进行 DEBUG
C:>DEBUG NAME.EXE
DEBUG主要命令
1.汇编命令 A
使用格式 -A[地址]:由使用者输入汇编语句,DEBUG负责将它们汇编成机器代码相继存放在从指定地址开始的存储器中。
(这里DEBUG将我的四个汇编语句存在了内存中地址从 163B:1000 开始的几个字节中,前两句汇编语句都占了3个字节,加法语句占2个字节,最后一句汇编语句占了3个字节)
2.反汇编命令 U
(1)格式:-U [地址]该命令从指定地址开始,反汇编 (指把机器代码翻译成汇编语句)32个字节,若地址省略,则从上一个U命令的最后一条指令的下一个单元开始显示32个字节。
(反汇编了内存中163B:1000开始的32个字节的机器代码,得到的前四条语句即先前笔者使用-A命令汇编的四条汇编指令)
(取这段地址是因为DEBUG OUTPUT.EXE时发现代码段CS的地址就是从076D:0000,和本文末尾的output.asm中的源代码比较一下,已经成功的把我的源代码在汇编过程得到的机器代码反汇编成了汇编指令)
(2)第二种格式:-U [地址范围] 对该地址范围中的机器代码进行反汇编
3.运行命令 G
格式 -G 地址 显示执行到该地址时寄存器中的内容(相当于断点调试)
(这里我们还是调试OUTPUT.EXE,首先使用-R命令检查初始时的寄存器内容,我们现在只关注AX,DS寄存器,开始AX=FFFF,DS=075C,然后使用-G命令运行到076D:0003断点,此时AX=076C,DS=075C,这是因为程序至此已经将076C传送给AX寄存器,但还没有进行‘MOV DS,AX’ ,我们再使用-G命令运行到0005断点,此时DS=AX=076C,所以说这里-G起到了断点调试的效果)
4.追踪命令 T
(1)逐条指令追踪:-T[=地址] 从该地址开始执行一条指令停下来检查寄存器状态
(从076D:0000 开始执行一条指令后,我们的寄存器状态如上图所示)
(2)多条指令追踪:-T[=地址][值] 该命令从指定地址起执行n条命令后停下来,n由[值]确定。
(从076D:0000 开始执行5条指令后,我们的寄存器状态如上图所示,笔者注意到,这里完成第五条指令‘MOV AX ,02’后,AX并不是变成0002,而是从076C变成了026C,这是需要注意的)
5.显示内存单元内容 D
格式为 -D[地址]或-D[范围]
(OUTPUT.EXE的数据段寄存器DS=076C,所以我们检查这一部分内存单元的内容,这里‘123ABC’,是我们程序中在数据段定义的数据)
6.修改内存单元内容 E
(1)批量修改,-E 地址 内容表 将指定地址开始的内存单元中的内容替换成内容表中的内容:
(这里我们修改了数据段中的从076C:0010开始的几个字节的内容,其中1C ,8D ,‘H’,‘E’,‘L’,‘L’,‘O’各占一个字节,也就是说我们替换了076C:0010至0016总共7个字节的内容)
(2)单个修改,-E 地址
(这里我们修改了数据段中的从076C:0016这一个字节中的内容,把它从‘O’修改成了‘P’)
7.检查和修改寄存器内容 R
(1)显示CPU内部所有寄存器内容和标志位状态:
(参照下面的表,当前CPU标志寄存器中的含义为 OF=‘无溢出 ’DF=‘增量方向’IF=‘允许中断’ SF=‘正号’ZF=‘非零’ AF= ‘无辅助进位 ’PF=‘奇’CF= ‘无进位’)
标志位含义表
标志名 | 置位 | 复位 |
---|---|---|
溢出Overflow(是/否) | OV | NV |
方向Direction(减量/增量) | DN | UP |
中断Interrupt(允许/屏蔽) | EI | DI |
符号Sign(负/正) | NG | PL |
零Zero(是/否) | ZR | NZ |
辅助进位Auxiliary Carry(是/否) | AC | NA |
奇偶Parity(偶/奇) | PE | PO |
进位Carry(是/否) | CY | NC |
(2)显示和修改指定寄存器的内容:
-R 寄存器名
例如打入:-R AX
系统将可能响应如下:(当AX中值为FIF4时)
AX FIF4
表示AX当前内容为F1F4,此时若不对其作修改,可按ENTER键,否则,打入修改后内容,
如: -R BX
BX 0369 :059F
则BX内容由0369改为059F
(显示AX内容,按回车结束,不做修改)
(显示BX内容,并将其修改为002B)
(3)显示和修改标志位状态:(标志位含义参见上文中的‘标志位含义表’)
-RF
系统将给出响应,如
OV DN EI NG ZR AC PE CY-
这时若不作修改可按ENTER键,否则在“-”号之后键入修改值,键入顺序任意。如
OV DN EI NG ZR AC PE CY-PO NZ DI NV
(修改了OF,将OF置位)
8.命名命令 N
-N 文件名
此命令将文件名格式化在CS:5CH的文件控制块内,以便使用L或W命令把文件装入内存进行调试或者存盘。
9.装入命令 L
存盘。
(1)把磁盘上指定扇区的内容装入到内存指定地址起始的单元中,格式为:
-L 地址 驱动器 扇区号 扇区数
(2)装入指定文件,格式为:
-L [地址]
此命令装入已在CS:5CH中格式化的文件控制块所指定的文件。在用L命令前,BX和CX中应包含所读文件的字节数。
10.写命令 W
(1)把数据写入磁盘的指定扇区:
-W 地址 驱动器 扇区号 扇区数
(2)把数据写入指定文件中:
-W [地址]此命令把指定内存区域中的数据写入由CS:5CH处的FCB所规定的文件中。在用W命令前,BX和CX中应包含要写入文件的字节数。
11.退出命令 Q
退出DEBUG,该指令退出DEBUG程序,返回DOS,但该命令本身并不把在内存中的文件存盘,如需存盘,应在执行Q命令前先执行写命令W。
8086汇编 DEBUG命令详解相关推荐
- 汇编语言DEBUG命令详解||汇编命令||DEBUG的常用命令:A,U,R,T,D,E,Q 等等
汇编命令 汇编语言Debug命令详解 DEBUG的常用命令:A,U,R,T,D,E,Q 等等 汇编语言DEBUG命令详解 文章目录 汇编语言DEBUG命令详解 R命令的使用 H命令的使用 D命令的使用 ...
- DEBUG命令详解——计算机系统基础
启动DEBUG 1.打开Windows命令窗口 在Windows 95/98的环境中,打开命令窗口的步骤为:点击"开始"→"运行",输入"comman ...
- Debug命令详解(长期更新)
因为某些原因耽搁,一直在软件开发的大门前来来回回踱步,辜负了青春,辜负了她,深感岁月蹉跎,往事不再,唯恐留下遗憾却又无可奈何地做了一些无用的功夫,与其老大徒伤悲一顿感慨,不如给自己一个期限,努力努力, ...
- redis debug命令详解
redis debug命令提供了几个非常实用的debug功能,本文介绍下redis-2.8.19下的debug命令. debug segment 让redis发生段错误,如果开启了coredump,则 ...
- eigrp debug命令详解
1-Debug eigrp packets 跟踪egrip分组的发送和接收情况 拓扑图: 在R2上debugeigrp packets 2-Debug ip eigrp 可以使用这个命令来查看eigr ...
- 汇编语言DEBUG命令||常用命令 详解:A,U,R,T,D,E,Q
汇编命令 汇编语言Debug命令详解 DEBUG的常用命令:A,U,R,T,D,E,Q 等等 汇编语言DEBUG命令详解 文章目录 汇编语言DEBUG命令详解 R命令的使用 H命令的使用 D命令的使用 ...
- Windbg调试命令详解
Windbg调试命令详解 发表于2013 年 8 月 23 日 转载注明>> [作者:张佩][原文:http://www.yiiyee.cn/Blog] 1. 概述 用户成功安装微软Win ...
- linux系统make命令详解
无论是在Linux 还是在Unix环境 中,make都是一个非常重要的编译命令.不管是自己进行项目开发还是安装应用软件,我们都经常要用到make或make install.利用make工具,我们可以将 ...
- VCS命令详解(一):编译命令
VCS仿真命令详解 编译时候的命令(按字母排序) A B C D E F G H I J L M N O P Q R S T U V W Y 本文中所有命令基于VCS2014版 编译时候的命令(按字母 ...
最新文章
- pyautogui 的用法 python自动操作鼠标、键盘
- ASP.NET2.0轻松搞定统计图表
- CentOS7.6 Open vSwitch安装
- 域服务器怎么修改管理员密码,域服务器更改客户端管理员的密码
- bootstrap在ie8下,兼容媒体查询
- gitlab修改管理员密码流程
- IDEA快捷键显示重载
- apple pay php 文档,Apple Pay 终于可以支付 iTunes、App Store 中的内容了
- 关于MySql5“data too long for column”问题的探解
- Linux环境下rman备份的实例脚本
- jpa多表联查动态_Spring Data JPA 连表动态条件查询
- Linux shell__文件操作
- 百度全景地图使用时提示flash版本过低 如何处理?
- Root file specified for compilation Vetur
- HeadFirst设计模式笔记——工厂模式
- 2022年终极NFT课程
- attention方式的算法
- 2014年3I工作室成员的正式名单
- 小甲鱼第5章:列表、元组和字符串(半整理)
- datagrip连接mysql数据库失败