汇编语言ch2_2 汇编语言中的debug

news2024/11/17 9:32:55

使用debug 可以完成以下功能:

  1. 可以查看 和改变 CPU 中,寄存器的内容;
  2. 可以查看 和改变内存中的内容;
  3. 可以将内存中的 机器指令 翻译成汇编指令
  4. 使用汇编指令 在 内存中 存入 机器指令
  5. 执行机器指令

首先,启动 Debug,在DOS提示符下输入命令:debug

  1. debug 中,不区分大小写

  2. 注意,DEBUG 下的数据都是十六进制数

  3. 查看内存地址时, 当输入的地址数据不足 4位时, 默认是从高位开始补零的;

在这里插入图片描述

1. 寄存器中的数据

1.1 查看寄存器中的内容

直接键入 R —— 将显示 CPU 所有的寄存器和标志位;

观察下图可知:

四个段寄存器 DS、ES、SS、CS 的值都是 0740H,说明现在系统处在同一个逻辑段中(不同的系统环境下,段寄存器的值可能不一样,dosemu 虚拟机中为 07BEH)。

  • 操作系统根据内存的情况为各段分配段地址,因此每台机器或每次运行时段地址值可能会不一样。

  • IP 指令指针寄存器的值是 0100H,表示将要执行的指令在代码段的 0100H 单元中。

  • 该指令单元的逻辑地址应该由 CS:IP 构成,即 0740:0100H。

1.2 修改寄存器中的内容

  1. 在 R 后跟写寄存器名(比如 R AX),
  2. 回车后先显示寄存器的内容,
  3. 在冒号后键入新的值;

注意,DEBUG 下的数据都是十六进制数
在这里插入图片描述
再用 R 命令就可看到修改后的内容了。

2. 内存中的数据

2.2 查看内存中的内容

  • D - 列出预设地址内存处的128个字节的内容

注意, 最开始列出的 内存的 地址处, 默认是从 cs: ip 所指向的 内存地址,
即当前 需要执行指令的 开始处 ;

  • D 段地址:偏移地址 - 列出内存中指定地址处的内容

  • D 段地址:偏移地址 结尾偏移地址 代表: 列出内存中指定地址范围内的内容

在这里插入图片描述

2.3 修改内存中的内容

按照顺序 逐个修改的方式,

  • E 段地址:偏移地址 数据1 数据2 …
    在这里插入图片描述

另外一种逐个修改的方式, 适用于指定内存单元处的修改:

  • E 段地址:偏移地址
  • 逐个询问式修改
  • 空格 - 接受,继续
  • 回车 - 结束
    在这里插入图片描述

3. 返回汇编: 机器指令翻译成汇编指令

首先将以下 机器指令写入到 内存单元中的 cs: ip 开始的地方:
:对应的机器码为
B8 23 01
BB 03 00
89 D8
01 D8
查看 内存中 写入结果,如上图所示

3.1 机器码 对应的汇编指令

然后, 用u命令可以查看内存中机器指令所对应的汇编指令。

在这里插入图片描述

:有汇编指令
mov ax, 0123H
mov bx, 0003H
mov ax, bx
add ax, bx

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

U 0       从代码段0号单元开始反汇编
U100     从代码段100H号单元开始反汇编

3.2 机器指令与汇编指令的对应关系

注意, 用 r 命令查看 时,
最后一行, 显示的 cs:ip 当前 cpu 将要执行的下一个指令, 该指令的地址, 对应的机器码, 以及对应的汇编指令;

在这里插入图片描述

在这里插入图片描述

我们来看在寄存器的下面那一行的表示。该行显示的是代码段的一条指令的反汇编。

  • 所谓反汇编,指的是将二进制的机器指令显示成汇编指令。

  • 由三部分构成:最左边 07BE:0100 表示该指令所在单元的逻辑地址,中间 F60000 表示该指令的机器码,第 3 列显示为汇编指令 TEST BYTEPTR [BX+SI],00,该指令为 TEST 测试指令。

通过 DEBUG,我们就可知道一条汇编指令翻译成机器代码是什么值了;反之也一样,对一条机器指令也可得知它代表什么汇编指令。

如图中的, 标志寄存器的最高位 是 溢出标志, 此时的状态是 NV ,代表此时值为0;
在图的最右边显示的是 CPU 标志寄存器各标志位的状态,可对照表 2-1 观察一下现在系统的状态。

在这里插入图片描述

4. 汇编指令写入内存中

用A命令以汇编指令的格式在内存中写入机器指令;
回车后可输入下一条指令,直接回车则退出输入。

:有汇编指令
mov ax, 0123H
mov bx, 0003H
mov ax, bx
add ax, bx
在这里插入图片描述

注意, 用 r 命令查看 时,
最后一行, 显示的 cs:ip 当前 cpu 将要执行的下一个指令, 该指令的地址, 对应的机器码, 以及对应的汇编指令;

