MsDos下的Debug调试器与8080汇编小实验
Posted 不会写代码的丝丽
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MsDos下的Debug调试器与8080汇编小实验相关的知识,希望对你有一定的参考价值。
环境安装
使用vs code
插件模拟dos
下的环境:
(1)安装如下插件
(2) 新建一个xxx.asm文件
你可以直接在这个界面打开doxbox
,然后在内部使用debug
(当然你也可以直接装一个doxbox
而不是通过vscode
).
关于插件的更多说明可参阅:VSCode插件说明
寄存器标志位小实验
实验1 查看寄存器CF标志
在msdox
一个小实验,去查看标志寄存器的CF
(全名carry flag
)状态。CF
用于标记是否进位.在Debug
工具下NC
表示当前没有进位,YC
表示进位
上图右上角NC
便是此标志位的状态.我们模拟一个小实验让其NC
变为YC
.
我们8080
的al
和bl
寄存器是单字节大小进行如下运行会产生进位:aa(H)+7c(H)=126
实验2 查看寄存器ZF标志
ZF
(zero flag
)用于标记两数进行运算结果为0
,比如84H+7CH
=(1)00H。
在Debug
工具NZ
标识不为0
,ZR
表示运算结果为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
: 数据段
当进行类似如下汇编指令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
寄存器比较特殊他一般与SS
和SP
一起使用。一般来说mov [BP],ax
,[BP]会指向ss段数据加上BP的数值的偏移
实验3:
指定段基址
mov ds:[bp],操作数二
对于mac用户目录地址为:
/Users/lizhifm/Library/Application Support/Code/User/globalStorage/xsro.masm-tasm/workspace
windows:
C:\\Users\\fmy\\AppData\\Roaming\\Code\\User\\globalStorage\\xsro.masm-tasm\\workspace
以上是关于MsDos下的Debug调试器与8080汇编小实验的主要内容,如果未能解决你的问题,请参考以下文章