Dos系统的Debug工具简单使用(2023.9.7)

news2024/11/18 6:14:40

先看说明书:

在这里插入图片描述

文章目录

  • 分项操练
    • -A
    • -C
    • -D
    • -E
    • -F
    • -G
    • -H
    • -I
    • -L
    • -M
    • -N
    • -O
    • -P
    • -Q
    • -R
    • -S
    • -T
    • -U
    • -W
    • -XA
    • -XD
    • -XM
    • -XS
    • -?

分项操练

-A

全称:assemble(汇编)

作用:给定地址范围,写入汇编命令

格式:-a 首地址

  • 如果不输入段地址指的是cs寄存器上的段地址
  • 如果不输入段地址和偏移地址则是cs和ip寄存器所指向的地址

示例:

在这里插入图片描述

补充说明:在8086CPU有20根地址总线,所以物理地址是20位的,但是寄存器是16位的,所以物理地址是这样表示的,段地址:偏移地址,物理地址是段地址X16+偏移地址

我们可以看到,mov ax, aaaa占3个字节,B8是mov ax的含义后面是数据AAAA

d的用法详见D

如果不指定地址用的是cs和ip寄存器所存的段地址和便宜地址

-C

全称:compare(比较)

作用:比较两个相同长度内存块的内容,显示内容的差异处

格式:一种是,-c输入段地址:偏移首地址,偏移尾地址,和要比较的cs寄存器所存的段地址的偏移首地址。如果都是在寄存器段地址的话,可以去掉前面的段地址。

例如

4000:0 3f 100
就是
比较内存块
4000:0000 ~ 4000:003f 与 DS:0100 ~ DS: 013f之间的内容

在这里插入图片描述

上面我首先展示了一下各个寄存器的值,我们可以看到,DS寄存器存的值是0740,DS寄存器存的是默认的段地址,不指定另外的段地址的时候默认的段地址,IP寄存器则是默认的偏移地址,然后我用a指令,吧ax,3f20写入内存,注意,存的时候是按字节低位在前。我们可以看到存在差异的字节便是,偏移地址为0,3,4,5的地方。

-D

全称:dump(转存)

作用:上面的用法可以看到,这个命令是以内存映像的方式显示内存中的信息,左边以16进制显示,右边用ASCII显示(不可见字符用句点表示)

输入:-d 段地址: 首地址, 尾地址

  • 如果省略首地址,就是按照DS寄存器所存储的地址来索引

还有一种:-d 首地址 + L20

  • 显示从首地址开始的20H(十六进制)个字节

-E

全称:enter(进入,开始活动)

作用:从指定位置开始修改内存的值

格式:e 首地址 数据1 数据2 。。。

演示一下:

在这里插入图片描述

这里的数据,可以是16进制数,可以是单个字符(用单引号),也可以是字符串(用双引号)

另外还有一种方式来修改,就是直接键入首地址,接下来他会一个字节一个字节的显示,光标会出现在点号的后面,如果不想修改可以按空格跳过,如果要修改就输入十六进制数,修改完毕就回车结束。

在这里插入图片描述

-F

全称:fill(填充)

作用:给指定的地址范围依次填充,直至填满。

格式:-f 首地址 若干字节

注意:是类似双指针一样,一个指针在循环遍历这个字符串,另一个指针在遍历这个内存范围,同样的我们可以自己指定地址段,也可以选择用ds寄存器内存的地址段。

在这里插入图片描述

-G

全称:go(运行)

作用:运行指定地址的命令

格式:-g=首地址 若干断点地址

写到这里,我认为,CS寄存器是记录command,DS寄存器是记录data的,后者用中括弧偏移地址来记录索引存储单元的,如有错误请指出

在这里插入图片描述

-g首先指定一个程序的开始地址,后面指定断点,如果不指定断点的话,会运行到程序结束。如果没有程序的结束的话,会直接无响应卡死。上面的命令的意思是从0740:0100开始运行,到0740:0103中断

-H

全称:Hex(十六进制)

