2013-10-20 28 views
0

所以對我的追求跳進大會,我已經「HLT」'd一件事在此實模式下的二進制..大會棧基礎

這是從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 

回答

1

在實模式下的x86寄存器包括正常組的處理器寄存器,以及另外一組的段寄存器,所有這些都是16位長。爲了將地址空間擴展到64kb以上,段寄存器與其他地址寄存器偏移4位,最後的地址通過將地址寄存器(您的情況下的堆棧指針)添加到段寄存器(您的問題的SS)來計算

這樣你可以獲得:

SS = 9000 ; offset 4 bits 
SP = FB00 
    ===== 
    9FB00 ; Final address in actual memory space. 

這一旦你離開實模式爲32位寄存器可用被大大延長。

+0

完美謝謝 – user2859337

+0

當段值非常高時,似乎有幾乎64kB的重疊。像這樣的內存區聽起來像一個免費的額外空間的魔力領域。 –