有什么方法可以使用寄存器在 i386 保护模式下跳远吗?

Is there any way to make a far jump in i386 protected mode using registers?

CODE_SEGMENT equ 0x8
jmp CODE_SEGMENT:label1

在 CS 寄存器中加载 CODE_SEGMENT 后跳远到 label1。我想实现类似

的目标
mov ax, CODE_SEGMENT
jmp ax:label1

如何实现?

NASM far jump / far call in real mode and ASM code conventions 中所述,您可以使用堆栈实现此目的:

push eax    ; CODE_SEGMENT
push label1
retf

这在保护模式下也应该有效,除非它是任务切换(参见 jmp and retf 说明文档)