我正在尝试编写一个函数,用C语言打印屏幕字符串。它是一个引导加载程序,因此没有外部库或任何链接。这是我的功能:
void printString(const char* pStr) {
while(*pStr) {
__asm__ __volatile__ (
"movb 0x0e, %%ah\n"
"movb %[c], %%al\n"
"int $0x10\n"
:
: [c] "r" (*pStr)
: "ax"
);
++pStr;
}
}
当我运行这个时,我的VM没有任何错误。它只是坐在那里,光标在屏幕的左上角。有什么想法吗?如果有人认为有帮助,我可以生成一个
objdump -d
。 最佳答案
好吧,在发表了一些有益的评论之后,我可以继续完整的集会。有点像
Print:
push %ax
movb $0x0E, %ah # Set interrupt code
movb $0x00, %bh # Set page #
.loop:
lodsb # Load next char
test %al, %al # Check for \0
je .done
int $0x10 # Call interrupt
jmp .loop
.done:
pop %ax
ret
它应该与16位实模式兼容,并且可以与GAS组装,据我所知,GAS在编译16位程序时比GCC工作得更好。
关于c - C内联Asm Int 0x10,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31151132/