Je me demande comment imprimer un caractère dans l'assemblage sans int 0x80
et d'autres appels système. Je fais cela pour un noyau. J'ai une fonction d'impression qui fonctionne, mais je veux en écrire une en assemblage, donc je comprends mieux comment cela fonctionne réellement sans compiler tout à l'assemblage. J'utilise QEMU. Je suis nouveau dans l'assemblage et j'ai seulement pu imprimer des chaînes à l'aide de syscalls. J'utilise NASM assembleur et je voudrais que la sortie soit ELF32. Ceci est pseudo-assemblage de ce que je suis en train d'accomplir:Caractère d'impression sans appels système
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
Vous ne pouvez pas. La seule façon de dire au noyau, "Hey - fais ceci" est via un appel système/interruption. Et sur x86, ce 'int 0x80'. Maintenant, dans 'nasm' et d'autres assembleurs, vous pouvez créer des macros * pour automatiser l'impression de caractères. C'est ce que tu veux dire? –
@ DavidC.Rankin alors je devrais faire quelque chose dans c pour l'obtenir à la mémoire tampon VGA? Pourquoi je ne peux pas le faire dans l'assemblage? –
C'est la différence entre l'informatique * en mode réel * et * en mode protégé *. Dans l'ancien DOS 16 bits, etc., vous avez un accès direct au tampon vidéo. (et le reste du système). En commençant par (je ne m'en souviens même pas), avec le passage en mode protégé, seul le noyau a accès au buffer vidéo (et à la plupart des autres matériels) et vous êtes limité à faire des appels système pour dire au noyau de faire quelque chose. Vous pouvez toujours faire tout en assembleur que vous pouvez faire en C, mais les deux traitent l'API du processeur via les interruptions du système. –