1

什么时候

$ nasm -f elf64 -o thisfile.o thisfile.asm

它说“64位模式不支持指令”这一jmppopfd

这是整个代码:

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
4

1 回答 1

3

由于您处于 64 位模式,因此您需要使用popfq而不是popfd(或者,您可以只使用popf)。

至于jmp,我相信你需要做一个技巧retf

    push word SELECTOR_KERNEL_CS
    push qword csinit
    retf
csinit:
    ...

这是有效的,因为retf将首先弹出新的指令指针,然后弹出新的cs选择器。

于 2013-07-01T14:48:51.973 回答