debug

2023-10-26

(1)   DOS提示符下,进入Debug程序。

(2)    详细记录每一步所用的命令,以及查看结果的方法和具体结果。

3)现有一个双字加法源程序如下,其中存在错误。现假设已汇编、连结生成了可执行文件HB.EXE,存放在d:\MASM目录下。请使用Debug对其进行调试。

Code SEGMENT

      ASSUME CS:code,DS:code

      ORG 100H            ;100H处开始存放下列指令

Start:MOV AX,code         ;DS置成code段的首地址

      MOV DS,AX

      MOV SI,200H         ;取第一个数的首地址

      MOV AX,[SI]         ;将第一个数的低16位取到AX

      MOV DI,204H         ;取第二个数的首地址

      ADD AX,[DI]         ;第一个数和第二个数的低16应相加

      MOV [SI+8],AX       ;16位相加的结果送到208H209H单元

      MOV AX,[SI+2]       ;取第一个数的高16位送到AX

      ADD AX,[DI+2]       ;两个数的高16位相加

      MOV [SI+0AH],AX     ;16位相加的结果送到20AH20BH单元

      MOV AX,4C00H        ;使用DOS4CH号功能调用

      INT 21H             ;进入功能调用,返回DOS

      ORG 200H            ;200H处开始存放下列数据

      DD 12345678h,654387A9h,0h ;被加数、加数、和

Code ENDS

    END start

调试过程:

① 进入Debug并装入可执行文件HB.EXE

D:\MASM>Debug HB.EXE<Enter>

-

② 观察寄存器初始状态

-R <Enter>

AX=0000  BX=0000  CX=020C  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000

DS=1892  ES=1892  SS=18A2  CS=18A2  IP=0100   NV UP EI PL NZ NA PO NC

18A2:0100 B8A218        MOV     AX,18A2

 

注:(1)以上显示的寄存器值,可能和你的电脑显示的不一样。

2Debug中默认的进制是十六进制。

③ 以单步工作方式开始运行程序

    首先用T命令顺序执行用户程序的前l两条指令,将段寄存器DS预置为用户的数据段。

-T <Enter>

AX=18A2  BX=0000  CX=020C  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000

DS=1892  ES=1892  SS=18A2  CS=18A2  IP=0103   NV UP EI PL NZ NA PO NC

18A2:0103 8ED8          MOV     DS,AX

 

-T <Enter>

AX=18A2  BX=0000  CX=020C  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000

DS=18A2  ES=1892  SS=18A2  CS=18A2  IP=0105   NV UP EI PL NZ NA PO NC

18A2:0105 BE0002        MOV     SI,0200

 相当于运行了两行

 

④ 观察用户程序数据段初始内容

-D 200 20F <Enter>

18A2:0200  78 56 34 12 A9 87 43 65-00 00 00 00 00 74 13 50   xV4...Ce.....t.P

-

 

连续工作方式运行程序至返回DOS前(设断点),查看运行结果。为此,现使用U命令反汇编。

 -U 100 <Enter>

 18A2:0100 B8A218        MOV     AX,18A2

 18A2:0103 8ED8          MOV     DS,AX

 18A2:0105 BE0002        MOV     SI,0200

 18A2:0108 8B04          MOV     AX,[SI]

 18A2:010A BF0402        MOV     DI,0204

 18A2:010D 0305          ADD     AX,[DI]

 18A2:010F 894408        MOV     [SI+08],AX

 18A2:0112 8B4402        MOV     AX,[SI+02]

 18A2:0115 034502        ADD     AX,[DI+02]

 18A2:0118 89440A        MOV     [SI+0A],AX

 18A2:011B B8004C        MOV     AX,4C00

 18A2:011E CD21          INT     21

 -

 

可见,要执行10条指令,至011B处停止

-G=100,011B <Enter>

 AX=7777  BX=0000  CX=020C  DX=0000  SP=0000  BP=0000  SI=0200  DI=0204

 DS=18A2  ES=1892  SS=18A2  CS=18A2  IP=011B   NV UP EI PL NZ NA PE NC

 18A2:011B B8004C        MOV     AX,4C00

 

 -D 200 20F <Enter>

 18A2:0200  78 56 34 12 A9 87 43 65-21 DE 77 77 43 43 83 06   xV4...Ce!.wwCC..