:对应的机器码为
B8 23 01
BB 03 00
89 D8
01 D8

5. 执行指令

5.1 t 执行指令

用T命令执行机器指令;
在这里插入图片描述

T 命令每执行一次,都要显示当前寄存器的状况,我们可以随时了解指令的执行情况。

T 命令还可以连续执行多条指令。如上例中连续执行 3 条指令,可用如下 T 命令:

-T 3

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

-T =0100  3

5.2 p 执行指令

P 命令的作用与 T 命令相同,当遇到中断指令 INT n 和调用指令CALL时,应该使用 P 命令,以确保程序正常执行。这是因为INT n指令和 CALL 指令都要转移到子程序去执行,T 命令进入子程序后可能无法返回;而 P 命令则直接执行该指令,并将结果带回。遇到循环指令 LOOP 时也应该使用 P 命令,可以使循环快速结束。

5.3 G 命令——连续执行程序

有关连续执行命令 G 的用法我们放到后面章节中学习

q - 退出Debug

6. 小结

在 DOS 操作系统和 Windows 操作系统中,都提供了调试工具 DEBUG。

DEBUG 是为汇编语言设计的一种调试工具,它通过单步、设置断点等方式为程序员提供了非常有效的调试手段。利用它可以观察和修改 CPU 的寄存器、内存单元;可以跟踪程序的运行,发现程序的错误。

实验楼环境中采用 dosemu 来模拟 DOS 环境,进入 DOS 环境中可以直接启动 DEBUG 程序。

DEBUG 命令有 20 多个,我们主要学习最常用的命令。

注意:DOS 和 DEBUG 命令都支持不区分大小写。

R ——查看和修改寄存器
D ——查看内存单元
E ——修改内存单元
U ——反汇编,将机器指令变为汇编指令
T / P ——单步执行
G ——连续执行程序
A ——输入汇编指令
Q ——退出
  • 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)

6.2 内容解释

在这里插入图片描述
其中左边一列为逻辑地址,中间部分为存储单元的内容。

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

  • 图中第一条 D 命令: d ds:0 显示的是数据段存储单元的内容,可以看到数据段的段地址为 DS,其值 0B05H。

    0 号单元的内容为 CDH,1 号单元为 20H ,…,第 15 号单元的内容为 03H;第二行 0010H 号(16 号)单元的内容为 69H,它是小写字母 i 的 ASCII 码,因此右边区域中显示了 i ,表示该单元的值 69H 可以看成 ASCII 码。

  • 第二条 D 命令: d 0200:0 显示 0200H 段中的内容,也是从 0 号单元开始。

  • 第三条 D 命令: d 0200:5 15从 0200H 段的 5 号单元开始显示直到 15H 号单元。

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/73026.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

实现数智内控,数据分析创造价值——辽宁烟草智能风险体检系统

近两年,烟草行业部分单位围绕中心任务,结合实际,守正创新,开展了许多研究探索。比如,在财务大数据价值挖掘、会计共享中心建设、财务风险预警系统建设等方面做了大量卓有成效的工作。在这样的背景下,辽宁烟…

DSPE-MAL 磷脂改性马来酰亚胺简介CAS1360858-99-6

DSPE-MAL二硬脂酰磷脂酰乙醇胺改性马来酰亚胺 中文名称:二硬脂酰磷脂酰乙醇胺改性马来酰亚胺 英文名称:DSPE-MAL CAS:1235864-97-7 分子式:C48H86N2NaO11P 分子量:921.16700 外观:白色粉末 DSPE-MAL二…

2022icpc 济南站 持续补题

链接:Dashboard - 2022 International Collegiate Programming Contest, Jinan Site - Codeforces 签到题:k K. Stack Sort You are given a permutation with nn numbers, a1,a2,…,an(1≤ai≤n,ai≠aj when i≠j). You want to sort these numbers …

WY易盾cb、fp逆向分析

内容仅供参考学习 欢迎朋友们V一起交流: zcxl7_7 目标 网址:案例地址 这个好像还没改版,我看官网体验那边已经进行了混淆 分析 这个进行的请求很乱,我就不说怎么找的了,到时候越听越乱。一共有2个请求很重要 …

笔试题之编写SQL按要求查询用户阅读行为数据

紧张源于恐惧,恐惧源于未知。 文章目录前言一、SQL题目二、当时作答结果三、复盘(一)建表并自定义插入数据(二)正确解答(三)答错原因分析总结前言 分享本人一次失败的笔试经历,供各…

plink中的BGEN格式的数据如何用

这里,介绍一下BGEN格式的数据,他的文件格式是这样的:a.bgen,这是一个新的数据格式,目前应用不如plink的二进制文件:.bim,.bed,.fam。这里介绍一下如何相互转换。 1. bgen格式介绍 现代遗传关联研究通常使…

[附源码]计算机毕业设计JAVA中小企业人事管理系统

[附源码]计算机毕业设计JAVA中小企业人事管理系统 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM my…

HMS Core 6.8.0版本发布公告

分析服务 ◆ 游戏行业新增“区服分析”埋点模板及分析报告,支持开发者分服务器查看用户付费、留存等指标,可进一步评估不同服务器的玩家质量; ◆ 新增营销活动报告,可查看广告任务带来的曝光、点击相关信息,让营销推…

阿里P7晒工资条,看完真的扎心了……

前几天,有位老粉私信我,说看到某95后学弟晒出阿里P7的工资单,他是真酸了…想狠补下技术,努力冲一把大厂。 为了帮到他,也为了大家能在最短的时间内做面试复习,我把软件测试面试系列都汇总在这一篇文章了。…

关于信息系统监理师考试怎么备考?

信息系统监理师是属于软考的中级科目,是水平考试,取得证书后就具备了任职中级职称的资格,并可以注册为信息系统监理师,进行信息系统监理工程师的执业工作。 注册监理工程师,是指经考试取得中华人民共和国监理工程师资…

041-推箱子游戏1

上一讲:040-JAVA集合及GUI综合应用(实现简单的订单管理系统)_CSDN专家-赖老师(软件之家)的博客-CSDN博客 下一讲:推箱子游戏源代码 摘要: 1、使用JAVA基础知识 2、GUI界面编程实现推箱子界面,常用控件的综合应用; 3、使用JAVA绘图技术实现推箱子过程的绘图功能;…

追觅身陷「多事之秋」!一场无法投机的「卡位战」

清洁电器市场正释放着新的商业活力。 GfK数据显示,今年上半年在整体家电市场低迷的同时,清洁机器人市场零售额保持了同比15%的增速,仍然是家电行业的主要增长点。其中,线上市场扫地机器人销售仍然居首位,但洗地机反超…

项目笔记:Arduino读取SD卡

1 硬件连接(使用Arduino Uno): CS -> 10 SCK -> 13 MOSI -> 11 MISO -> 12 VCC ->5V GND -> GND 2 让Arduino检测到SD卡 官方测试程序:检测SD卡连接并输出卡型号 /*SD card testThis example shows how use…

Linux 磁盘结构,文件系统与inode

🧸🧸🧸各位大佬大家好,我是猪皮兄弟🧸🧸🧸 文章目录一、关于磁盘①磁盘②CHS寻址⑤磁盘结构的抽象二、文件系统①inode与文件的关系②创建文件,系统做的事③删除文件,系…

如何升级展锐RM500U模组的5GCPE固件

本文镜像:https://blog.csdn.net/weixin_45326556/article/details/128236605 如何升级展锐RM500U模组的5GCPE固件1. 准备工作2. 安装5GCPE串口驱动3. 升级固件3.1 选择固件3.2 选择串口号3.3 下载固件3.4 下载固件意外情况4. 重新启动5.参考文献1. 准备工作 从网盘…

智慧旅游景区Web3D可视化GIS综合运营平台

建设背景 2014年8月,《国务院关于促进旅游业改革发展的若干意见》。 2015年年初,原国家旅游局发布《关于促进智慧旅游发展的指导意见》。 2021年12月,国务院印发《“十四五”旅游业发展规划》。 在国家和有关部门的引导和支持下&#xff…

卡塔尔世界杯-诸神黄昏

世界杯 世界杯概述:国际足联世界杯(FIFA World Cup)简称“世界杯”,是世界上最高荣誉、最高规格、最高竞技水平、最高知名度的足球比赛,与奥运会并称为全球体育两大最顶级赛事,影响力和转播覆盖率超过奥运会的全球最大…

openGauss数据库安装(2.0.0企业版安装)

目录1. 准备环境2. 预安装3. 正式安装4. 启动并登录数据前言此次数据库的系统安装环境仍然是openEuler20.03LTS,openGauss安装版本是2.0.0版本,相对于极简版安装,确实多了一些工具,例如gs_om工具,极简版安装是没有的,企…

前后端传参

1、路径传参 前端传一个参数:123 后端接收一个参数:123 // /{}是必须写的,id是自定义的// PathVariable 这个注解也是必须写的,否则接不到参数GetMapping("/{id}")//使用什么类型去接收id的值,要看你后端需要…

损失函数是如何设计出来的

损失函数是如何设计出来的? 可以直接观看b站优质博主的视频,该博主讲的也是非常通透。劝大家直接去看视频,我这只是做一个学习笔记。 https://www.bilibili.com/video/BV1Y64y1Q7hi/?spm_id_from333.788&vd_sourcee13ed5ec556f20f3f3c2…