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)+ 偏移地址 = 物理存储单元

  

  

六、段寄存器内部分类

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

 

posted @ 2022-09-05 18:37  龍飛鳳舞劍無痕  阅读(213)  评论(0)    收藏  举报