ошибка: 32-битная абсолютная адресация не поддерживается в 64-битном режиме - PullRequest
0 голосов
/ 07 августа 2020

interruptstubs.s:

.set IRQ_BASE, 0x20

 .text

 .extern _ZN16InterruptManager15HandleInterruptEhj
 .global _ZN16InterruptManager22IgnoreInterruptRequestEv


 .macro HandleException num
 .global _ZN16InterruptManager19HandleException\num\()Ev
 _ZN16InterruptManager19HandleException\num\()Ev:
     movb $\num, (interruptnumber)
     jmp int_bottom
 .endm


 .macro HandleInterruptRequest num
 .global _ZN16InterruptManager26HandleInterruptRequest\num\()Ev
 _ZN16InterruptManager26HandleInterruptRequest\num\()Ev:
     movb $\num + IRQ_BASE, (interruptnumber)
     jmp int_bottom
 .endm


HandleInterruptRequest 0x00
HandleInterruptRequest 0x01


int_bottom:

    pusha
    pushl %ds
    pushl %es
    pushl %fs
    pushl %gs

    pushl %esp
    push (interruptnumber)
    call _ZN16InterruptManager15handleInterruptEhj
    movl %eax, %esp

    popl %gs
    popl %fs
    popl %es
    popl %ds
    popa


_ZN22InterruptManager26HandleInterruptRequestEv:
    iret

.data
    interruptnumber: .byte 0

Раньше я писал сборку на Linux Mint, но поскольку у меня есть Ma c, я получаю странные ошибки, которых я не совсем понимаю. Я получаю эти ошибки всякий раз, когда пытаюсь скомпилировать свой код:

interruptstubs.s:32:5: error: unknown use of instruction mnemonic
> without a size suffix
>         pusha
>         ^
>     interruptstubs.s:33:5: error: instruction requires: Not 64-bit mode
>         pushl %ds
>         ^
>     interruptstubs.s:34:5: error: instruction requires: Not 64-bit mode
>         pushl %es
>         ^
>     interruptstubs.s:35:5: error: instruction requires: Not 64-bit mode
>         pushl %fs
>         ^
>     interruptstubs.s:36:5: error: instruction requires: Not 64-bit mode
>         pushl %gs
>         ^
>     interruptstubs.s:38:5: error: instruction requires: Not 64-bit mode
>         pushl %esp
>         ^
>     interruptstubs.s:43:5: error: instruction requires: Not 64-bit mode
>         popl %gs
>         ^
>     interruptstubs.s:44:5: error: instruction requires: Not 64-bit mode
>         popl %fs
>         ^
>     interruptstubs.s:45:5: error: instruction requires: Not 64-bit mode
>         popl %es
>         ^
>     interruptstubs.s:46:5: error: instruction requires: Not 64-bit mode
>         popl %ds
>         ^
>     interruptstubs.s:47:5: error: unknown use of instruction mnemonic without a size suffix
>         popa

Это те ошибки, которые я получаю, я думаю, что пытаюсь sh неправильные регистры для 32-битного режима, о которых я понятия не имел раствор

...