有关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的方法:

  1. 进入Linux的命令行终端
  2. 输入DOSemu进入DOS环境,DOSemu也有其他参数,可以输入dosemu --help查看
  3. 退出DOS环境,在DOS中输入命令exitemu
  4. 或者在桌面上双击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命令格式为:

  1. D 段地址:起始偏移地址 [结尾偏移地址] [L范围]

例如:

  1. D DS:0 查看数据段,从0号单元开始
  2. D ES:0 查看附加段,从0号单元开始
  3. D DS:100 查看数据段,从100H号单元开始
  4. D 0200:5 15 查看0200H段的5号单元到15H号单元(在虚拟机上该命令不能执行)
  5. D 0200:5 L 11 L选择范围。查看0200H段的5号单元到15H号单元共10个单元

其中左边一列为逻辑地址,中间部分为存储单元的内容。每行为16个字节单元,中间的小横线用于区分前8个单元和后8个单元。在逻辑地址中只给出每行第一个单元的偏移地址,其余15个单元的偏移地址没有标出。可以推断出图中第一行单元的偏移地址从0000H到000FH,第二行单元的偏移地址为0010H~001FH,以此类推。右边部分显示出内存单元中的ASCII码表示的字符,无法显示时用小点代替

如果在D后面直接写出偏移地址,则显示当前数据段下偏移地址开始的内存单元,如:

  1. D 10 从数据段10H号单元开始显示
  2. D100 从数据段100H号单元开始显示

注意:多次键入D,可连续显示后面的单元内容。

3. E命令——修改内存单元

用E命令可以改写多个存储单元的内容。格式为:E 起始地址 修改值 修改值 …

例如:将数据段中的DS:3~DS:5 三个单元的内容修改为14、15、16。命令为

  1. E DS:3 14 15 16

如果E后面直接跟偏移地址,则修改当前数据段下偏移地址所指单元值;还可以用E命令修改其它段的存储单元内容。

  1. E 10 修改当前数据段10H号单元内容
  2. E ES:100 修改附加段100H号单元内容
  3. D ES:100 查看一下100H单元的内容是否修改了

4. A 命令——输入汇编指令

输入汇编指令,系统自动地将键入的汇编指令翻译成机器代码,并相继地存放在从指定地址开始的存储区中。由于DEBUG下的数值默认为十六进制数,因此先要将十进制数转换成十六进制数。

例如,前一节提到的计算Z=35+27的汇编指令为:

  1. MOV AX,23H
  2. ADD AX,1BH
  3. MOV [0000],AX

输入A命令后,系统自动地给出逻辑地址为0AEE:0100(CS:偏移地址),在其后输入汇编指令,回车后可输入下一条指令,直接回车则退出输入。操作过程如下:

也可以在A命令后给出指令的存放地址,如A CS:0000,表示从代码段的0号单元开始存放输入的指令。

5. U命令 ——反汇编

程序员编写的汇编语言源程序经过汇编(编译)后生成了二进制的机器指令代码,而U命令可将二进制的机器指令变为助记符形式的汇编指令,因此称之为“反汇编”

通过U命令,我们可以得到机器指令与汇编指令的对照,了解机器指令的存储情况

第一列为逻辑地址,第二列为机器指令,第三列为汇编指令

注意:上图显示的程序代码并不是用户编写的程序,因为在输入DEBUG命令时没有附加exe文件。这段程序代码是系统代码段中保存的内容,有可能是系统程序,也有可能是无效的代码。

U后跟偏移地址,则从该地址开始反汇编。如:

  1. U 0 从代码段0号单元开始反汇编
  2. 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命令:

  1. -T 3

T命令也可以设置开始地址和执行条数。如上例中从0100H开始连续执行3条指令,可用如下T命令:

  1. -T =0100 3

7. G命令——连续执行程序

8. Q命令 ——退出DEBUG

键入Q,回车后退出DEBUG,返回到DOS下。

