Мне интересно, как печатать символ в сборке без 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
Вы не можете. Единственный способ рассказать ядро: «Эй, сделай это» - это системный вызов/прерывание. А на x86 это 'int 0x80'. Теперь в 'nasm' и других ассемблерах вы можете создавать * макросы * для автоматизации печати символов. Это то, что вы имели ввиду? –
@ DavidC.Rankin, поэтому мне нужно было что-то сделать в c, чтобы получить его в буфере vga? Почему я не могу это сделать в сборке? –
В этом разница между * real-mode * и * защищенными режимами * вычислениями. В старых 16-разрядных DOS и т. Д. У вас был прямой доступ к видеобуру. (и остальной части системы). Начиная с (я даже не помню), с переключением на компьютеры с защищенным режимом, только ядро имеет доступ к видеобуру (и большинству других аппаратных средств), и вы ограничены тем, что системные вызовы говорят ядру что-то делать. Вы все еще можете делать все на ассемблере, которое вы можете делать на C, но оба имеют дело с API-интерфейсом процессора через системные прерывания. –