définition consoleText
est octets 80x27 (pas 25x82!), Et ceux qui sont inutiles 13,10 toute façon, comme vous les remplacer par mov consoleText[bx], dl
, donc tout ce dont vous avez besoin pour le stockage est consoleText db 80*25 dup (?)
.
mov dl, es:[bx]
peut lire la RAM vidéo du mode texte, si le es
est défini sur 0B800h
(non visible à partir de votre code). Mais la RAM vidéo en mode texte en 80x25 (mode 03h je pense) utilise deux octets par caractère, le premier octet de la paire est le code ASCII étendu, le deuxième octet est l'attribut avec couleurs, voir probablement https://en.wikipedia.org/wiki/VGA-compatible_text_mode et d'autres ressources. Donc vous lisez seulement la moitié des caractères et la moitié des couleurs, pour lire tous les caractères je pense que mov dl, es:[bx*2]
fonctionnerait en mode réel (ou utiliser si
au lieu de bx
, dans le cas où le mode 16b réel ne peut pas utiliser le mode d'adressage bx*2
). Nouvelle ligne commence dans la mémoire vidéo juste après la ligne précédente, il n'y a pas 13,10 dans la RAM vidéo, en fait ce sont des glyphes de polices valides (13 étant une note musicale IIRC), donc les premiers 160 octets à B800:0000
est la première ligne de 80 caractères (avec des couleurs), puis à l'adresse 160 (B800:00A0
) la deuxième ligne commence immédiatement.
Il n'est pas clair comment vous vérifiez/imprimez le contenu stocké, il est donc difficile de dire ce qui "ne fonctionne pas". Utilisez toujours le débogueur pour vérifier que vous obtenez les valeurs comme prévu. Pour sauvegarder/restaurer le mode plein texte VRAM, vous devez bien sûr stocker également les couleurs (donc tampon de 80 * 25 * 2 octets), et les restaurer comme ça, et cela ne fonctionnerait que lorsque l'application en cours ne changera pas le début de VRAM, ou d'autres registres de contrôle VGA, affectant la sortie (c'est-à-dire uniquement dans l'état vierge mov ax,3 int 10h
). Un tel magasin/restauration ne restaure pas la position du curseur BIOS et probablement d'autres variables du BIOS, donc si vous voulez vraiment enregistrer "console", il y a plus à faire que de simplement copier le contenu VRAM.
Mais dans l'ensemble, cela ressemble à un bon essai, le code est simple et droit au but, ne vous inquiétez pas de la performance tout en apprenant les bases. Mais apprendre à utiliser efficacement le débogueur est essentiel pour votre avenir (de l'apprentissage en Assemblage).
Merci homme! Vous avez résolu mon problème! : D –
qu'en est-il au moins de mentionner «rep movsw» avec un CX de 2000? ;) – Tommylee2k
@ JoãoRodrigues, j'attends toujours que tu cliques sur la coche ✔ de ma réponse :) –