我想知道如何在没有int 0x80
和其他系统调用的情况下在程序集中打印字符。我这样做是为了内核。我有一个工作打印功能,但我想在汇编中编写一个,所以我更好地理解它实际上是如何工作的,而不仅仅是汇编所有东西。我正在使用 QEMU 。我是装配新手,只能使用系统调用打印字符串。我正在使用 NASM 汇编程序,我希望输出为ELF32。这是我想要完成的伪装配:
section .text
global _start
extern magic_print_function
_start:
mov edx,1;length of buffer
mov ecx,'c';character c to print
;somehow magically print the character without specifying stdout, maybe something like the VGA buffer?
call magic_print_function
答案 0 :(得分:1)
好的,你说你不想要任何c。这有点困难,但我确信这是可能的。
首先,你要设置ax和dx等于0.然后从0开始堆栈。然后,你需要将视频内存加载到ax。视频内存从0xb800开始。然后使es与ax相同。
将您的消息加载到变量中并将其放入si中。此时,调用一个将字符串写入视频内存的函数。此功能由较小的功能组成,这些功能分别写入字符并将光标向右移动一个点。
一旦你有了编写字符串的代码,就用循环挂起它。这非常简单:
loop:
jmp loop
更多信息,请尝试此操作 http://wiki.osdev.org/Babystep4