Assembly 8086代码段的大小

Assembly 8086代码段的大小,assembly,intel,x86-16,Assembly,Intel,X86 16,我得到了CS、DS、SS、ES、SP、BP、SI、DI、AX、BX、CX、DX的寄存器值。如何查找代码段的十六进制字节大小?您不能 8086现在已经相当过时了,但有些龙还记得它。这是一个16位的处理器,但有20位的地址:4段寄存器(CS、DS、ES和SS)的值移位了4位,偏移量被添加到其中。总可寻址内存为1 MB 任何段的最大大小为65536字节(0x10000)。但处理器不知道代码段的实际大小。没有内存保护,它被允许在代码段的中间写入数据(可能是正确的或错误的),这取决于程序员知道为什么:-(

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

您不能

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

任何段的最大大小为65536字节(0x10000)。但处理器不知道代码段的实际大小。没有内存保护,它被允许在代码段的中间写入数据(可能是正确的或错误的),这取决于程序员知道为什么:-()、

过去有不同的通用内存模型(参考:):

  • Tiny:CS=DS=SS=ES:整个程序使用了一个单独的段,限制为64k字节
  • 小:一个代码段和一个数据段。数据和代码都在寻址附近使用(16位)
  • 紧凑型:一段代码,数据不受限制:代码用于近寻址(16位),数据用于远寻址(32位:段+偏移)
  • 中等:一段数据,代码不限
  • 大型:对代码和数据没有限制
  • 因此:

    • 段的最大代码为64KB,但使用的大小可能更小
    • 代码可以根据需要使用任意多的段(对于中型和大型模型),每个段的大小都小于64k

    可能的重复我碰巧不同意重复问题中的答案。我在这里非常支持Serge的答案,只是说所有的段都是64kb。即使一个段等于0xFFFF,它仍然是64kb,并环绕到内存的底部。我在很大程度上同意你的观点,但我认为任何段的大小始终为64kb(8086上的段大小一次也不能更改),您可以说任何段的最大大小为65536字节(0x10000),我建议一个段的大小始终等于64kb,正如您所指出的,您甚至无法计算8086上使用了多少。这个问题似乎与另一个问题重复,其中建议可以计算代码段,我完全不同意。@MichaelPetch:您所说的段是可以从一个段寻址的内存基址寄存器,这确实是8086上的64k!我要问的(以及参考问题-很好的选择)调用段是链接器声明为段的,此段限制为64k。现在假设程序使用小内存模型,并假设CS