因此,在我进入大会的过程中,我对这个实模式二进制文件中的一件事情“不知道”。
这是从9FB00-> 90000准备堆栈。我遵循的指南假设我对段有所了解,我希望能得到关于9000-> 90000的解释。
[BITS 16]
[ORG 0x7C00]
jmp 0x0:Start
Start:
cli
;<<<ZONE IN QUESTION>>>
mov AX,0x9000
mov SS,AX
;<<<ZONE IN QUESTION>>>
mov SP,0xFB00
sti
cli
hlt
times 510 - ($ - $$) db 0 ;nasmgasm
dw 0xAA55
答案 0 :(得分:1)
实模式下的x86寄存器包括正常的处理器寄存器集和一组额外的段寄存器,所有这些寄存器都是16位长。为了将地址空间扩展到64kb以上,段寄存器与其他地址寄存器相差4位,最终地址通过将地址寄存器(在您的情况下为堆栈指针)添加到段寄存器(SS为您的问题)来计算< / p>
因此你得到:
SS = 9000 ; offset 4 bits
SP = FB00
=====
9FB00 ; Final address in actual memory space.
一旦您离开实模式,32位寄存器可用,这将大大扩展。