16汇编_段寄存器
一、8086CPU 如何获得寻址1MB内存空间能力?
1、物理空间;8086CPU,寻址总线20根,宽度=2^20=1MB;00000H-FFFFFH;
2、通过对存储器分段和使用段寄存器,
实现了寻址1MB物理空间能力;
二、物理内存1MB内部划分的逻辑是什么?
首先根据寻址需求,将1MB物理地址空间分为若干个逻辑段。每个逻辑段必须满足两个条件:
1、逻辑段的开始地址为16的倍数;
2、逻辑段的最大长度为64K 1MB地址最多划分64K个逻辑段,最少划分为16个逻辑段。
第一个条件因为段寄存器长度为16位,第二个条件因为指针寄存器长度16位。
段逻辑段与逻辑段可以相连,也可以不相连,还可以重叠。
逻辑地址表示方法:段值:偏移
偏移:由指针寄存器提供
三、为何要用这种段值:偏移;的方式来表示逻辑地址呢?
1、有利于实现寻址1MB空间;
2、有利于管理存储空间;
3、实现程序的重定位和浮动;(如果没有逻辑段,直接绑定让程序绑定物理地址,那样其它程序就无法运行了;)
4、实现代码 数据的隔离;充分利用存储空间;可以重叠,重合;
四、如何保证程序代码加载各种平台通用性?
段+偏移,解决
实现
1、写代码先定义逻辑段
2、在用偏移指向具体的存储单元
这样在不同的机器加载时,先把物理地址划分成若干个逻辑段;让在用指针指向这个段的偏移,这样就保证了代码寻址的正确性;这样程序就做到通用,这也叫程序的重定位和浮动
五、物理地址和逻辑地址映射关系?
段的本质:(段寄存器)基础地址(起始地址*16)+ 偏移地址 = 物理存储单元



六、段寄存器内部分类
- CS代码段:编程时,根据需要,将一组内存单元定义为一个段。我们可以将长度为N(N<=64KB) 的一组代码,存放在一组地址连续、起始地址为16的倍数的内存单元中,这段用来存放代码的 内存就称为代码段。
- DS数据段:同上,这段用来存放数据的内存称为数据段。
- SS堆栈段:8086CPU提供相关指令以栈的方式访问的内 盒子存空间,称为堆栈。LastinFirstOut,后进先出规则。程序员自己分配的内存空间为堆,8086最大64KB,系统自动分配为栈,程序员不设置的情况下,默认由操作系统提供。Windows系统 默认为2M大小,LINUX默认8M大小。
- ES附加段:为了方便复杂数据寻址和操作,增加定义一个 数据段空间。32位汇编多了2个附加段。

浙公网安备 33010602011771号