简单知识背景
cpu组成:
- 运算器进行运算处理
- 寄存器用来存储数据
- 控制器控制各个器件工作
- 内部总线进行连接
例如一个常规的数值加法操作,首先需要cpu通过地址找到对应的内存地址,然后发送读指令,将对应地址的内存数据读取到寄存器,然后通过cpu的加法运算器进行加法运算,并将结果保存在寄存器中,最后再放回内存中。
其中寄存器很重要,为什么cpu不直接读取内存,计算写到内存,是因为寄存器的读取速度更快,每次运算都经过内存,会对cpu数据的io瓶颈,所以需要先将数据存放在寄存器中,经过大量的加减乘除运算,得到最终结果后再写入内存中。
寄存器
全部都是用来存储数据的,根据存储信息的用途不同而进行分类,首先是通用寄存器
,用来存放普通数据。
在8086中AX,BX,CX,DX都是通用寄存器,可以存放16位数。另外每个寄存器又可以分成高位和低位2个寄存器使用,例如AX可以分成AH,AL,BX可以分为BH,BL
8086寻址与段寄存器:
8086出于cpu寻址范围不够以及地址灵活管理的需要采用:段地址16+偏移地址=物理地址的方式进行寻址,例如:2000H16+1F60H = 21F60H(H代表16进制)
这样管理的好处是:可以将连续的内存地址,根据段地址分成不同段,方便按段进行管理,例如可以把数据和代码分别存放在不同段里面,各自进行管理
在内存中的数据全部都是1010这样的数字,是无法判断到底这片内存区域存放的是数据,还是代码。需要引入cs,ip寄存器。cs指向代码段地址,ip指向代码段的偏移地址,cpu永远都是执行cs:ip位置的代码,然后将ip+=指令长度,这样就可以一句一句的执行下去了。
例如:当cs=2000H,ip=1F60H,cpu把21F60H位置的数据当做代码执行
8086调试工具在mac上面的安装及使用:
安装
1,在mac上面安装8086模拟器
brew install dosbox --cask
2,下载调试工具链接,提取码: 428y
3,打开dosbox
4,mount调试工具,mount c $path,最后的路径填写下载的调试工具的路径
5,输入c:,然后回车,切换到盘符c下面,然后输入dir回车,可以看见对应的调试工具文件下面的文件
debug使用
1,输入debug,回车,可以进入调试模式
2,然后输入r,回车,可以显示8086各个寄存器的数据
3,上图,可以看出cs=073f,ip=0100的,将此处将要执行的代码通a指令改下面执行逻辑就可退出debug
mov ax,4c00
int 21h
debug 的使用
R 查看、改变 CPU 寄存器的内容
D 查看内存中的内容
E 改写内存中的内容
U 将内存中的机器指令翻译成汇编指令
T 执行一条机器指令
A 以汇编指令的格式在内存中写入一条机器指令