在8086汇编中DEBUG是个非常实用的工具,并且可以非常明了的查看每一步指令每一个段的相对状态,有利于学习。下面列举一下DEBUG的一些使用方法:

  1. -A:可以开始在相应位置编写代码,其中后面可以接一个地址,表示写的位置;从下图可以看到,A后加参数2000,即从段偏移2000的位置开始存放代码。

  2. -C

    -c [add1]L[length] [add2] 是将add1和add2开始的length个数据显示出来,进行比较;

    下图键入:-C 50L20 100 第二列显示的是0050-006F的数据内容,第三列显示的是0010-011F的数据内容,而长度为20。非常直观的显示了数据。

  3. -D:显示存储空间中的内容。

    如上所示,0200中本来是空的,通过a命令写进代码后再次查看可以发现里面存放了新的操作码。

    另外还可以通过指示明确段和偏移直接查询特定位置的内容。(如CS:200

  4. -E:修改特定存储空间中的内容

    -E 100
    073F:0100 B8.12

    也可以通过连续输入的方式更改连续的一片内容:

  5. -F:用于填充一段存储单元,但是要注意他的格式把段地址和段偏移要写清楚

    如下图所示,L10表示填充的长度是10 后面加填充的内容,通过两个命令可以发现,如果填充的内容我只写了 \(n\) 个而填充的长度我写了\(m\)个(\(n<m\) )则会顺序循环的自动填充。

  6. -G:这个命令使用不当会导致系统崩溃使用方法为:G[=address],代表从当前 \(cs:ip\)​ 所指的位置执行到address处.

    技巧:先用 -U 查看部分指令内容,然后用 -G 快速执行内容

  7. -H: 这个选项比较简单,即输入两个参数,对这两个参数进行加减运算,把想加的结果显示在第一列,相减的结果放在第二列,其中我们可以看到,当减为负数时候是以补码的形式表示的。

  8. -I: 从某一端口输入并显示一个字节,后面的参数接端口号。

  9. -L: 发现L命令并不能使用,查阅了资料,dos下运行debug时,涉及到直接写硬盘扇区的操作都是被禁止的,这是windows的保护功能。如果想要运行全部debug命令,必须在实模式dos下运行。

  10. -M:把 \(cs\) 中的一段内容移动到内存单元中,这里默认指的就是 \(DS\) 段。

  11. -N:用于对文件命名,-n[name]。

  12. -O: 用于给端口发送数据,

    ; 向2F8端口发送数据4F
    -O 2F8 4F
  13. -Q :使用Q命令来退出debug调试

  14. -R:R命令是个非常方便的命令,它可以查看和修改8086中寄存器的值。使用-R可以直接查看所有的寄存器,使用 -R+[指定寄存器] 可以实现对某个寄存器的修改,如上图所示,已经成功修改了AX中的值。其中使用-R F可以查看标志寄存器的状态如图所示,它不是单纯的0和1不太好记,可以查实验书来对照,可以看到当前寄存器属于:未溢出、方向正、允许中断、符号为正、不是0、没有辅助进位、奇、没有进位的状态。

  15. -F:用于搜索指定位置中的字符,返回的是精确的地址

  16. -T:单步调试

  17. -U:反汇编指令,可以将存在内存中的机器码反编译成汇编语言,其中一个参数是起始地址

  18. -W:一直没调试成功,原因应该和L命令相同,windows为了保护硬盘,并不允许在这种情况下使用此命令。

通过学习可以发现立即数在使用时候默认为 \(16\) 进制,并且不需要加H,末尾加H反而会报错,并且debug中并不区分大小写。

emu8086也是一个非常好的调试软件,操作简单方便网上就可以下载。。

debug在CMD中打不开是因为windows版本过高,可以下载 Dosbox 在其中运行调试

汇编 | 8086 DEBUG调试学习笔记的更多相关文章

  1. OD调试学习笔记7—去除未注册版软件的使用次数限制

    OD调试学习笔记7—去除未注册版软件的使用次数限制 本节使用的软件链接 (想自己试验下的可以下载) 一:破解的思路 仔细观察一个程序,我们会发现,无论在怎么加密,无论加密哪里,这个程序加密的目的就是需 ...

  2. PX01关于手机屏SPI触摸调试学习笔记

    上位机工具:http://www.xk-image.com/download/blog/0002_TP调试/LcdTools20210605.rar 调试案例:http://www.xk-image. ...

  3. PX01关于手机屏IIC触摸调试学习笔记

    相关文件下载: 上位机工具:http://www.xk-image.com/download/blog/0002_TP调试/LcdTools20210605.rar 调试案例:http://www.x ...

  4. eclipse debug (调试) 学习心得

    eclipse debug (调试) 学习心得   进入debug模式:   1.设置断点   2.启动servers端的debug模式   3.运行程序,在后台遇到断点时,进入debug调试状态   ...

  5. idea DeBug调试学习

    在Intellij IDEA中使用Debug 目录 一.Debug开篇 二.基本用法&快捷键 三.变量查看 四.计算表达式 五.智能步入 六.断点条件设置 七.多线程调试 八.回退断点 九.中 ...

  6. (转) eclipse debug (调试) 学习心得

    1.Step Into (also F5) 跳入2.Step Over (also F6) 跳过3.Step Return (also F7) 执行完当前method,然后return跳出此metho ...

  7. Windows调试学习笔记:(二)WinDBG调试.NET程序示例

    好不容易把环境打好了,一定要试试牛刀.我创建了一个极其简单的程序(如下).让我们期待会有好的结果吧,阿门! using System; using System.Collections.Generic ...

  8. ansible debug模块学习笔记

    - name: Print debug infomation eg hosts: test2 gather_facts: F tasks: - name: Command run line shell ...

  9. Debug tool 学习笔记

    GDB调试命令大全 gdb --pid 1235 gdb core.1234 where (bt)    //where the segmentation fault occurred f 1     ...

  10. Windows调试学习笔记:(一)WinDBG中加载SOS和CLR

    最近产品环境出现了部分服务器当机情况,虽然重启之后问题就不出现了.但本着彻底解决问题的态度,想要找到root cause.多次尝试Visual Studio失败(可能是代码惊醒了优化和签名)之后,决定 ...

随机推荐

  1. .NET8:快速集成Rapid.NET三维控件

    .NET8正式版本发布了,AnyCAD Rapid.NET针对.NET8进行了升级和优化.本文以WPF项目为例介绍在.NET8中使用AnyCAD Rapid.NET三维控件. 1 从.NET6升级 若 ...

  2. MINA框架

    一.小程序MINA框架分为三个部分: 有 View(视图层).App Service(逻辑层)和 Natice(系统层). 1.View(视图层) 视图层包含了小程序多个页面.每个页面都有WXML文件 ...

  3. 没错,数据库确实应该放入 K8s 里!

    昨天冯老板发了一篇文章探讨了为什么将数据库放入 K8S 中不是一个明智的选择. 如果是四年前有人质疑容器化数据库我觉得还可以 battle 一下,都 2023 年了还有人不能认清这个大势,我就有必要来 ...

  4. vertx的学习总结1

    一.  vertx是什么?   答:lib工具包 二.  为什么要使用vertx 答: 异步和非阻塞:Vert.x 采用了事件驱动和非阻塞的编程模型,可以处理大量并发请求而不会阻塞线程,提供更好的响应 ...

  5. scroll-view和swiper的使用

    源码: <template>            <viex class="out">            <view class="b ...

  6. LIS和LCS算法分析

    LIS(最长上升子序列) 常规的解法就是动态规划. mx[ j ]表示长度为j的上升子序列最小的值a[i]; dp[ i ]表示前i个数的最长上升子序列长度多少. 1 for(int i=1;i< ...

  7. Cloudeye对接Prometheus实现华为云全方位监控

    本文分享自华为云社区<Cloudeye对接Prometheus实现华为云全方位监控>,作者:可以交个朋友 . 一. 背景 云眼系统Cloudeye服务为我们提供了针对弹性云服务器.宽带等资 ...

  8. 安卓app填写域名和端口后点击保存没有反应(填错注册信息)

    解决方法:域名填写错误导致(仔细检查填写的域名和端口是否正常,注册的信息是否与填写的一致) ​ 域名是:3q9l302537.wicp.vip 中间有个字母 l 不是数字 1 填写成了:3q91302 ...

  9. C#与数据库访问技术之ExecuteNonQuery方法

    ExecuteNonQuery方法主要用来更新数据. 通常使用它来执行Update.Insert和Delete语句. 该方法返回值意义如下: 对于Update.Insert和Delete语句,返回值为 ...

  10. Python——第二章:字符串操作——大小写转换

    字符串常规操作 字符串的操作一般不会对原字符串产生影响. 一般是返回一个新的字符串 字符串大小写转换 .capitalize() 是字符串方法之一,在 Python 中用于将所有字符串的第一个母转换为 ...