gpt4 book ai didi

assembly - 无需系统调用即可打印字符

转载 作者:行者123 更新时间:2023-12-02 19:22:02 24 4
gpt4 key购买 nike

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

最佳答案

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

首先,您需要将 ax 和 dx 设置为 0。然后从 0 开始堆栈。然后,您需要将视频内存加载到 ax 中。显存从0xb800开始。然后使es与ax的值相同。

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

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

loop:
jmp loop

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

关于assembly - 无需系统调用即可打印字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34071338/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com