“表达后的垃圾”使用GNU Assembler宏

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了“表达后的垃圾”使用GNU Assembler宏相关的知识,希望对你有一定的参考价值。

我大致跟随this guide建立一个简单的操作系统。它提供了一些用于NASM的程序集,但我使用的是GNU汇编程序。

在我正在使用的汇编文件的顶部

.intel_syntax noprefix

我已经定义了一个像这样的宏

.macro no_error_code_handler num
.global interrupt_handler_
um
.type interrupt_handler_
um, @function
interrupt_handler_
um:
    push dword 0
    push dword 
um
    jmp common_int_handler
.endm

如果重要的话,common_int_handler就在附近定义为

common_int_handler:
    pushad
    call int_handler # This is a C function
    popad
    add esp, 8
    iret

最后我有了这条线

no_error_code_handler 0

我希望扩展到类似的东西

.global interrupt_handler_0
.type interrupt_handler_0, @function
interrupt_handler_0:
    push dword 0
    push dword 0
    jmp common_int_handler

编译时,我从no_error_code_handler 0行得到一个错误说

Assembler messages:
Error: junk `0' after expression
Error: junk `0' after expression

它是否与将类型定义为函数有关,即使它的行为不像普通函数?自从我离开.exitm指令后,我应该在某处使用iret吗?

答案

以下行导致错误

push dword 0
push dword 
um

dword在这方面无效。

push 0
push 
um

删除dword解决了这个问题

以上是关于“表达后的垃圾”使用GNU Assembler宏的主要内容,如果未能解决你的问题,请参考以下文章

Gnu Assembler (GAS) 中的 CFI 指令有啥用途?

指令速记

如何在 Linux-Assembler 中发出哔哔声?

在 Assembler 中调试 xmm 寄存器

assembler 几个小程序

使用 SSE 将浮点值从 Assembler DLL 返回到 C++