所以在我寻求跳入汇编的过程中,我在这个真实模式二进制文件中"hlt"了一件事。
这是在准备一个从 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
实
模式下的x86寄存器包括正常的处理器寄存器集和一组额外的段寄存器,所有这些寄存器都是16位长。为了将地址空间扩展到64kb以上,段寄存器与其他地址寄存器偏移4位,并且通过将地址寄存器(在本例中为堆栈指针)添加到段寄存器(SS为您的问题)来计算最终地址
因此,您可以得到:
SS = 9000 ; offset 4 bits
SP = FB00
=====
9FB00 ; Final address in actual memory space.
一旦您离开实模式,当 32 位寄存器可用时,这将大大扩展。