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

先看说明书:

Dos系统的Debug工具简单使用(2023.9.7)_第1张图片

文章目录

  • 分项操练
    • -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寄存器所指向的地址

示例:

Dos系统的Debug工具简单使用(2023.9.7)_第2张图片

补充说明:在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之间的内容

Dos系统的Debug工具简单使用(2023.9.7)_第3张图片

上面我首先展示了一下各个寄存器的值,我们可以看到,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 。。。

演示一下:

Dos系统的Debug工具简单使用(2023.9.7)_第4张图片

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

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

Dos系统的Debug工具简单使用(2023.9.7)_第5张图片

-F

全称:fill(填充)

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

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

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

Dos系统的Debug工具简单使用(2023.9.7)_第6张图片

-G

全称:go(运行)

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

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

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

Dos系统的Debug工具简单使用(2023.9.7)_第7张图片

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

-H

全称:Hex(十六进制)

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

Dos系统的Debug工具简单使用(2023.9.7)_第8张图片

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

-I

全称:input(输入)

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

格式:-i 端口号

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

Dos系统的Debug工具简单使用(2023.9.7)_第9张图片

可以获取一个字节的数据

-L

全称:load(加载)

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

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

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

-M

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

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

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

Dos系统的Debug工具简单使用(2023.9.7)_第10张图片

这里我第一次没有指定段地址模式默认走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 寄存器

  • 修改某个寄存器的值

Dos系统的Debug工具简单使用(2023.9.7)_第11张图片

直接输入-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

Dos系统的Debug工具简单使用(2023.9.7)_第12张图片

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

注意到,下面最后一行是关联的命令,前面是命令的地址,以及相应地址看到的数据
Dos系统的Debug工具简单使用(2023.9.7)_第13张图片

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

Dos系统的Debug工具简单使用(2023.9.7)_第14张图片

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

-S

全称:search(搜索)

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

Dos系统的Debug工具简单使用(2023.9.7)_第15张图片

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

-T

全称:trace(追踪)

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

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

Dos系统的Debug工具简单使用(2023.9.7)_第16张图片

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

-U

全称:unassemble(反汇编)

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

格式:-u 首地址 尾地址

Dos系统的Debug工具简单使用(2023.9.7)_第17张图片

-W

全称:write(写)

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

-XA

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

作用:给扩展内存分句柄

格式:-xa 内存的页

在这里插入图片描述

-XD

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

格式:-xd handle

Dos系统的Debug工具简单使用(2023.9.7)_第18张图片

-XM

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

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

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

-XS

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

作用:如其名

Dos系统的Debug工具简单使用(2023.9.7)_第19张图片

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

-?

获取说明书

Dos系统的Debug工具简单使用(2023.9.7)_第20张图片

你可能感兴趣的:(汇编,汇编)