无系统调用打印字符

时间:2015-12-03 16:34:16

标签: assembly x86 nasm qemu osdev

我想知道如何在没有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

1 个答案:

答案 0 :(得分:1)

好的,你说你不想要任何c。这有点困难,但我确信这是可能的。

首先,你要设置ax和dx等于0.然后从0开始堆栈。然后,你需要将视频内存加载到ax。视频内存从0xb800开始。然后使es与ax相同。

将您的消息加载到变量中并将其放入si中。此时,调用一个将字符串写入视频内存的函数。此功能由较小的功能组成,这些功能分别写入字符并将光标向右移动一个点。

一旦你有了编写字符串的代码,就用循环挂起它。这非常简单:

loop:
    jmp loop

更多信息,请尝试此操作 http://wiki.osdev.org/Babystep4