.intel_syntax noprefix
smp_trampoline:
# clear the direction flag (e.g. go forward in memory when using
# instructions like lodsb)
cld
# disable interrupts
cli
# zero data segment
xor ax, ax
mov ds, ax
# Set the A20 line
in al, 0x92
or al, 2
out 0x92, al
# Load 32-bit GDT
lgdt gdt32_pointer
# Enable protected mode
mov eax, cr0
or eax, (1 << 0)
mov cr0, eax
# normally this should be jmp 0x8:mylabel
jmp 0x08:protected_mode_setup
我正在尝试在 Rust 中编写一个引导加载程序,其中包含通过global_asm!("start.s")
. 这意味着我仅限于使用 GNU Asm。现在我想在加载 GDT 后从 16 位模式跳到保护模式。在 nasm 中,这jmp 0x08:mylabel
在 GNU Asm 中似乎不存在?
error: unexpected token in argument list
|
note: instantiated into assembly here
--> <inline asm>:48:12
|
48 | jmp 0x8:protected_mode_setup
| ^
error: aborting due to previous error
我也尝试过jmp far 0x08:protected_mode_setup
并jmp 0x08, protected_mode_setup
喜欢这里描述的,但没有成功。
重现该问题的最小来源:https ://github.com/Luis-Hebendanz/rust_asm_error