文章目录
前言
- 各位师傅大家好,我是qmx_07,今天给大家讲解 十六位汇编 和 debug调试器的使用
硬件运行机制
-
为什么计算机的数据操作单位是二进制 呢?
-
通过电子二极管,正向加电则通,反向加电则不通,得到 0 和 1
-
根据电子二极管的特性,得到以下门电路:
在计算机底层,加减乘除的运算就是由 与 或 非 三种运算构成
-
更高级的数学运算也可以通过简单的位运算计算,将常用运算封装成一个器件,称之为单元 。
-
机器码:类似111111000010101010B,可以用来控制硬件的二进制数据,叫做机器码。
-
助记符(Mnemonic) :二进制值难记,每种功能的二进制控制码取一个容易记住的名字,叫做助记符,也称之为指令 例如,00B - add 01B - sub
-
汇编:将助记符 通过汇编器 转成机器码
微机系统硬件组成
- 一个系统不可能由一个硬件单独完成,所以划分出多个硬件模块,然后由一个硬件模块居中调度,称作cpu
- 单片机 :
- I/0桥 :所有的硬件模块连接到I/O桥,由I/O桥负责辅助cpu与哪一个硬件模块连接
- 总线 :cpu有8位数据/地址线,ram是个256byte的存储器
计算机系统组成
计算机分层:
计算机编译过程:
- 执行
-
8086cpu组织架构
- 8086架构图
EU部件 :1. 执行部件(excution unit) 2. 译码 3. 执行指令
BIU部件 :1. 总线接口部件(bus interface unit) 2. 取指令 3. 读取数据 4. 写入数据
寄存器 :
流水线处理: - 8086cpu将指令的执行分成多个模块,有什么好处?
可以多个部件同时工作,提高硬件的利用率,从而提高效率
在8086 CPU架构下,串行处理和流水线处理是两种不同的指令处理方式:
- 串行处理: 串行处理是指在执行指令时,逐条顺序地执行指令。当一条指令执行完成后,才能开始执行下一条指令。这种处理方式的特点是简单直观,易于理解和调试,但效率相对较低。因为在串行处理中,指令之间存在时钟周期的间隔,导致CPU的运行效率受限。8086 CPU在早期的时候主要采用串行处理方式
- 流水线处理: 流水线处理是指将指令处理过程划分为多个阶段,并在不同阶段同时执行不同的指令。每个阶段负责完成指定的任务,然后将结果传递给下一个阶段。这样可以实现多个指令的并行处理,提高CPU的执行效率。流水线处理利用了指令的部分并行性,有效地利用了CPU资源。8086 CPU在后期引入了流水线处理的技术,提高了指令的执行速度
在8086 CPU中,流水线处理主要包括以下几个阶段:
- 取指令阶段(Instruction Fetch):从内存中读取指令,并将其存储在指令缓存中。
- 译码阶段(Instruction Decode):对取得的指令进行解码,确定指令的操作类型和操作数。
- 执行阶段(Execution):根据指令的类型执行相应的操作,比如算术运算、逻辑运算等。
- 存储阶段(Memory Access):若指令需要访问内存或外设,则在此阶段进行数据的读取或写入。
- 写回阶段(Write Back):将执行结果写回寄存器或内存。
效率 :流水线处理 > 串行处理
弊端:当跳转到总线使用的时候,此时已经取得一部分指令,并且已经译码了.那么此时这部分将清空,从头操作,类似于goto语句
dosbox安装
- 介绍:模拟DOS环境,执行旧的dos程序
链接:https://pan.baidu.com/s/141agLfQWdAnmK24WTdtOfw?pwd=sds3
提取码:sds3
- 选择合适的下载路径,安装dosbox环境
配置debug
1.mount c f:\dosbox\
- 将f:\dosbox\ 这个路径,挂载为虚拟c盘
2.c:
- 切换为c盘使用
- 将debug程序 放进f:\dosbox\路径下
- 通过 options.bat程序,就可以自动挂载磁盘
dos基础命令:
bash
#cd\ ------首先要用cd\ 退回到根目录C>下
#dir ------显示文件列表
#md hb ------建立hb子目录
#cd hb ------进入hb子目录
#copy d:\dos\masm.exe c:\hb ------将D盘dos目录下的masm.exe拷贝到C盘hb目录下
#copy d:\dos\link.exe c:\hb ------将D盘dos目录下的link.exe拷贝到C盘hb目录下
#cd .. ------退回到上一级目录
#del \hb\masm.exe ------删除hb子目录中的某文件
#rd hb ------删除hb子目录(子目录中的所有文件必须先删除)
#e:------进入e盘
#cls ------清屏
#type------显示文本文件内容(如type c:\hb\abc.asm)
debug使用
- 介绍:debug是微软公司出品的调试工具,可以调试0环和3环
- 作用:深入机器内部观察,修改观察寄存器等值的内容
- 基本功能介绍:
R命令:查看、改变CPU寄存器的内容
D命令:查看内存中的内容
E命令:改写内存中的内容
U命令:将内存中的机器指令翻译成汇编指令
T命令:执行一条机器指令
A命令:以汇编指令的格式在内存中写入一条机器指令
Q命令:退出
R命令
- 查看CPU寄存器的内容[R]
- 修改寄存器中的值[R 寄存器]
D命令
- 查看内存中的内容【D 段地址:偏移地址】
- 指定范围查看内存中的内容【D 段地址:起始偏移地址 结尾偏移地址】
左侧为每行的内存单元起始地址
中间为128个内存单元的内容,用十六进制的格式输出
右侧为每个内存单元中的数据对应的可显示的ASCII码字符
E命令
- 修改内存中的内容【E 段地址:偏移地址】
- 一次性修改多个内存中的内容【E 段地址:偏移地址 值1 值2 ...】
U命令
- 将内存中的机器指令翻译成汇编指令【U 段地址:偏移地址】
U命令的显示输出分为三部分:
左侧为机器指令的地址
中间为机器指令
右侧为机器指令所对应的汇编指令
T命令
- 执行一条或多条指令【T】,类似于VS调试中的F11
- 执行的命令为CS:IP指向的指令
A命令
- 以汇编指令的形式在内存写入机器指令【A 段地址:偏移地址】
- Debug会将这些汇编指令翻译成对应的机器指令,将它们的机器码写入内存,在给出的起始地址后面直接按Enter键表示操作结束
标志寄存器
条件标志:
- CF 进位标志 :用于反映运算是否产生进位或借位。如果运算结果的最高位产生一个进位或借位,则CF置1,否则置0。运算结果的最高位包括字操作的第15位和字节操作的第7位。移位指令也会将操作数的最高位或最低位移入CF。
- PF 奇偶标志 :用于反映运算结果低8位中"1"的个数。"1"的个数为偶数,则PF置1,否则置0。
- AF 辅助进位标志:算数操作结果的第三位(从0开始计数)如果产生了进位或者借位则将其置为1,否则置为0,常在BCD(binary-codedecimal)算术运算中被使用。
- ZF 零标志 :用于判断结果是否为0。运算结果0,ZF置1,否则置0。
- SF 符号标志 :用于反映运算结果的符号,运算结果为负,SF置1,否则置0。因为有符号数采用补码的形式表示,所以SF与运算结果的最高位相同。
- OF 溢出标志 :反映有符号数加减运算是否溢出。如果运算结果超过了8位或者16位有符号数的表示范围,则OF置1,否则置0。
控制标志:
TF 跟踪标志 :当TF被设置为1时,CPU进入单步模式,所谓单步模式就是CPU在每执行一步指令后都产生一个单步中断。主要用于程序的调试。8086/8088中没有专门用来置位和清零TF的命令,需要用其他办法。
IF 中断标志 :决定CPU是否响应外部可屏蔽中断请求。IF为1时,CPU允许响应外部的可屏蔽中断请求。
DF 方向标志 :决定串操作指令执行时有关指针寄存器调整方向。当DF为1时,串操作指令按递减方式改变有关存储器指针值,每次操作后使SI、DI递减。
进位针对的是无符号数运算,溢出针对的是有符号数运算。
当看成无符号数,则关注CF标志,看成有符号数,则关注OF标志。
总结
- 介绍了计算机中硬件的运行原理,计算机系统组成,8086cpu的组织架构,debug的基础使用,以及标志寄存器的讲解