作用:输入两个十六进制数,返回两个十六进制数的和以及差

在这里插入图片描述

注意:差的时候,EEEF+2222=1111因为大于一个字节的部分被舍弃了

-I

全称:input(输入)

作用:获取端口的一个字节

格式:-i 端口号

补充:8086CPU可访问的最大I/O空间为啥是64KB? - 知乎 (zhihu.com)

在这里插入图片描述

可以获取一个字节的数据

-L

全称:load(加载)

作用:将一个文件或盘的绝对扇区装入存储器

补充:汇编语言DEBUG命令详解||汇编命令||DEBUG的常用命令:A,U,R,T,D,E,Q 等等_追寻者A的博客-CSDN博客

格式:L [内存地址] [磁盘驱动器号] [起始扇区] [扇区数],不过操作系统会拒绝访问磁盘驱动器

-M

全称:move(移动,说是移动,其实是拷贝)

作用:将一段内存的内容拷贝到对应位置

格式:-m 首地址 尾地址 新的首地址

在这里插入图片描述

这里我第一次没有指定段地址模式默认走CS的段地址,就是直接按照指定的首地址存储依次下来

-N

补充说明:.COM文件是命令文件(command),可以用来的执行的文件,现在的windows对这种格式的文件支持比较少了,在以前的MS-DOS系统中常见。

全称:name(命名)

格式:-n 文件名(路径)

默认是cs段地址开始的程序,将它封装成可执行的文件,后续用W命令存入磁盘,之后便能用文件名直接调用该程序了。

详见:汇编语言DEBUG命令详解||汇编命令||DEBUG的常用命令:A,U,R,T,D,E,Q 等等_追寻者A的博客-CSDN博客

-O

全称:output(输出)

作用:向指定端口发送一个字节的内容

格式:-o 端口 一字节

和I命令有相似之处

-P

全称:proceed(行进,前往,继续做)

作用:类似T命令,P与T命令的差别在于P命令把CALL/INT当成一条指令来执行,简化了跟踪过程,P命令只运行RAM内存的命令,而T命令则可运行RAM和ROM里的程序。

-Q

全称:quit(离开)

作用:退出debug程序

-R

全称:register(寄存器)

作用:查看,修改寄存器所存的值

格式:

​ -r

  • 查看所有寄存器

    -r 寄存器

  • 修改某个寄存器的值

在这里插入图片描述

直接输入-r我们可以查看所有寄存器的值,8086CPU有14个寄存器,AX,BC,CX,DX;SP,BP;SI,DI;DS,ES,SS,CS,IP;PSW。上面展示了13个寄存器的值,但是没有PSW

补充:一串NV等的字符是标志位

标志位有

OV(overflow,溢出) NV=(no overflow,未溢出)

UP(up,增加) DN(down,下降)

EI(enable interrupt,允许中断) DI(disable interrupt,禁止中断)

PL(plus,正) NG(negative,负)

NZ(not zero,非零) ZR(zero,零)

PO(parity odd,奇数) PE(parity even,偶数)

NC(no carry,不进位) CY(carry,进位)

AC(auxiliary carry,辅助进位) NA(not auxiliary carry,不辅助进位)

如果想要修改标志位,使用-r f

在这里插入图片描述

直接输入想要的标志位即可修改

注意到,下面最后一行是关联的命令,前面是命令的地址,以及相应地址看到的数据
在这里插入图片描述

前面是一堆000反编译的命令,上面我看了看确实是CD

在这里插入图片描述

确实如此0000的反汇编就是 add [bx+si],al

-S

全称:search(搜索)

作用:在指定范围搜索字节串出现的首地址,这里查到的字符串可能是互相重叠的,匹配每个可能出现的位置。

在这里插入图片描述

我写如右侧那个字符串,分别查找了aa字符串,和abc字符串,结果如上图

-T

全称:trace(追踪)

格式和P相同:-t=首地址 指令数

如果忽略地址的话,T命令从CS:IP开始运行

在这里插入图片描述

