2013-04-03 2 views
0

J'ai un code ici pour l'impression et la boucle de chaînes, comment j'irais imprimer la chaîne commençant à une coordonnée spécifique (x, y) sur l'écran sans utiliser de caractères vides ? Ce que je veux dire, c'est que je veux être en mesure de spécifier la position de départ pour ma fonction d'impression plutôt que de boucler le code pour imprimer un caractère vierge jusqu'à ce que j'arrive à la position que je veux.ASM TASM Impression, boucles, écran cel coordonnées

.model small 

.stack 100h 

.data 

string db "string$" 

.code 

main: 
mov cx, 3 

l: 
mov ax, @data 
mov ds, ax 
mov ah, 09h 
mov dx, offset string 
int 21h 
loop l 


mov ah, 4ch 
int 21h 

end main 

Répondre

0

Vous avez essentiellement deux options:

1) Si le terminal supporte la sortie, vous pouvez ANSI escape sequences pour positionner le curseur avant d'envoyer votre sortie de chaîne.

2) Vous pouvez écrire directement dans la mémoire vidéo. Si vous définissez la carte graphique en mode texte couleur 80 x 25, la mémoire vidéo démarre à l'adresse 0xB800: 0 et est composée de paires de caractères/attributs d'octets pour chaque caractère - 4 Ko en tout.

+0

super, ce que je dois faire est d'écrire directement dans la mémoire vidéo. Si vous avez le temps, pensez-vous que vous pourriez me montrer comment imprimer ma chaîne db au centre de l'écran, par exemple? J'ai du mal à comprendre comment utiliser l'interruption pour cela. Sur la page [this] (http://www.dcc.unicamp.br/~celio/mc404-2004/service_interrupts.html), il est indiqué d'utiliser INT 10h alors que AH = 13h – user2241226

+0

Il existe de nombreux exemples de ce phénomène. [En voici un] (http://muruganad.com/8086/8086-Assembly-Writing-Directly-to-Video-Memory-B800.html). –

+0

c'est super, merci beaucoup – user2241226

Questions connexes