一、CPU概述
1、一个典型的CPU由运算器、控制器、寄存器等器件组成,这些器件靠内部总线相连。
2、内部总线实现CPU内部各个器件之间的联系;外部总线实现Cpu和主板上其它器件的联系
二、寄存器概述
1、8086CPU有14个寄存器,它们名称为:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW
2、8086CPU所有的寄存器都是16位的,可以存放两个字节,1个字
3、AX、BX、CX、DX通常用来存放一般性数据被称为通用寄存器。
4、通用寄存器逻辑结构:
5、一个16位寄存器可以存储一个16位的数据
数据:2000
寄存器AX中的存储:
6、8086上一代CPU中的寄存器都是8位的;为保证兼容性,这四个寄存器都可以分为两个独立的8位寄存器使用
AX可以分为AH 和 AL 高位 低位;
AH和AL寄存器都是可以独立使用的8位寄存器
三、字在寄存器中的存储
一个字可以存在一个16位寄存器中,这个字的高位字节和低位字节自然就存在这个寄存器的高8位寄存器和低8位寄存器中。 1word=2Byte=16bit
四、几条汇编指令
汇编指令 | 控制CPU完成的操作 | 用高级语言的语法描述 |
mov ax,18 | 将18送入AX | AX=18 |
mov ah,20 | 将20送入AH | AH=20 |
add ax,8 | 将寄存器AX中的数值加8 | AX=AX+8 |
mov ax,bx | 将寄存器BX中的数据送入寄存器AX中 | AX=BX |
add ax,bx | 将AX,BX中的内容相加,结果存在AX中 | AX=AX+BX |
汇编语言不分大小写!
四、物理地址
1、 CPU访问内存单元时要给出内存单元的地址。所有的内存单元构成的存储空间是一个一维的线性空间
2、概括的讲,16位结构描述一个CPU具有以下几个方面特征:1>运算器一次最多可以处理16位的数据;2>寄存器的最大宽度为16位;3>寄存器和运算器之间的通路是16位
3、8086有20位地址总线,可传送20位地址,寻址能力为1M;8086内部为16位结构,它只能传送16位的地址,表现出的寻址能力却只有64k。
4、地址加法器合成物理地址的方法:物理地址=段地址*16+偏移地址
五、8086CPU给出物理地址的方法
1、CPU中的相关部件提供两个16位的地址,一个称为段地址,另一个偏移地址;
2、段地址和偏移地址通过内部总线送入一个称为地址加法器的部件;
3、地址加法器将两个16位地址合并成一个20位的地址
六、由段地址引发的讨论
1、一个数据的二进制形式左移1位,相当于该数据乘以2;
2、一个数据的二进制形式左移N位,相当于该数据乘以2的N次方;
3、地址加法器如何完成段地址*16的运算呢? 以二进制形式存放的段地址左移4位。
4、一个数据的十六进制形式左移1位,相当于乘以16;一个数据的X进制形式左移1位,相当于乘以X
七、段的概念:
1、错误认识:内存被划分成一个一个的段,每一个段有一个段地址。
2、其实:内存并没有分段,段的划分来自于CPU,由于8086CPU用“(段地址*16)+偏移地址=物理地址”的方式给出内存单元的物理地址,使得我们可以用分段的方式来管理内存。
3、再变成时可以根据需要,将若干地址连续的内存单元看作一个短,用段地址*16丁未断的起始地址(基础地址),用偏移地址定位段中的内存单元。
4、数据在21F60H内存单元中,对于8086PC机的两种描述:a>数据存在内存2000:1F60单元中;b>数据存在内存的2000段中的1F60H单元中。
八、需要注意两点:
1>段地址*16必然是16的倍数,所以一个段的起始地址也一定是16的倍数;
2>偏移地址为16位,16位地址的寻址能力为64KB,所以一个短的长度最大为64KB;
九、内存单元地址:
1、CPU访问内存单元时,必须向内存提供内存单元的物理地址;
2、8086CPU在内部用段地址和偏移地址以为相加的方法形成最终的物理地址。
十、思考两个问题:
1、观察下面的地址,读者有什么发现?
结论:CPU可以用不同的段地址和偏移地址形成同一个物理地址
2、如果给定一个段地址,仅通过变化偏移地址来进行寻址,最多可以定位多少内存单元?
结论:偏移地址16位,变化范围为0~FFFFH,仅用偏移地址来寻址最多可寻64K个内存单元。
比如:给定段地址1000H,用偏移地址寻址,CPU的寻址范围为1000H~1FFFFH