MsDos下的Debug调试器与8080汇编小实验

Posted 不会写代码的丝丽

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MsDos下的Debug调试器与8080汇编小实验相关的知识,希望对你有一定的参考价值。

环境安装

使用vs code插件模拟dos下的环境:
(1)安装如下插件

(2) 新建一个xxx.asm文件

你可以直接在这个界面打开doxbox,然后在内部使用debug(当然你也可以直接装一个doxbox而不是通过vscode).

关于插件的更多说明可参阅:VSCode插件说明

DEBUG参数说明
调试程序DEBUG.EXE

寄存器标志位小实验

Debug调试工具中标志位说明对照表

实验1 查看寄存器CF标志

msdox一个小实验,去查看标志寄存器的CF(全名carry flag)状态。CF用于标记是否进位.在Debug工具下NC表示当前没有进位,YC表示进位

上图右上角NC便是此标志位的状态.我们模拟一个小实验让其NC变为YC.
我们8080albl寄存器是单字节大小进行如下运行会产生进位:aa(H)+7c(H)=126

实验2 查看寄存器ZF标志

ZFzero flag)用于标记两数进行运算结果为0,比如84H+7CH=(1)00H。
Debug工具NZ标识不为0ZR表示运算结果为0

实验3 查看寄存器OF标志

DEBUG工具下NV(not overflow)标识未溢出,OV标识溢出。
看两个数字(在一字节情况下):

7c:0111 1100
3a:0011 1010

上面两个数字在补码表示下都是正数,我们如果进行相加的话 7c+3a=B6.
B6在补码表示下变成了一个负数,两个正数相加结果变成了负数这就是我们常说的溢出.
B6: 1011 0110 (第一个标志位变为1)

实验4 查看寄存器SF标志

最高位是1的话SF为1,否则为0
举个例子:
3A(H)+7C(H)=B6(H) 结果:SF =1
11(h) +11(H)=22(H) 结果:SF =0

debug下最高位为时SF标识为PL(plus) ,为负数NG(negative)

实验5 查看寄存器PF标志

PF(parity flag)用于标记第八位中1的个数是偶数的时候PF为1。

为1时debug显示PE(parity even)否则PO(parity odd)
比如0x1和0x2相加时等于3(0000 0011),此时低八位有两个11所以会debug会显示PE

实验6 查看寄存器AF标志

低四位计算是否存在进位或者借位。

存在进位或者借位debug显示AC( Auxiliary Carry)否则为NA(not Auxiliary )
比如:F+1=10

数据段

8080只有16位数据线,但是支持最大1M的内存其内部实现通过将内存分为一个个段,通过段+段偏移进行实现.


段偏移可以直接使用立即数或者存储在寄存器中,而段基址一般我们一般存储在特定的寄存器,这类寄存器我们称为段址寄存器。

其中比较重要的两个段寄存器分别为:
CS:存储代码段,与IP寄存器配合使用。一般用于指定当前运行的代码行。
SS: 栈段,与SP寄存器配合使用,也就是我们常说的栈区,一般用于方法栈的实现。
DS: 数据段

8086段寄存器
百度百科8086段寄存器

当进行类似如下汇编指令mov [寄存器],操作数二.[寄存器]会指向特定段寄存器作为段基址加上此寄存器的数值,具体映射关系可以Google。
举个例子
mov [dx],操作数二,此时[dx]指向的内存为ds作为段基址加上dx作为偏移
mov [bp],操作数二,[bp]指向的内存为ss作为段基址加上dx作为偏移

当然你可以使用另一种语法强制指定某个寄存器作为段基址
mov ds:[bp],操作数二

实验1
DS段操作:
当我们进行mov [xxx],ax会将ax数值放入ds段地址加上xxxx偏移位置上

实验2
SS段操作:
BP寄存器比较特殊他一般与SSSP一起使用。一般来说mov [BP],ax ,[BP]会指向ss段数据加上BP的数值的偏移

实验3

指定段基址
mov ds:[bp],操作数二

以上是关于MsDos下的Debug调试器与8080汇编小实验的主要内容,如果未能解决你的问题,请参考以下文章

实验1 8086汇编指令编码和调试

汇编实验五

汇编实验3

实验2 多个逻辑段的汇编源程序编写与调试

实验2 多个逻辑段的汇编源程序编写与调试

实验二 汇编命令(伪指令)实验