2016-11-25 84 views
0

此代碼在實模式下工作。 我有這樣的例子: 這段代碼去0x001FFD50地址。如何在REAL模式下將彙編程序返回到32位地址?

... 
001F066F: push  es 
001F0670: push  0FD50 
001F0673: retf ^^^^^^ 
001F0674: push  00051 
... 

在那之後,我有這樣的代碼:

我需要回到0x001F0674地址。

... 
001FFE91: push  00674 
001FFE94: retn ^^^ 
... 

但不是說,我去0x0674地址。如何在實模式下返回0x001F0674地址?

+3

您需要使用'retf'切換段。只需使用你的第一個例子,但顯然是'推0x001F'而不是'es'。或者,如果'es'仍然包含'0x001F',那麼你甚至可以保留它。 – Jester

+3

第二次看,你似乎在同一個細分市場,所以你的代碼應該實際工作,因爲你不需要切換段。 – Jester

+1

我假設你到處都有類似'0x001FFD50'的東西,你的意思是'0x001F:0xFD50'我問,因爲如果是這種情況,那些不是32位地址,它們是segment:offset(物理地址= segment * 16 + offset ) –

回答

0

謝謝您的建議!

你說得對段和偏移。但地址0x001F0674在文件中,當我從內存中獲取轉儲時,我看到那個段與0x001F0674不同。它是0x0018 * 16 + 0674。

非常感謝@Jester @Michael Petch @ Ped7g。

相關問題