Pointers (汇编)如何存储远指针并使用它跳转?

Pointers (汇编)如何存储远指针并使用它跳转?,pointers,assembly,nasm,x86-16,memory-segmentation,Pointers,Assembly,Nasm,X86 16,Memory Segmentation,我想跳远: jmp 0x0000:0x7EA5 那很好。但是,我想存储0x0000段和0x7EA5偏移量,然后使用该存储值而不是硬编码0x0000:0x7EA5 这可能吗?我对组装还很陌生,所以我甚至不确定这是否可能。确定这是可能的。但是,确切的语法可能取决于您的汇编程序;你用哪一种?您想将指针存储在哪里?如果它是NASM(我将根据所示的语法进行猜测),您可以在内存地址上使用FAR,如下所示:。我举了一个例子,作为一些引导加载程序代码的例子,尽管从您给出的地址来看,我很好奇您是否正在进行某种内

我想跳远:

jmp 0x0000:0x7EA5
那很好。但是,我想存储
0x0000
段和
0x7EA5
偏移量,然后使用该存储值而不是硬编码
0x0000:0x7EA5


这可能吗?我对组装还很陌生,所以我甚至不确定这是否可能。

确定这是可能的。但是,确切的语法可能取决于您的汇编程序;你用哪一种?您想将指针存储在哪里?如果它是NASM(我将根据所示的语法进行猜测),您可以在内存地址上使用FAR,如下所示:。我举了一个例子,作为一些引导加载程序代码的例子,尽管从您给出的地址来看,我很好奇您是否正在进行某种内核和/或引导加载程序开发。也可以在堆栈上推送段和偏移量,然后执行
retf
指令。@MichaelPetch噢,哇,谢谢!那个垃圾桶有用。我将存储值移动到ax中,然后按下ax并使用retf,它现在正在使用存储值注意段和偏移量为16位(我假设为8086或实模式),但
dd
指示32位,因此这可能是一个错误。但无论如何,需要注意的是,偏移量和段在内存中必须是连续的,形成一个32位双字。如果您有
returnPtr dw 0x7ea5,0x0000
,您可以简单地执行
jmp far[returnPtr]
。还有一个副本,但没有人对我的答案进行投票,因此我无法将其作为副本添加。