-

和为7777DE21H,正确。

⑥ 再取一组数据,查看运行结果。为此,首先用E命令修改数据。

 -E 200 CD,AB,78,56,90,EF,34,12 <Enter>

 -D 200 20F <Enter>

 18A2:0200  CD AB 78 56 90 EF 34 12-21 DE 77 77 43 43 83 06   ..xV..4.!.wwCC..

 -G=100,11B <Enter>

 AX=68AC  BX=0000  CX=020C  DX=0000  SP=0000  BP=0000  SI=0200  DI=0204

 DS=18A2  ES=1892  SS=18A2  CS=18A2  IP=011B   NV UP EI PL NZ NA PE NC

 18A2:011B B8004C        MOV     AX,4C00

 -D 200 20F <Enter>

 18A2:0200  CD AB 78 56 90 EF 34 12-5D 9B AC 68 43 43 83 06   ..xV..4.]..hCC..

 -

 

和为68AC9B5DH,错误。说明程序有问题。

⑦ 再将断点设在完成低位字加法后,查看运行结果。

-G=100,112 <Enter>

 AX=9B5D  BX=0000  CX=020C  DX=0000  SP=0000  BP=0000  SI=0200  DI=0204

 DS=18A2  ES=1892  SS=18A2  CS=18A2  IP=0112   NV UP EI NG NZ NA PO CY

 18A2:0112 8B4402        MOV     AX,[SI+02]               DS:0202=5678

 -D 200 20F <Enter>

 18A2:0200  CD AB 78 56 90 EF 34 12-5D 9B AC 68 43 43 83 06   ..xV..4.]..hCC..

 -

 

低位和为9B5D,正确。说明错误可能出在后面

⑧ 使用T命令从刚才的断点处向后单步调试,查看运行结果。

-T=112 <Enter>

 AX=5678  BX=0000  CX=020C  DX=0000  SP=0000  BP=0000  SI=0200  DI=0204

 DS=18A2  ES=1892  SS=18A2  CS=18A2  IP=0115   NV UP EI NG NZ NA PO CY

 18A2:0115 034502        ADD     AX,[DI+02]             DS:0206=1234

 -T <Enter>

AX=68AC  BX=0000  CX=020C  DX=0000  SP=0000  BP=0000  SI=0200  DI=0204

 DS=18A2  ES=1892  SS=18A2  CS=18A2  IP=0118   NV UP EI PL NZ NA PE NC

 18A2:0118 89440A        MOV     [SI+0A],AX             DS:020A=68AC

 -

 

AX寄存器的结果为68AC,而应为68AD。可见是本条加法指令使用错误,这里应使用带进位加法指令。

⑨ 使用A命令装入正确指令后再次运行,察看结果。

-A 115 <Enter>

 18A2:0115 ADC AX,[DI+02] <Enter>

 18A2:0118 <Enter>

 -G=100,11B <Enter>

 AX=68AD  BX=0000  CX=020C  DX=0000  SP=0000  BP=0000  SI=0200  DI=0204

 DS=18A2  ES=1892  SS=18A2  CS=18A2  IP=011B   NV UP EI PL NZ NA PO NC

 18A2:011B B8004C        MOV     AX,4C00

 -D 200 20F <Enter>

 18A2:0200  CD AB 78 56 90 EF 34 12-5D 9B AD 68 43 43 83 06   ..xV..4.]..hCC..

 -

 

和为68AD9B5DH,正确。对于这样一个简单程序一般来说不会再有问题。退出后修改源程序即可。

⑩ 退出

-Q <Enter>

D:\>

 

其实操作还是比较简单的,前面需要配合上我之前发的一个,然后直接下来就好了,要弄懂,亲需要点时间哦

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

