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
.
我们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
: 数据段
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
寄存器比较特殊他一般与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汇编小实验相关推荐
- openstack windows下远程debug调试(komodo)
2019独角兽企业重金招聘Python工程师标准>>> 感谢朋友支持本博客,欢迎共同探讨交流,由于能力和时间有限,错误之处在所难免,欢迎指正! 如有转载,请保留源作者博客信息. Be ...
- 在W10系统下进行Debug调试功能
文章目录 前言 一.DOSBox.Debug的下载与安装 1.下载并安装DOSBox 2.下载Debug 3.配置DOSBox文件 4.运行DOSBox 二.汇编学习中常用到的Debug功能 前言 本 ...
- Visual Studio在Release模式下开启debug调试,编译器提示变量已被优化掉,因而不可用
系列文章目录 文章目录 系列文章目录 前言 一.解决办法 1.修改工程属性 参考 前言 我们在编写代码的时候,如果用到别人的库,而别人只提供了release版本,所有我们也只能生成release版本的 ...
- C语言: ---windows下VS Debug调试
首先我先列出来常用的一些命令或者键盘控制: F5 开始调试,执行到断点 Shift + F5 停止调试 F9 在光标所在行添加断点 Shift + F9 QuickWatch Shift Ctrl F ...
- Linux下打开Android调试器DDMS的方法
第一步:找到monitor可执行文件. 切换到目录路径:/home/skart/ide/android/sdk/tools/lib/monitor-x86_64,可以找到monitor可执行文件. 第 ...
- 天热,周末宅家,写了个BUG满天飞的Debug调试器
如题,放出截图MARK一下:
- pdb—Python调试器
pdb-Python调试器 在python 3.8文档 Python 常用指引中已经详细介绍了pdb模块,此处为引用官方文档 该模块pdb为Python程序定义了一个交互式源代码调试器.它支持在源代码 ...
- Python调试器-Pdb的简介及调试命令
Pdb简介 pdb为Python程序定义了一个交互式源代码调试器.它支持在源代码行级别设置(条件)断点和单步执行,检查堆栈框架,源代码列表以及在任何堆栈框架的上下文中评估任意Python代码.它还支持 ...
- python:pdb --- Python 的调试器
python:pdb --- Python 的调试器 pdb 模块定义了一个交互式源代码调试器,用于 Python 程序.它支持在源码行间设置(有条件的)断点和单步执行,检视堆栈帧,列出源码列表,以及 ...
- 自制基于jlink的无线调试器
一.无线调试器说明 许多单片机支持使用SWD与JTAG接口在线仿真调试,但很多场景下(如无人机.移动机器人),我们没有办法在设备运行的过程中将线缆插到设备上进行有线调试,这时候一个可以远程debug和 ...
最新文章
- 基于NEO的私链(Private Blockchain)
- java抛异常 代替返回_请问业务层方法是抛出一个异常好还是返回一个结果更好...
- Java学习--设计模式之创建型模式
- sql语句的经典练习
- 工程师的基本功是什么?如何练习?听美团技术大咖怎么说
- Struts2的Action访问Session对象的两种方式及原理
- 小米笔记安装双系统linux,小米笔记本电脑怎么安装双系统?-小米win7
- Matlab:数据包络分析(DEA)入门教程
- 知识付费APP的崛起
- Android O 收音机学习研究(基于Car)
- static全局变量与普通的全局变量
- mysql里面的时间函数
- 【产业互联网周报】销售易获腾讯1.2亿美元投资;国科恒泰完成11亿C轮融资;工信部、科技部推进大数据及人工智能...
- 概率论知识回顾(二十):随机变量序列收敛性
- kali清理_白帽子教你Kali Linux:如何远程清除计算机日志信息防范被追踪?
- Mint UI—loadmore—Pull down下拉刷新将下拉刷新的箭头标志更换成其他图片(图文)
- ArcGIS操作系列10- Arcmap 中矢量图层面积的计算方法
- 我国长征系列航天飞船剖解
- 《生物化学与分子生物学》----酶的作用机理和酶的调节----听课笔记(十一)
- 深入浅出c++协程丨C++协程实现
热门文章
- ios textView输入框光标问题
- android 设置gps波特率,GPS端口、波特率设置原理详解(GPS如何搜星,波特率对传输速度和精度的影响)...
- 决定人生的三种成本:机会成本,沉没成本,边际成本
- 智能电视机顶盒开发记录
- 每个人都应该具备点批判性思维
- wps批量删除sheet 批量删除工作簿
- html怎么用2个caption不换行,caption怎么用
- 监督学习、无监督学习、半监督学习、强化学习、自监督学习
- 夏普(SHARP) LS050T1SX01 液晶屏接口定义
- JavaScript中的onmouseover事件和onmouseout事件实例