1,一个典型的CPU由运算器,控制器,寄存器等器件组成,这些器件靠内部总线相连。
内部总线实现CPU内部各个器件之间的联系。外部总线实现CPU和主板上其它器件的联系。
2,8086CPU简单介绍
8086CPU,寄存器都是16位的,能够存放两个字节。AX,BX,CX,DX我们称之为通用寄存器。
一个16位寄存器能存放的数据最大值是多少?答案:2^16-1
AX可以分为:AH AL
一个字可以存放在一个16位寄存器中,那么字的高位以及低位就自然存储在寄存器中相应的高位以及低位中。
一个字等于两个字节!
汇编指令不区分大小写!
AX AH AL 三者并无联系。注意区分!
做监测点2.1https://blog.csdn.net/weixin_42859280/article/details/106780472
一般将唯一的地址称为物理地址。
运算器一次最多可以处理16位的数据;寄存器的最大宽度为16位;寄存器和运算器之间的通路是16位的。
8086有20位地址总线,可以传送20位地址,寻址能力为1M;但是8086只能16位,那么只能通过地址合成来形成20位地址。
图:
物理地址=段地址*16+偏移地址【16进制数据,乘以16就会向左移动一位!】
如果,你希望告诉一个人,2860。如果你有一个可以写下4位数的纸条自然,很好。
但是,如果你只有两个能够写下三位数字的纸条。那么,你就需要告诉别人。记得进行这样的计算:
200乘以10,再加上另外一个纸条的860。就可以得到你想要的东西啦!
错误的认识:内存被划分为一个一个的段,每一个段都有一个段地址。
其实内存并没有分段,段的划分来自于CPU,由于“物理地址=段地址*16+偏移地址”。我们可以通过使用分段的方式来管理内存!
注意两点:
小例子:
给定段地址1000H,用偏移地址进行寻址,CPU的寻址范围为:10000H-1FFFFH。
就是乘以16,然后加上:0~FFFFH。
做监测点2.2:https://blog.csdn.net/weixin_42859280/article/details/106780472
CS [代码地址],DS [数据地址],SS [堆栈地址],ES [存放当前执行程序中一个辅助数据段的段地址]
CS:代码段寄存器;IP:指令指针寄存器。
8086PC工作过程:
8086CPU,加电启动或者复位后,CS,IP分别被设置为:FFFFH,0000H
根据计算过程,CPU就会先从内存FFFF0H单元中读取指令执行。故而,FFFF0H单元中的指令
就是8086PC机开机执行的第一条指令。
JMP同时修改CS和IP。
代码段定义
CPU只认被CS:IP指向的内存单元中的内容为指令。
做检测点:2.3
实验一:
https://www.bilibili.com/video/BV1Rs411c7HG?p=11
https://www.bilibili.com/video/BV1Rs411c7HG?p=12
win10对应的解决办法:win10环境下 运行debug程序