debug 的相关文章

  • show processlist 命令执行结果解释

    show full processlist show processlist 显示哪些线程正在运行 也可以通过 INFORMATION SCHEMA PROCESSLIST 表或 mysqladmin processlit 获取这些信息 如
  • 设计模式-状态模式(State)

    文章目录 前言 状态模式的核心概念 状态模式的用途 示例 状态模式的Java实现 状态模式优缺点 总结 前言 当我们需要在对象的生命周期中管理不同状态时 状态模式 State Pattern 是一种有用的设计模式 在这篇博客中 我们将介绍状
  • 免费的 PPT 模版资源

    1 第一 PPT 第一PPT站内资源以免费下载为基础 本着开放的共享为原则 服务于国内广大国内PPT爱好者 目前第一PPT站内的所有PowerPoint资源 PPT模板 PPT背景 PPT 素材 PPT教程 PPT软件 均是免费下载 所以请
  • openVPN服务端搭建

    搭建步骤 云服务器 Ubuntu 20 04 1 LTS 搭建服务端 公网IP 47 215 测试客户端 部门内部成员的windows10 或者windows11 及mac电脑 还有现场linux环境 最后目标是实现所有客户端之间能够互联
  • Electron桌面程序开发入门

    1 Electron结合vue项目配置 Electron是利用web前端技术进行桌面应用开发的一套框架 是由 github 开发的开源框架 允许开发者使用 Web 技术构建跨平台的桌面应用 它的基本结构 Electron Chromium
  • Vuluhub靶场-breach1

    网络设置和准备 该靶场的ip 192 168 110 140 我们要设置为仅主机模式 在虚拟机中将仅主机模式的ip地址范围包含靶机的ip 除了网络设置 还要准备两台kali 一台连接外网 一台和靶机一样要仅主机模式 信息收集 Nmap扫描
  • lvgl 自定义控制表格行高、颜色和外框样式

    lvgl 自定义控制表格行高 颜色和外框样式 lvgl版本 8 3 7 lvgl自带表格控件能够指定列宽 但是表格行高是根据内容动态渲染的 表格自带样式如图 带有蓝色的外框和白底 如果想要手动控制表格行高 颜色和外框等属性 需要监听表格绘制
  • 国产加密实际运用:使用SM3加盐存储密码,并且使用SM2进行登录认证

    目录 1 简要 2 开发环境及工具 3 后台密码加密部分 3 1加密代码 3 2 SM3加密类 Sm3crypto 3 3国密SM3工具类 Sm3Utils 3 4国密相关依赖包 4 登录认证部分 4 1前端部分关键代码 4 2后端logi
  • 查看tensorflow是否支持GPU,以及测试程序

    测试程序 Python import tensorflow as tf hello tf constant Hello TensorFlow sess tf Session print sess run hello 是否支持GPU impo
  • 【新手入门篇】React+ant design

    本篇着重讲解如何使用官方的demo 至于React及antd的安装及配置在本文末尾会给出相应的参考链接 创建一个React项目之后 create react app 你的项目名 在新建的项目目录下引入antd组件库 yarn add ant
  • Ubuntu 23.10 支持基于 TPM 的全磁盘加密

    将于下个月发布的 Ubuntu 23 10 增加了一项实验性功能 初步支持基于 TPM 的全磁盘加密 该功能利用系统的可信平台模块 TPM 缺点是这种额外的安全性依赖于 Snaps 包括内核和 GRUB 引导加载器 Ubuntu 开发商 C
  • 输出该单链表的中间结点的值,如果链表长度为偶数,则输出中间靠右的结点

    输出该单链表的中间结点的值 如果链表长度为偶数 则输出中间靠右的结点 题目要求 输入数据创建一个单链表 实现一种算法 输出该单链表的中间结点的值 如果链表长度为偶数 则输出 中间靠右 的结点 如果链表只有一个元素 则输出唯一的元素 算法思路
  • 【华为机试真题 JAVA】水果搬运问题-200

    题目描述 一组工人搬运一批水果 用一维数组存储工人编号和水果名称以及搬运重量 要求先按水果分组 然后按搬运重量排序输出 输入描述 第一行包括一个整数 N 1 N 100 代表工人的个数 接下来的 N 行每行包括两个整数 p 和 q 分别代表
  • 关于STM32的SPI使用DAM首发的回调问题

    本人第一次使用HAL库 然后用SPI操作FLAH 担心数据量大 于是打算使用DMA 之前是用的LL库 然后发现了一个问题 SPI怎么都接收不到数据 想了一下应该是片选引脚的问题 我应该在DMA传输结束时关闭引脚 但是之前都是用LL库 判断标
  • spring无侵入自动生成接口文档

    背景 spring cloud多个微服务开发了很多接口 紧急对接前端 需要快速提供一批接口的文档 且不同微服务的接口由多位同事开发且注释非常的少各有不同 现在需要不修改代码不添加注释的情况下能自动的扫描接口并生成文档 本文将详细介绍实现此需
  • X264的参考帧设置

    1 以r1884为例 r ref lt 整数 gt Reference Frame 即参考帧 决定最多可能的参考帧数 有效范围值1 16 该值越大 压缩率越高 但大于6后对压缩率的贡献很低 可以看压制完后x264 info ref 项 例如
  • sqlserver 登录名和用户名

    解释 登录名 通俗的讲 平时连接数据库是用的就是登录名 而不是用户名 是数据库服务级别 登录数据库之后 这个登录名有什么权限 比如可以访问那个数据库 或者表 存储过程 视图等 甚至字段权限 是有与之对应的用户 用户名 决定 注 也可以从服务
  • 手风琴(折叠面板)

    目录 一 Layui手风琴 1 1 引用layui的css和js 1 2 开启手风琴的代码示例 1 3 静态数据 1 4 最终效果图 二 Bootstrap手风琴 2 1 引用Bootstrap的css和js 2 2 开启手风琴的代码示例
  • Python 第一章 基础知识(6) 函数

    函数就像可以用来实现特定功能的小程序一样 Python的很多函数都能做很奇妙的事情 先来介绍一个内建函数 即是Python自带的已经定义好的函数 可以直接用 gt gt gt pow 2 3 8 这个函数实现了2 2 2的算法 这种使用函数
  • Angular 中 web worker的使用

    web worker就是在web应用程序中使用的worker 这个worker是独立于web主线程的 在后台运行的线程 web worker的优点就是可以将工作交给独立的其他线程去做 这样就不会阻塞主线程 第一步 ng g webWorke

