8086代码段的大小

时间:2015-07-31 14:37:50

标签: assembly intel x86-16

我获得了CS,DS,SS,ES,SP,BP,SI,DI,AX,BX,CX,DX的寄存器值。我如何找到代码段的十六进制字节大小?

1 个答案:

答案 0 :(得分:2)

你不能。

8086现在已经过时了,但有些龙龙还记得它。它是一个16位处理器,但地址为20位:4段寄存器(CS,DS,ES和SS)的值移位4,并将偏移量加到其中。总可寻址内存为1 MB。

任何段的最大大小为65536字节(0x10000)。但是处理器不知道代码段的实际大小。没有内存保护,允许在代码段的中间写入数据(可能是对还是错,取决于程序员是否知道原因:-()。

曾经有不同的常见内存模型(参考:8086 Memory Model):

  1. 微小:CS = DS = SS = ES:总程序使用1个单段并限制为64k字节
  2. 小:一个代码段和一个数据段。数据和代码均使用近寻址(16位)。
  3. 压缩:代码的单个段,数据没有限制:寻址附近使用的代码(16位),远位寻址使用的数据(32位:段+偏移)
  4. 中:数据的单个段,代码没有限制
  5. 大:代码和数据无限制
  6. 所以:

    • 段的最大代码为64千字节,但使用的大小可能小于
    • 代码可以根据需要使用尽可能多的段(对于中型和大型),每个段的大小小于64k