第一条指令打印了一下1000:0 10字节的内存(注意这些都是16进制),然后写两条汇编代码,可以看到对应机器指令是 b8 aa aa 和 bb bb bb,注意-t等号,我们可以看到两调指令执行完毕后寄存器的情况。

-U

全称:unassemble(反汇编)

作用:上面也用了,可以将机器指令翻译成汇编,在内存中指令和数据没有任何区别,判定指令还是数据主要看是哪条总线上的数字。

格式:-u 首地址 尾地址

在这里插入图片描述

-W

全称:write(写)

作用:将文件或者特点扇区写入磁盘,是和L命令对应的操作。

-XA

全称:allocate expanded memory(分配扩展内存)

作用:给扩展内存分句柄

格式:-xa 内存的页

在这里插入图片描述

-XD

全称:unallocate expanded memory(释放扩展内存)

格式:-xd handle

在这里插入图片描述

-XM

全称:map expanded memory pages(映射扩展内存)

作用:把扩充内存上的内存页区映射到主内存区

格式:-xm RAM长页码 主内存页码 句柄

-XS

全称:display expanded memory status(展示扩展内存状态)

作用:如其名

在这里插入图片描述

补充一下:扩充内存:(Expanded Memory)1985年初,Lotus、Intel和Microsoft三家共同定义了LIM-EMS,即扩充内存规范,通常称EMS为扩充内存。

-?

获取说明书

在这里插入图片描述

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

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

相关文章

常用echart图总结

柱状图 - category-work,grid直角坐标,legend,series-bar柱状图,tooltip提示框 - makeapie echarts社区图表可视化案例

制造企业如何优化物料控制?

导 读 ( 文/ 2127 ) 物料控制是指对制造过程中所涉及的物料流动和库存进行有效管理和控制的过程。它包括物料需求计划、供应商管理、物料采购、物料接收和入库、物料库存管理以及物料发放和使用等关键环节。通过精确的物料需求计划和库存管理,物料控制可以确保物料供…

达之云BI平台助力融通集团陕西军民服务社有限公司实现数字化运营

中国融通集团陕西军民服务社是一家大型综合类零售购物中心,公司目前管理系统运行了10年左右,面临系统新零售支持发展严重滞后,行业主流应用落地困难,如线上业务、到家业务、全渠道营销、电子发票、自助收银、扫码购、无感停车、未…

【C++ Core Guidelines解析】深入理解现代C++的特性和原理

文章目录 👨‍⚖️《C Core Guidelines解析》的主要观点👨‍🏫《C Core Guidelines解析》的主要内容👨‍💻作者介绍 🌸🌸🌸🌷🌷🌷💐&a…

城市区县级数字孪生智慧水务信息化建设思考

随着水利部近几年对数字孪生水利建设的不断推进,区县级水司建设数字孪生智慧水务已经成为当前水务管理的重要发展趋势。智慧水务通过信息技术手段提高水务管理的效率和精度,实现水资源的合理利用和保护。本文将探讨区县级水司建设智慧水务的思考&#xf…

华为三层交换机与路由器对接上网

华为三层交换机与路由器对接上网

Python标识符命名规范

简单地理解,标识符就是一个名字,就好像我们每个人都有属于自己的名字,它的主要作用就是作为变量、函数、类、模块以及其他对象的名称。 Python 中标识符的命名不是随意的,而是要遵守一定的命令规则,比如说:…

2023外贸SEO推广怎么做?

答案是:2023外贸SEO推广可以选择谷歌SEO谷歌Ads双向运营。 外贸SEO的核心要素 外贸SEO不仅仅是关于关键词排名,它更多的是关于品牌建设和目标受众的吸引。 要想成功,必须认识到几个关键要素。 了解目标市场 首先,要深入了解目…

数字电路-基础

数字信号的概念 数字电路:对数字信号进行传送、逻辑运算、控制、计数、寄存、显示等的电路。 分析方法:逻辑代数 数字电路的特点、发展概况 1.特点:结构简单,容易制造、便于集成化; 精度高、可靠性好; 能进行逻辑运算和逻辑判断等(也称数字逻辑电路)。 2.发展概况: Multisim…

