【发布时间】:2015-07-31 14:37:50
【问题描述】:
我得到了 CS、DS、SS、ES、SP、BP、SI、DI、AX、BX、CX、DX 的寄存器值。我将如何查找代码段的十六进制字节大小?
【问题讨论】:
-
我碰巧不同意重复问题中的答案。我在这里非常支持 Serge 的回答,只是说所有片段都是 64kb。即使一个 Segment 等于 0xFFFF,它仍然是 64kb 并且环绕到内存的底部。
我得到了 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)。但是处理器不知道代码段的实际大小。没有内存保护,允许在代码段中间写入数据(根据程序员是否知道原因,可能是对还是错:-()。
曾经有不同的常用内存模型(参考:8086 Memory Model):
所以:
【讨论】: