【发布时间】:2020-11-04 16:53:19
【问题描述】:
CODE_SEGMENT equ 0x8
jmp CODE_SEGMENT:label1
在 CS 寄存器中加载 CODE_SEGMENT 后,跳转到 label1。我想要达到类似的目标
mov ax, CODE_SEGMENT
jmp ax:label1
如何做到这一点?
【问题讨论】:
标签: assembly x86 nasm osdev i386
CODE_SEGMENT equ 0x8
jmp CODE_SEGMENT:label1
在 CS 寄存器中加载 CODE_SEGMENT 后,跳转到 label1。我想要达到类似的目标
mov ax, CODE_SEGMENT
jmp ax:label1
如何做到这一点?
【问题讨论】:
标签: assembly x86 nasm osdev i386
正如NASM far jump / far call in real mode and ASM code conventions 中提到的,您可以通过使用堆栈来实现:
push eax ; CODE_SEGMENT
push label1
retf
【讨论】:
push eax,我想;重点是使用寄存器中的段选择器。 (是的,在 32 位模式下retf 会弹出 dword,丢弃高 dword 的高 16 位。felixcloutier.com/x86/ret)