何时
$ nasm -f elf64 -o thisfile.o thisfile.asm
它表示在64位模式下不支持jmp
和popfd
“指令行”
这是整个代码:
SELECTOR_KERNEL_CS equ 8
extern cstart
extern gdt_ptr
[SECTION .bss]
StackSpace resb 2 * 1024
StackTop:
[section .text]
global _start
_start:
mov esp, StackTop
sgdt [gdt_ptr]
call cstart
lgdt [gdt_ptr]
;lidt [idt_ptr]
jmp SELECTOR_KERNEL_CS:csinit
csinit:
push 0
popfd ; Pop top of stack into EFLAGS
hlt
答案 0 :(得分:3)
由于您处于64位模式,因此您需要使用popfq
代替popfd
(或者,您可以使用popf
)。
对于jmp
,我相信您需要使用retf
进行操作:
push word SELECTOR_KERNEL_CS
push qword csinit
retf
csinit:
...
这是有效的,因为retf
将首先弹出新的指令指针,然后弹出新的cs
选择器。