如何在REAL模式下将汇编程序返回到32位地址?
问题描述:
此代码在实模式下工作。 我有这样的例子: 这段代码去0x001FFD50地址。如何在REAL模式下将汇编程序返回到32位地址?
...
001F066F: push es
001F0670: push 0FD50
001F0673: retf ^^^^^^
001F0674: push 00051
...
在那之后,我有这样的代码:
我需要回到0x001F0674地址。
...
001FFE91: push 00674
001FFE94: retn ^^^
...
但不是说,我去0x0674地址。如何在实模式下返回0x001F0674地址?
答
谢谢您的建议!
你说得对段和偏移。但地址0x001F0674在文件中,当我从内存中获取转储时,我看到那个段与0x001F0674不同。它是0x0018 * 16 + 0674。
非常感谢@Jester @Michael Petch @ Ped7g。
您需要使用'retf'切换段。只需使用你的第一个例子,但显然是'推0x001F'而不是'es'。或者,如果'es'仍然包含'0x001F',那么你甚至可以保留它。 – Jester
第二次看,你似乎在同一个细分市场,所以你的代码应该实际工作,因为你不需要切换段。 – Jester
我假设你到处都有类似'0x001FFD50'的东西,你的意思是'0x001F:0xFD50'我问,因为如果是这种情况,那些不是32位地址,它们是segment:offset(物理地址= segment * 16 + offset ) –