2013-04-07 1 views
1

J'ai besoin d'écrire un programme pour écrire des symboles ASCII dans la mémoire vidéo.Ecriture de symboles ASCII dans la mémoire vidéo en montage avec TASM sur 8086

.model tiny 
.stack 
.data 
.code 
main: 

mov ax, 0b800h 
mov ds, ax 

mov aL, 'x' 
mov es, bx 
mov es:[1], aL 

mov ah, 4ch 
int 21h 

end main 

Ce code est inerte pour le moment; il compile, s'exécute puis quitte sans rien imprimer. Je pense qu'il me manque une ligne.

+0

duplication possible de [Impression d'une chaîne sans système d'exploitation] (http://stackoverflow.com/questions/15462807/printing-a-string-without-os) – nrz

+1

Vous définissez 'ds' à' 0b800h', et 'es 'à une valeur indéfinie ou du moins pas' 0b800h' ('bx'). Et puis vous utilisez 'es' pour adresser la mémoire vidéo, ce qui échoue évidemment. – nrz

+0

brillant, c'était stupide de ma part. Cependant, je suis toujours incapable d'imprimer un personnage de cette manière, et le programme se comporte comme avant. – user2241226

Répondre

1

Pour pouvoir écrire dans la mémoire vidéo, définissez ES sur 0b800h Spécifiez l'emplacement (Offset) sur l'écran où vous souhaitez écrire. Définissez DI sur (ligne * (lignes max (80)) + col) * 2 (ROW et COL sont basés sur des valeurs nulles). Par exemple, pour écrire sur le troisième caractère de la dixième ligne, utilisez "mov di, (2 * 80 + 9) * 2" Spécifiez les couleurs dans AH. Réglez AH sur (backgroundcolor * 16 + foregroundcolor) par exemple pour écrire des lettres gris clair (7) sur un fond noir (0) utilisez "mov ah, 7" Utilisez l'instruction STOSW au lieu de "mov es: [adresse]", Al. De cette façon, vous pouvez écrire dynamiquement à différents endroits sur l'écran.

Questions connexes