港陆证券:突然崩了!科技股大跌,苹果蒸发超7000亿

当地时间9月6日,美股三大指数齐跌,苹果等科技股重挫。 美国8月ISM服务业指数超预期升至54.5的半年新高,连续8个月扩张,工作指数升至2021年11月来最高,新订单指数也创6个月新高,但反映通胀的付出指数创4个月…

详解 Cent OS JDK 8.0 安装配置

环境配置 云服务器云耀云服务器L操作系统CentOS 7.9 64bit | 公共镜像JDK版本64 bit JDK 1.8 下载地址 JDK官网下载地址Java Downloads | Oraclehttps://www.oracle.com/java/technologies/downloads/#java8百度网盘 ARM64 链接:https://pan.baidu.com/s/1wQ1mp…

IIS WebDAV配置,https绑定及asp设置

IIS支持标准CGI,因此可以用程序语言针对STDIN和STDOUT开发。 IIS CGI配置和CGI程序FreeBasic, VB6, VC 简单样例_Mongnewer的博客-CSDN博客 IIS支持脚本解释CGI,因此可以用脚本语言针对STDIN和STDOUT开发。 IIS perl python cbrother php脚本语言配置…

React 消息文本循环展示

需求 页面上有个小喇叭,循环展示消息内容 逻辑思路 设置定时器,修改translateX属性来实现滚动,判断滚动位置,修改list位置来实现无限滚动 实现效果 代码 /** Author: Do not edit* Date: 2023-09-07 11:11:45* LastEditors: …

【操作系统】银行家算法

概念 当一个进程申请使用资源的时候,银行家算法通过先 试探 分配给该进程资源,然后通过安全性算法判断分配后的系统是否处于安全状态,若不安全则试探分配作废,让该进程继续等待。 那么此时会有一个问题,如何判断系统是…

Leetcode:【169. 多数元素】

题目 给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 难度:简单 题目链接:169. 多数元素 示例 1&#xff…

《Market Insight:中国低代码/零代码市场发展洞察 ( 2023 )》报告正式发布 | LowCode低码时代

数字化浪潮下,低代码/零代码通过提升“开发生产力”将极大促进技术应用效率和产业数字化进程。目前中国的低代码/零代码在制造业、政务与公共事业、金融、电商等领域取得了一定的应用成效。而伴随着生成式AI技术的应用突破,低代码/零代码市场又将迎来新的…

2023年最新ADB工具箱R34下载-自带驱动常见ADB命令刷机ROOT神器

ADB工具箱是ROM乐园基于Android SDK Platform-Tools R34版本制作,集成常规的ADB和 fastboot驱动,解决用户刷机不能连接电脑的问题。自带ADB启动bat窗口,无需繁杂的进 行文件路径配置,下载后解压直接可用。加入了一键启动窗口&…

【PHP】手术麻醉系统源码

手术麻醉信息管理系统覆盖了与麻醉相关的各个临床工作环节,可详细记录病人从进入手术室、手术中、到手术结束的全部数据,包括各类仪器的监测数据、麻药、用药、事件、输氧、插管、拔管、输液、出液、输血、呼吸、电子病例、检验信息、检查结果、医嘱、病…

Sui Lutris:Sui核心的分布式系统协议

经过数个月的测试,Mysten Labs于 8月18日更新了Sui Lutris白皮书,确定了以下内容: 使用PTBs和5K TPS,Sui每秒可以处理140k至150k次操作,这表明Sui在主网峰值(约700 TPS)下的基准测试远低于其实…

函数式接口:Java 中的函数式编程利器

文章目录 1. 函数式接口概念2. 注解3. 自定义函数式接口4. 函数式编程4.1 Lambda的延迟执行效果4.2 使用Lambda作为参数和返回值作为参数使用作为返回值使用 5. 常用的函数接口5.1 Supplier:生产者5.2 Consumer:消费者5.3 Predicate:判断5.4 …