程序集堆栈基础知识



所以在我寻求跳入汇编的过程中,我在这个真实模式二进制文件中"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 位寄存器可用时,这将大大扩展。

相关内容

  • 没有找到相关文章

最新更新