2013-04-15 26 views
0

由於地址XXXX:YYYYYYYY是在保護模式下32位,我把48位地址在一塊內存,想給間接jmp,這裏是我寫的:關於間接JMP問題,在保護模式下

mov eax,s1 
mov [address],eax 
mov ax,SelectorCode32 
mov [address+4],ax 
jmp fword [address] 

address:dd 0 
     dw 0 

但nasm顯示jmp fword [address]是錯誤的,我讀過一些建議,如this,但也沒有幫助,所以我該怎麼辦?

+0

看到[這個](http://en.wikipedia.org/wiki/FWord),在我的情況下,一個方法選擇一個正確的tss到jmp,所以地址在運行前是未知的,所以jmp xxxx: yyyyyyyy是無用的。 – reavenisadesk

+0

@AkiSuihkonen你錯了。你說的是'JMP ptr16:32'形式,但也有'JMP m16:32'。請參閱您的英特爾或AMD手冊。 –

+0

納斯姆是一個不錯的家庭裝配者,不知道這個詞。 :)只要'jmp far [address]'應該這樣做。如果它不在32位代碼中,可能是'jmp far dword [address]'。 –

回答

2

近距離和遠距離通話的NASM語法不同於TASM和MASM的語法。

這裏是間接跳轉兩個選項:

jmp [fptr] ; jump to CS:0x12345678 
jmp far [fptr] ; jump to 0xABCD:0x12345678 

fptr dd 0x12345678 
    dw 0xABCD 

您也可以隨時推遠地址到堆棧,做retf

+0

這是否意味着在程序運行之前,它本身已經知道在哪裏跳轉?如果在運行後更改地址,該怎麼辦? – reavenisadesk

+0

我不明白這個問題。 –

+0

對不起我的英語很差,讓我這樣問:如果我更改[FPTR]它運行後,將程序跳轉到我給了他新的地址?我的目的是,當程序運行時,我使cpu jmp成爲一個tss,比我換另一個tss2,它會跳轉到tss2嗎? – reavenisadesk