无需系统调用打印字符
Print character without system calls
我想知道如何在没有 int 0x80
和其他系统调用的情况下在汇编中打印一个字符。我正在为内核这样做。我有一个有效的打印功能,但我想在汇编中编写一个,所以我更好地理解它的实际工作原理 w/o 只是将所有内容编译为汇编。我正在使用 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
好吧,你说你不想要任何c。这有点困难,但我相信这是可能的。
开始时,您需要将 ax 和 dx 设置为 0。然后从 0 开始堆栈。然后,您需要将视频内存加载到 ax 中。视频内存从 0xb800 开始。然后让es和ax一样的值。
将您的消息加载到变量中并将其放入 si。此时,调用一个向显存写入字符串的函数。此函数由多个较小的函数组成,这些函数分别写入字符并将光标向右移动一个位置。
获得编写字符串的代码后,将其挂在一个循环中。这非常简单:
loop:
jmp loop
要了解更多,请尝试这个
http://wiki.osdev.org/Babystep4
我想知道如何在没有 int 0x80
和其他系统调用的情况下在汇编中打印一个字符。我正在为内核这样做。我有一个有效的打印功能,但我想在汇编中编写一个,所以我更好地理解它的实际工作原理 w/o 只是将所有内容编译为汇编。我正在使用 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
好吧,你说你不想要任何c。这有点困难,但我相信这是可能的。
开始时,您需要将 ax 和 dx 设置为 0。然后从 0 开始堆栈。然后,您需要将视频内存加载到 ax 中。视频内存从 0xb800 开始。然后让es和ax一样的值。
将您的消息加载到变量中并将其放入 si。此时,调用一个向显存写入字符串的函数。此函数由多个较小的函数组成,这些函数分别写入字符并将光标向右移动一个位置。
获得编写字符串的代码后,将其挂在一个循环中。这非常简单:
loop:
jmp loop
要了解更多,请尝试这个 http://wiki.osdev.org/Babystep4