2015-02-23 4 views
0

У меня есть следующий код, в котором я пытаюсь вызвать функцию сборки в C, который пытается напечатать «е» на VGA дисплее (в QEmu):x86 код сборки не компиляции

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 

Почему эта ошибка возникает?

ответ

1

NASM gives special treatment to symbols beginning with a period. A label beginning with a single period is treated as a local label

NASM does have a global directive, но она написана без начального периода. Поэтому, возможно, вы хотели написать global _put_in_mem

Смежные вопросы