随机推荐

  • 快速生成26个英文字母

    在学习中经常会拿26个英文字母序列做为字符串的例子来说明 但是自己又不想每次都自己手动输入 所以就想写个方法能快速的生成这个字符串 generate 26 english Characters return void public stat
  • C# 9.0:Records

    转自 翁智华 cnblogs com wzh2010 p 13950647 html 概述 在C 9 0下record是一个关键字 微软官方目前暂时将它翻译为记录类型 传统面向对象的编程的核心思想是一个对象有着唯一标识 封装着随时可变的状态
  • JenKins结合cppcheck及cpplint进行代码风格及静态代码检测

    JenKins结合cppcheck及cpplint 最近公司需要在Jenkins上安装cppcheck及cpplint进行代码风格及静态代码检测 这里记录下过程 前提条件 安装了Jenkins 步骤如下 第一步 安装cppcheck并配置环
  • [Linux] yum和apt-get用法及区别

    一般来说著名的linux系统基本上分两大类 1 RedHat系列 Redhat Centos Fedora等 2 Debian系列 Debian Ubuntu等 RedHat 系列 1 常见的安装包格式 rpm包 安装rpm包的命令是 rp
  • vs2019调试时中文乱码解决办法

    vs2013 vs2019系列文章目录 文章目录 vs2013 vs2019系列文章目录 问题描述 一 解决 解决方法1 在我机器上仍然未解决 解决方法2 在我机器上可行 调试时中文显示效果 问题描述 vs2019调试时中文乱码 但是在vs
  • except Exception as e作用

    小记 今天在查看poc时 发现这段代码不理解 所以B站搜索了一下 把别人讲的内容爬了一下 coding utf 8 a int input 请输入数字0 try if a 0 print a except Exception as e 作用
  • Redis高可用集群(哨兵、集群)

    文章目录 前言 一 主从复制 1 1 主从复制的作用 1 2 主从复制流程 1 3 主从复制搭建 二 哨兵模式 2 1 哨兵模式的作用 2 2 哨兵结构的组成 2 3 故障转移机制 2 4 哨兵模式搭建 三 集群模式 3 1 集群的作用 3
  • shell 脚本调试工具

    bashdb 是一个类似GDB的脚本调试软件 具有断点 单步执行 观察变量等功能 安装方法 sudo apt get install bashdb bashdb 使用方法 bashdb options script name script
  • vue element-ui el-table表格二次封装 自定义el-table表格组件 vue封装表格组件

    CommTable vue table组件
  • 多人连线的枪战游戏

    Simple Blueprint Multiplayer 是一个完全由 蓝图 和 UMG 界面 编写的游戏 可以作为如何使用蓝图的 Session Nodes 打造游戏中的多人部分的使用示例 这里有一个主菜单 一个服务器列表 以及一个简单的
  • java如何将null转化为空串也就是empty

    java如何将null转化为空串也就是empty 前言 在说转换之前 简单说一下它们之间的区别 如下 1 null不指向任何对象 相当于没有任何值 而 代表一个长度为0的字符串 2 null不分配内存空间 而 会分配内存空间 那如何将nul
  • HTTP 2.0 与HTTP1.1的差别

    前面的话 在说HTTP2 0前 先说一说发展到HTTP1 1做了哪些升级 推荐好文 一文读懂HTTP 2及HTTP 3特性 HTTP1 1的升级 目前使用最广泛的HTTP1 1做了哪些重大升级 默认长连接 HTTP1 0也提供长连接 但是默
  • 拓扑排序(广度优先搜索实现)

    有向无环图可以用来表示各种事物的顺序 比如工作顺序 一些事情必须在另一些事情完成之后才能开始进行 那么 为了获得正确的工作顺序 一件事情开始之前 必须保证它的前置条件全部满足 就需要用到拓扑排序 拓扑排序其实就是在有向无环图中 只要存在边
  • nvm 查看所有可以下载node的版本

    nvm 查看所有可以下载node的版本 nvm list 命令 显示版本列表 nvm list 显示已安装的版本 同 nvm list installed nvm list installed 显示已安装的版本 nvm list avail
  • 三阶段提交协议(3PC)

    3PC 主要是为了解决两阶段提交协议的单点故障问题和缩小参与者阻塞范围 引入参与节点的超时机制之外 3PC把2PC的准备阶段分成事务询问 该阶段不会阻塞 和事务预提交 则三个阶段分别为CanCommit PreCommit DoCommit
  • codeforces 526D(kmp,数学)

    description One day Om Nom found a thread with n beads of different colors He decided to cut the first several beads fro
  • 内核体系结构和编译体系分析

    1 Linux操作系统体系结构 1 操作系统可以分为两个层次 内核空间和用户空间 内核和用户空间使用不同的保护地址空间 内核不能将用户空间传递的地址进行直接的操作 需要先转换 2 系统调用 内核空间管理设备资源 应用程序通过内核提供的内核调
  • 米家接入HomeKit系列三:HomeAssistant接入米家网关

    系列文章 米家接入HomeKit系列一 接入基本原理与开篇 米家接入HomeKit系列二 通过群辉NAS的Docker搭建HomeAssistant 米家接入HomeKit系列三 HomeAssistant接入米家网关 米家接入HomeKi
  • 微信小程序--web-view--h5返回微信小程序

    1 配置微信小程序 web view 记得配置业务域名 微信公众平台配置业务域名 上线需要 1 1 建议微信小程序里单独用一个页面打开
  • debug

    1 在DOS提示符下 进入Debug程序 2 详细记录每一步所用的命令 以及查看结果的方法和具体结果 3 现有一个双字加法源程序如下 其中存在错误 现假设已汇编 连结生成了可执行文件HB EXE 存放在d MASM目录下 请使用Debug对