Comment faire de la chaîne d'entrée en assembleur?
S'il vous plaît, quelqu'un sait comment faire pour le code d'entrée de chaîne en langage d'assemblage? Je suis en utilisant int 21
d'affichage et de saisie de caractères.
OriginalL'auteur AlbatrosDocsCoder | 2011-07-21
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser la fonction
0Ah
à lire tampon d'entrée. Étant donné une chaîne de tampon dansds:dx
il lit une chaîne de longueur 255. Le tampon de la mise en page est:L'exemple d'un petit COM fichier qui lit une chaîne de caractères, puis les échos de retour à l'utilisateur:
Remarque qu'il remplacera la ligne d'entrée (et donc ne pourrait pas regarder le programme est en train de faire n'importe quoi!)
Alternativement, vous pouvez utiliser la fonction
01h
et à lire les caractères dans une boucle. Quelque chose comme ceci (à noter qu'il débordera plus tard tampons si plus de 255 caractères):string db "$"
? Il fonctionne?Si vous voulez une chaîne d'un octet contenant juste le '$' (terminator pour le ah=09h fonction), oui, mais alors il n'y aura pas de place pour stocker les caractères que vous lisez.
times 255 db
est le même que db 0, 0, 0, 0, [snip 250 fois 0,], 0, ce qui assure il y a de la place pour stocker les caractères. Si vous utilisez un autre assembleur de la syntaxe à l'espace de réserve peut être différent (et/ou vous pouvez utiliser l'allocation dynamique de la mémoire).merci zou verz beaucoup.
OriginalL'auteur user786653
Une chaîne de caractères est juste une série de caractères, vous pouvez utiliser votre int 21 du code à l'intérieur d'une boucle pour obtenir une chaîne de caractères, un caractère à la fois. Créer une étiquette dans le segment de données pour tenir votre chaîne, et chaque fois que vous lisez un personnage, de le copier à l'étiquette (l'incrémentation d'un décalage à chaque fois de sorte que vos personnages peuvent être stockées de manière séquentielle). Arrêter la lecture en boucle d'un certain caractère est lu (peut-être entrer).
Faire tout cela à la main est fastidieux (pensez à la façon backspace de travail), mais vous pouvez le faire. Alternativement, vous pouvez lier à l'encontre de stdio, stdlib, etc. et d'appeler les fonctions de la bibliothèque pour faire beaucoup de travail pour vous.
mov ah, 1h
Je ne peux pas éditer le post. Je vous remercie beaucoup. Mais je ne sais pas, comment faire tout cela. Je ne sais pas comment insérer plusieurs caractères de l'étiquette. Je vais donc avoir
string db "$$$"
et quoi maintenant? Puis-Jemov string, al ; pressed character to db
? Si oui, que faire ensuite? Je ne sais pas ho pour incrémenter la position d'un caractère... Pouvez-vous s'il vous plaît placez exemple de code ici?J'espère que c'est toujours d'actualité pour vous. Vous pouvez garder l'emplacement de la mémoire dans un registre plutôt que par l'utilisation de l'étiquette. De cette façon, vous pouvez écrire à l'adresse de mémoire c'est dans le registre, au lieu de simplement écrire à l'étiquette chaque fois. Alors que vous modifiez le registre d'adresse (l'incrémentation pour chaque personnage), vous allez être écrit à de nouveaux emplacements de mémoire.
OriginalL'auteur Quinn