有关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命令格式为:

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)的更多相关文章

  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. 51nod1091(贪心)

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1091 题意:中文题诶- 思路:贪心: 我们先将数据按照左端点 ...

  2. 图解linux安装hadoop

    安装步骤: 一.准备工作 1.解压文件 [root@localhost soft]# tar -zxvf hadoop-2.4.1.tar.gz 2.改名: [root@localhost soft] ...

  3. [APIO2019T1]奇怪装置

    考古学家发现古代文明留下了一种奇怪的装置.该装置包含两个屏幕,分别显示两个整数x和y.经过研究,科学家对该装置得出了一个结论:该装置是一个特殊的时钟,它从过去的某个时间点开始测量经过的时刻数t,但该装 ...

  4. HDU1729 Stone Game

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1729 思路:理解错题目了,以为SG模板直接套就行了.后来队友说了那个ci是不断变化的.那么每次可以放的石头 ...

  5. 【SQL Server 优化性能的几个方面】(转)

    转自:http://blog.csdn.net/feixianxxx/article/details/5524819     SQL Server 优化性能的几个方面 (一).数据库的设计 可以参看最 ...

  6. Ubuntu ls可以查看到文件,图形界面却看不到

    解决方法:图形界面 Ctrl + h ,就可以显示出来隐藏文件

  7. Unity [RequireComponent(typeof(组件名))]

  8. iOS开发 - 3D Touch 应用系列一 - Quick Actions 创建桌面 Icon 快捷方式

    个言 很久没发随笔了,有一年多了吧.期间也曾想继续去写随笔,但是因为各种原因而耽搁了.最近又想了一下,还是有很多东西想要写,想要分享,想要记录下来的东西.之后我也会不断写随笔,但不止于 iOS 的方向 ...

  9. android 开发-Process and Thread

    目录 1 android中进程与线程 - Processes and Threads 1.1 进程 - Processes 1.1.1 进程的生命期 1.2 线程 - Threads 1.2.1 工作 ...

  10. android 开发DatePickerDialog/TimePickerDialog对话框的实现

    AndroidAPI提供了Dialog对话框控件,DatePickerDialog/TimePickerDialog均是AlertDialog的子类,通过DatePickerDialog/TimePi ...