【问题标题】:x86 assembly code not compilingx86 汇编代码未编译
【发布时间】:2015-02-23 17:16:23
【问题描述】:

我有以下代码,我试图在 C 中调用一个汇编函数,它试图在(QEmu 的)VGA 显示器上打印“e”:

void main()
{
 extern void put_in_mem();
 char c = 'e';
 put_in_mem(c, 0xA0);
}

put_in_mem 函数定义如下:

.global _put_in_mem
_put_in_mem:
push bp
mov bp, sp
mov cx, [bp + 4]
mov ax, [bp + 6]
mov ax, 0xb800
mov ds, ax
mov [bx], cx
add bx, 0x1
mov cx, 0x7  
mov [bx], cx
pop bp
ret

当我使用 nasm 编译上述汇编代码时,出现以下错误:

put_in_mem.asm:1: error: attempt to define a local label before any    non-local labels
put_in_mem.asm:1: error: parser: instruction expected

为什么会出现这个错误?

【问题讨论】:

    标签: assembly x86 nasm


    【解决方案1】:

    NASM 对以句点开头的符号进行特殊处理。以单个句点开头的标签被视为本地标签

    NASM does have a global directive,但它没有初始句号。所以也许你的意思是写global _put_in_mem

    【讨论】: