如何在REAL模式下将汇编程序返回到32位地址?

问题描述:

此代码在实模式下工作。 我有这样的例子: 这段代码去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 ) –

谢谢您的建议!

你说得对段和偏移。但地址0x001F0674在文件中,当我从内存中获取转储时,我看到那个段与0x001F0674不同。它是0x0018 * 16 + 0674。

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