Intel 8086 CPU
1. 段寄存器的产生
- 段寄存器的产生源于Intel 8086 CPU体系结构中数据总线和地址总线的宽度不一致。
- 数据总线的宽度,也即是ALU(算数逻辑单元)的宽度,平常说一个CPU是“16位”或者“32”位指的就是这个。
- 8086CPU的数据总线是16位。可寻址范围是2^16=64KB。
2. 段寄存器的特点
- 每一个段有一个段基址,当然,段基址也是一个20位的内存地址。
- 不过段寄存器仍然是16位的,它的内容代表了段基址的高16位,这个16位地址后面再加上4个0就构成了20位的段基址。
- 原来的16位地址只是段内的偏移量。
- 1M的寻址空间,需要有20根地址总线。
分成4个段,那么平均每个段256KB。
原来的16位地址是段内偏移量,那么偏移量是2^16=64KB。
一个段,256KB,一个段基址+MAX(偏移量)64KB,还是不能够寻完256KB。
猜想:一个段,段基址最少是4个数值,每次偏移64KB,达到最大寻址范围64KB*4=256KB。
3. 段寄存器的分类
- CS段(Code Segement) 代码段
- DS段(Data Segement ) 数据段
- SS段(Stack Segement) 堆栈段
- ES段(Extra Segement) 附加段
4. 段寄存器的作用
段寄存器(CS、DS、SS和ES)保存16位的段选择子。
一个段选择子是标志内存中一个段的特殊指针。
CS段
- CS寄存器包含代码段的段选择子,其中存放正在执行的指令。
- 处理器用在CS寄存器中的段选择子和IP寄存器中的内容,作为逻辑地址取下一条要执行的指令。
- 即取指令部件,用到了代码段寄存器CS和指令指针寄存器IP。
- 注意:CS段寄存器不能由应用程序直接加载。
- 应用:
Q:段寄存器CS=1200H,指令指针寄存器IP=FF00H,此时,指令的物理地址为多少?
A:物理地址=CS+IP=1200H+FF00H=11100H
DS段
- DS
SS段
- SS段寄存器包含堆栈段的段选择子。
- 所有的堆栈操作都通过SS找到堆栈段。
ES段
5. 与汇编语言的联系(重要)
- 当写应用程序代码时,程序用汇编程序的命令和符号 建立 段选择子。
即汇编语言建立一个段的特殊指针,建立指针。 - 然后汇编程序或其他的工具建立与这些命令和符号相关的实际段选择子。确定实际指针的值。
- 若写系统代码,程序员可能需要直接建立段选择子。