L’écriture dans 0xb8000000 génère une sortie à l’écran sans instruction d’impression telle que `printf`

#include  #include  void main() { char far *v = (char far*)0xb8000000; clrscr(); *v = 'w'; v += 2; *v = 'e'; getch(); } 

La sortie est: we

Je ne comprends pas comment la sortie est imprimée sans aucune déclaration printf ou autre.

    Il s’agit d’un programme IBM PC en mode réel x86 qui suppose une carte graphique compatible CGA / EGA / VGA en mode texte couleur mappé à l’emplacement de mémoire par défaut (B800: 0000); il s’agit essentiellement de l’ère de MS-DOS (années 1980/90). En tout cas c’est très old school!

     char far *v=(char far*)0xb8000000; 

    Adresse mémoire (en mode réel) du tampon vidéo (utilisez 0xb0000000 si vous avez un ancien Hercules)

     clrscr(); 

    Efface l’écran

     *v='w'; 

    Écrit à la ligne 0 , colonne 0 le caractère w

     v+=2; 

    Saute 2 bytes (en mode caractère, le tampon est entrelacé: 1 byte pour le caractère et 1 byte pour la couleur. 1 bit pour le clignotement, 3 bits pour l’arrière-plan 0-7 et 4 bits pour le premier plan 0-15 , condensé de cette façon: foreground + 16 * background + 128 if you want flashingforeground + 16 * background + 128 if you want flashing )

     *v='e'; 

    Ecrit à la ligne 0 , colonne 1 le caractère e

     getch(); 

    Attend une clé

    Maintenant, un lien sur le format CGA en mode texte , pour ceux qui SENTENT le besoin de savoir comment l’a fait la “vieille génération”, avant que “Windows” ne vienne (et avant même que “Linux” vienne :-)). Ah … et un autre lien (un wiki cette fois) pour ceux qui ne savent toujours pas ce qu’est REAL-MODE .

    Il écrit directement dans le tampon vidéo qui est généralement assis à cette adresse.

    En outre, il s’agit là d’une sérieuse manipulation graphique.

    Cela s’explique par le fait que 0xB8000000 est l’adresse de démarrage de la mémoire vidéo .

    Vous n’avez pas précisé de quelle plate-forme il s’agit, et ce n’est apparemment pas une plateforme qui planterait ce code désagréable.

    0xb8000000 sur la plate-forme DOS existante était le tampon de la mémoire vidéo, vous pouvez donc y écrire directement des caractères en mode texte. Voir ici: http://wiki.answers.com/Q/What_is_0xB8000000

    D’abord, il obtient l’adresse du début du tampon vidéo. Il efface ensuite l’écran et commence à append du texte dans la mémoire tampon.

    C’est le début de l’espace adresse de la mémoire vidéo. Ce qui est écrit ici sera affiché à l’écran.