调试工具DEBUG的使用(8086)
有关CPU和存储单元的概念在前一节我们已经了解,那么如何观察实际机器内部的情况呢?能不能看到具体的寄存器、标志、存储单元的内容呢?可不可以修改和控制它们呢?
DEBUG这个有力工具,就可以深入到机器内部进行观察了。
调试工具DEBUG
在DOS操作系统和Windows操作系统中,都提供了调试工具DEBUG。DEBUG是为汇编语言设计的一种调试工具。
1. DEBUG的主要命令
DEBUG命令有20多个,我们主要学习最常用的命令。
- R ——查看和修改寄存器
- D ——查看内存单元
- E ——修改内存单元
- U ——反汇编,将机器指令变为汇编指令
- T /P——单步执行
- G ——连续执行程序
- A ——输入汇编指令
- Q ——退出
2. 进入DOS
DEBUG要先进入DOS环境中再使用,linux虚拟环境中进入DOS的方法:
- 进入Linux的命令行终端
- 输入
DOSemu
进入DOS环境,DOSemu
也有其他参数,可以输入dosemu --help
查看 - 退出DOS环境,在DOS中输入命令
exitemu
- 或者在桌面上双击dosemu图标,直接进入DOS
基本的DOS命令:
- cd\ ——首先要用cd\ 退回到根目录C>下
- dir ——显示文件列表
- md hb ——建立hb子目录
- cd hb ——进入hb子目录
- copy d:\dos\masm.exe c:\hb ——将D盘dos目录下的masm.exe拷贝到C盘hb目录下
- copy d:\dos\link.exe c:\hb ——将D盘dos目录下的link.exe拷贝到C盘hb目录下
- cd .. ——退回到上一级目录
- del \hb\masm.exe ——删除hb子目录中的某文件
- rd hb ——删除hb子目录(子目录中的所有文件必须先删除)
- e:——进入e盘
- cls ——清屏
- type——显示文本文件内容(如type c:\hb\abc.asm)
DOS和DEBUG命令都支持大小写。
3. 进入DEBUG
要观察计算机内部的情况,可直接进入DEBUG。如果要调试及观察可执行文件,则要在DEBUG后加上文件名和扩展名.EXE。我们先观察,因此直接键入DEBUG
进入系统,如图所示。
DEBUG的提示符是小短线- ,在其后输入命令。
1. R命令——查看和修改寄存器
R命令有两种用法:直接键入R——将显示CPU所有的寄存器和标志位;
修改寄存器——在R后跟写寄存器名,回车后先显示寄存器的内容,在冒号后键入新的值;再用R命令就可看到修改后的内容了。将AX寄存器的值改为1234H。
再来看四个段寄存器DS、ES、SS、CS的值都是07BE,说明现在系统处在同一个逻辑段中(不同的系统环境下,段寄存器的值可能不一样)。操作系统根据内存的情况为各段分配段地址,因此每台机器或每次运行时段地址值可能会不一样。
IP指令指针寄存器的值是0100H,表示将要执行的指令在代码段的0100H单元中。该指令单元的逻辑地址应该由CS:IP构成,即0AFA:0100H。
我们来看在寄存器的下面那一行的表示。该行显示的是代码段的一条指令的反汇编。所谓反汇编,指的是将二进制的机器指令显示成汇编指令。由三部分构成:最左边07BE:0100表示该指令所在单元的逻辑地址,中间F60000表示该指令的机器码,第3列显示为汇编指令TEST。
2. D命令——查看内存单元
内存每16个字节单元为一小段,逻辑段必须从小段的首址开始。用D命令可以查看存储单元的地址和内容。
D命令格式为:
- D 段地址:起始偏移地址 [结尾偏移地址] [L范围]
例如:
- D DS:0 查看数据段,从0号单元开始
- D ES:0 查看附加段,从0号单元开始
- D DS:100 查看数据段,从100H号单元开始
- D 0200:5 15 查看0200H段的5号单元到15H号单元(在虚拟机上该命令不能执行)
- D 0200:5 L 11 用L选择范围。查看0200H段的5号单元到15H号单元共10个单元
其中左边一列为逻辑地址,中间部分为存储单元的内容。每行为16个字节单元,中间的小横线用于区分前8个单元和后8个单元。在逻辑地址中只给出每行第一个单元的偏移地址,其余15个单元的偏移地址没有标出。可以推断出图中第一行单元的偏移地址从0000H到000FH,第二行单元的偏移地址为0010H~001FH,以此类推。右边部分显示出内存单元中的ASCII码表示的字符,无法显示时用小点代替。
如果在D后面直接写出偏移地址,则显示当前数据段下偏移地址开始的内存单元,如:
- D 10 从数据段10H号单元开始显示
- D100 从数据段100H号单元开始显示
注意:多次键入D,可连续显示后面的单元内容。
3. E命令——修改内存单元
用E命令可以改写多个存储单元的内容。格式为:E 起始地址 修改值 修改值 …
例如:将数据段中的DS:3~DS:5 三个单元的内容修改为14、15、16。命令为
- E DS:3 14 15 16
如果E后面直接跟偏移地址,则修改当前数据段下偏移地址所指单元值;还可以用E命令修改其它段的存储单元内容。
- E 10 修改当前数据段10H号单元内容
- E ES:100 修改附加段100H号单元内容
- D ES:100 查看一下100H单元的内容是否修改了
4. A 命令——输入汇编指令
输入汇编指令,系统自动地将键入的汇编指令翻译成机器代码,并相继地存放在从指定地址开始的存储区中。由于DEBUG下的数值默认为十六进制数,因此先要将十进制数转换成十六进制数。
例如,前一节提到的计算Z=35+27的汇编指令为:
- MOV AX,23H
- ADD AX,1BH
- MOV [0000],AX
输入A命令后,系统自动地给出逻辑地址为0AEE:0100(CS:偏移地址),在其后输入汇编指令,回车后可输入下一条指令,直接回车则退出输入。操作过程如下:
也可以在A命令后给出指令的存放地址,如A CS:0000,表示从代码段的0号单元开始存放输入的指令。
5. U命令 ——反汇编
程序员编写的汇编语言源程序经过汇编(编译)后生成了二进制的机器指令代码,而U命令可将二进制的机器指令变为助记符形式的汇编指令,因此称之为“反汇编”。
通过U命令,我们可以得到机器指令与汇编指令的对照,了解机器指令的存储情况
第一列为逻辑地址,第二列为机器指令,第三列为汇编指令
注意:上图显示的程序代码并不是用户编写的程序,因为在输入DEBUG命令时没有附加exe文件。这段程序代码是系统代码段中保存的内容,有可能是系统程序,也有可能是无效的代码。
U后跟偏移地址,则从该地址开始反汇编。如:
- U 0 从代码段0号单元开始反汇编
- U100 从代码段100H号单元开始反汇编
注意:多次键入U,可连续显示后面的程序部分。
6. T/P命令——单步执行
输入完指令后,应该执行它。
T命令可以一条一条地执行指令,相当于逐过程调试。
P命令的作用与T命令相同,当遇到中断指令INT n和调用指令CALL时,会进入子程序,相当于逐语句调试。
下面执行第四步中的汇编指令:
本次执行前,先用R命令查看指令指针寄存器IP的值是否为0100,如果不是,用R IP命令修改为0100。表示现在要从CS:0100单元开始执行指令。
T命令每执行一次,都会显示当前寄存器的状况,我们可以随时了解指令的执行情况。
用D DS:0命令查看该单元的值已经为003B(两个字节单元为一个字单元),这里类似大端法,高位在高地址,低位在低地址。
T命令还可以连续执行多条指令。如上例中连续执行3条指令,可用如下T命令:
- -T 3
T命令也可以设置开始地址和执行条数。如上例中从0100H开始连续执行3条指令,可用如下T命令:
- -T =0100 3
7. G命令——连续执行程序
8. Q命令 ——退出DEBUG
键入Q,回车后退出DEBUG,返回到DOS下。
调试工具DEBUG的使用(8086)的更多相关文章
- Jmeter调试工具---Debug Sampler
一.Debug Sampler介绍: 使用Jmeter开发脚本时,难免需要调试,这时可以使用Jmeter的Debug Sampler,它有三个选项:JMeter properties,JMeter v ...
- 在64位windows 7上安装汇编调试工具debug.exe的方法
最近我在研究汇编,书中介绍的调试工具还是基于WinXP 32bit时代中自带debug.exe进行调试,但是64bit的Windows XP.Vista.Win7.Win8都已经不自带这个工具了,网上 ...
- Jmeter学习(三十三)调试工具Debug Sampler
一.Debug Sampler介绍: 使用Jmeter开发脚本时,难免需要调试,这时可以使用Jmeter的Debug Sampler,它有三个选项:JMeter properties,JMeter v ...
- JMeter调试工具--Debug Sampler(转载)
转载自 http://www.cnblogs.com/fengpingfan Debug Sampler添加路径:[添加 / Sampler / Debug Sampler],面板设置如下: 打开JM ...
- Jmeter学习(三十二)调试工具Debug Sampler(转载)
转载自 http://www.cnblogs.com/yangxia-test 一.Debug Sampler介绍: 使用Jmeter开发脚本时,难免需要调试,这时可以使用Jmeter的Debug S ...
- jmeter(十九)调试工具Debug Sampler
一.Debug Sampler介绍: 使用Jmeter开发脚本时,难免需要调试,这时可以使用Jmeter的Debug Sampler,它有三个选项:JMeter properties,JMeter v ...
- 汇编语言学习-Dos下的调试工具debug的使用教程
1.常用的debug功能 (1)用Debug的R命令查看.改变CPU寄存器内容: (2)用Debug的D命令查看内存中的内容: (3)用Debug的E命令查看内存中的内容: (4)用Debug的U命令 ...
- Jmeter(八)调试工具Debug Sampler
使用Jmeter开发脚本时,难免需要调试,这时可以使用Jmeter的Debug Sampler,它可以输出Jmeter的变量.属性甚至是系统属性而不用发送真实的请求到服务器 JMeter proper ...
- 汇编学习笔记——DOS及DEBUG介绍
转自:https://www.shiyanlou.com/courses/running/332 一.课程简介 声明:该课程基于<汇编语言(第2版)>郑晓薇 编著,机械工业出版社.本节实验 ...
随机推荐
- 51nod1347(简单逻辑)
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1347 题意:中文题诶- 思路:稍推理一下就可以发现字符串a是 ...
- 莫队算法-小Z的袜子
小Z的妹子袜子这道题用的是莫队算法,据说解决离线区间询问几乎无敌. 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于 ...
- 洛谷P1033 自由落体
P1033 自由落体 题目描述 在高为 H 的天花板上有 n 个小球,体积不计,位置分别为 0,1,2,….n-1.在地面上有一个小车(长为 L,高为 K,距原点距离为 S1).已知小球下落距离计算公 ...
- windows系统IIS7环境下如何部署MVC项目
首先打开IIS:第一步:添加MVC程序映射 打开其中的:处理程序映射,如下图: 点击界面右边操作中的:添加脚本映射,弹出下图: 请求路径:* 可执行文件:c:/Windows/Mi ...
- 统计分析: 跨库多表join
mysql中如果多个库在一个实例上, 可以进行多表的跨库Join, 但是如果后期数据库分隔到不同的实例机器上,有查询问题 mysql的查询优化器没有其他商业数据库做的好, 用来CRUD还行, 但是做大 ...
- Appium+Python入门学习总结
最近研究了一下Appium,查看了一些大神的博客,绕过了一些坑,现将从搭建环境到运行真机测试的流程总结如下: 一.搭建环境,这里我参考了虫师的博客,一步一步来,搭好了Appium的环境,如果需要真机测 ...
- SGU - 409
题目链接:https://vjudge.net/contest/239445#problem/H 题目大意:输入n,k,有n*n* n*n的网格,要求每行每列刚好有k个*,每n*n的小方格内也刚好有k ...
- Maven的学习资料收集--(十)Myeclipse下创建Maven的Web项目
先要在MyEclipse中对Maven进行设置: 到此Maven对MyEclipse的支持设置完毕. 下面我们在MyEclipse中创建一个Maven标准的Web工程: New --> We ...
- Docker | 第二章:第一个Docker应用
前言 上一章节,已经简单讲解了Docker相关方面的知识,相信大家已经有个概念了.这章节开始,开始进行实践操作.和学习任何一门语言一样,我们今天也开始从Hello,World开始~ 对Docker不了 ...
- cucumber的hooks
引用链接:https://github.com/cucumber/cucumber/wiki/Hooks Hooks Cucumber provides a number of hooks which ...