调试工具DEBUG的使用(8086)的更多相关文章

  1. Jmeter调试工具---Debug Sampler

    一.Debug Sampler介绍: 使用Jmeter开发脚本时,难免需要调试,这时可以使用Jmeter的Debug Sampler,它有三个选项:JMeter properties,JMeter v ...

  2. 在64位windows 7上安装汇编调试工具debug.exe的方法

    最近我在研究汇编,书中介绍的调试工具还是基于WinXP 32bit时代中自带debug.exe进行调试,但是64bit的Windows XP.Vista.Win7.Win8都已经不自带这个工具了,网上 ...

  3. Jmeter学习(三十三)调试工具Debug Sampler

    一.Debug Sampler介绍: 使用Jmeter开发脚本时,难免需要调试,这时可以使用Jmeter的Debug Sampler,它有三个选项:JMeter properties,JMeter v ...

  4. JMeter调试工具--Debug Sampler(转载)

    转载自 http://www.cnblogs.com/fengpingfan Debug Sampler添加路径:[添加 / Sampler / Debug Sampler],面板设置如下: 打开JM ...

  5. Jmeter学习(三十二)调试工具Debug Sampler(转载)

    转载自 http://www.cnblogs.com/yangxia-test 一.Debug Sampler介绍: 使用Jmeter开发脚本时,难免需要调试,这时可以使用Jmeter的Debug S ...

  6. jmeter(十九)调试工具Debug Sampler

    一.Debug Sampler介绍: 使用Jmeter开发脚本时,难免需要调试,这时可以使用Jmeter的Debug Sampler,它有三个选项:JMeter properties,JMeter v ...

  7. 汇编语言学习-Dos下的调试工具debug的使用教程

    1.常用的debug功能 (1)用Debug的R命令查看.改变CPU寄存器内容: (2)用Debug的D命令查看内存中的内容: (3)用Debug的E命令查看内存中的内容: (4)用Debug的U命令 ...

  8. Jmeter(八)调试工具Debug Sampler

    使用Jmeter开发脚本时,难免需要调试,这时可以使用Jmeter的Debug Sampler,它可以输出Jmeter的变量.属性甚至是系统属性而不用发送真实的请求到服务器 JMeter proper ...

  9. 汇编学习笔记——DOS及DEBUG介绍

    转自:https://www.shiyanlou.com/courses/running/332 一.课程简介 声明:该课程基于<汇编语言(第2版)>郑晓薇 编著,机械工业出版社.本节实验 ...

随机推荐

  1. 51nod1347(简单逻辑)

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1347 题意:中文题诶- 思路:稍推理一下就可以发现字符串a是 ...

  2. 莫队算法-小Z的袜子

    小Z的妹子袜子这道题用的是莫队算法,据说解决离线区间询问几乎无敌. 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于 ...

  3. 洛谷P1033 自由落体

    P1033 自由落体 题目描述 在高为 H 的天花板上有 n 个小球,体积不计,位置分别为 0,1,2,….n-1.在地面上有一个小车(长为 L,高为 K,距原点距离为 S1).已知小球下落距离计算公 ...

  4. windows系统IIS7环境下如何部署MVC项目

    首先打开IIS:第一步:添加MVC程序映射 打开其中的:处理程序映射,如下图: 点击界面右边操作中的:添加脚本映射,弹出下图: 请求路径:*           可执行文件:c:/Windows/Mi ...

  5. 统计分析: 跨库多表join

    mysql中如果多个库在一个实例上, 可以进行多表的跨库Join, 但是如果后期数据库分隔到不同的实例机器上,有查询问题 mysql的查询优化器没有其他商业数据库做的好, 用来CRUD还行, 但是做大 ...

  6. Appium+Python入门学习总结

    最近研究了一下Appium,查看了一些大神的博客,绕过了一些坑,现将从搭建环境到运行真机测试的流程总结如下: 一.搭建环境,这里我参考了虫师的博客,一步一步来,搭好了Appium的环境,如果需要真机测 ...

  7. SGU - 409

    题目链接:https://vjudge.net/contest/239445#problem/H 题目大意:输入n,k,有n*n* n*n的网格,要求每行每列刚好有k个*,每n*n的小方格内也刚好有k ...

  8. Maven的学习资料收集--(十)Myeclipse下创建Maven的Web项目

    先要在MyEclipse中对Maven进行设置: 到此Maven对MyEclipse的支持设置完毕.   下面我们在MyEclipse中创建一个Maven标准的Web工程: New --> We ...

  9. Docker | 第二章:第一个Docker应用

    前言 上一章节,已经简单讲解了Docker相关方面的知识,相信大家已经有个概念了.这章节开始,开始进行实践操作.和学习任何一门语言一样,我们今天也开始从Hello,World开始~ 对Docker不了 ...

  10. cucumber的hooks

    引用链接:https://github.com/cucumber/cucumber/wiki/Hooks Hooks Cucumber provides a number of hooks which ...