Je reçois une sortie d'escalier comme celle-ci
Mon programme fonctionne correctement, sauf que lorsque j'imprime une nouvelle ligne, puis imprimez Quelque chose dans la ligne actuelle, il montre sur la ligne suivante, mais avec un peu d'espace avant. p>
Le programme est le suivant: (Imprimer une table de plusieurs numéros de 0 à 9): P >
data_seg segment
I DB 0D
J DB 0D
R DB ?
DIVER DB 10D
data_seg ends
stack_seg segment
stack_seg ends
code_seg segment
MAIN proc far
assume cs:code_seg, ds:data_seg, ss:stack_seg
MOV AX,data_seg
MOV DS,AX
FOR1:
MOV J,0D
FOR2:
MOV AX,0H
MOV AL,I
MUL J
DIV DIVER
MOV R,AH
ADD AL,48D
MOV AH,0EH
INT 10H
MOV AL,R
ADD AX,48D
MOV AH,0EH
INT 10H
MOV AX,32D
MOV AH,0EH
INT 10H
INC J
MOV AX,0
MOV AL,J
SUB AX,10D
JNZ FOR2
INC I
MOV AX,10D
MOV AH,0EH
INT 10H
MOV AX,0
MOV AL,I
SUB AX,10D
JNZ FOR1
MOV AX,4CH
INT 21H
MAIN endp
code_seg ends
end MAIN
5 Réponses :
Vous devez imprimer de nouvelles lignes et em> retour de chariot. p>
Essayez de mettre des voies pour le retour de la ligne
mov ax, 4c00h ; return to ms-dos int 21h
AS ANTHONY Dit, basé sur votre assembleur, vous devez faire un retour de chariot et une alimentation en ligne pour aller à la ligne suivante et placer le curseur au début de la ligne. Pour MASM, vous pouvez utiliser Call CRLF ou Imprimer des valeurs 0DH et 0AH respectivement. P>
Si vous utilisez EMU80X86, ce code doit le faire
mov dx,13 mov ah,2 int 21h mov dx,10 mov ah,2 int 21h
Ceci imprimerait une nouvelle ligne:
1) Ajouter dans le segment de données: P> 2) puis utilisez-le n'importe où que vous avez besoin d'une nouvelle ligne: < / p>
Cela a fonctionné pour moi .. Mais qu'est-ce que Linefeed DB 13, 10, "$" exactement?
@JWW: Ce n'est pas
[Windows] code> code, c'est DOS (pour leint 21h code>) et en utilisantint 10h code> appels de bios autrement pour certains raison.@Peter - pas de balise Microsoft; Étiquette Windows utilisée pour indiquer la plate-forme.
@JWW: La balise
[dons] code> est la solution appropriée ici. Voir mon édition. Rien à propos de ce code n'a rien à voir avec Windows, à part le fait que certaines versions 32 bits de Windows sont livrées avec une machine virtuelle DOS. C'est pourquoi il y a une étiquette séparée pour DOS.@Peter - Le terminateur de signe du dollar me dit que ce sont les technologies Microsoft. Masm l'utilisait pour la fin de la chaîne. Douteux c'est DOS en 2011; 15 ans trop tard.
@JWW: Tout ce que Microsoft n'a fabriqué est Windows. DOS existait en premier et est séparé. Et
$ code> Les terminalisateurs ont commencé avec CP / M, copié par DOS mais pas i> Windows. (Windows utilise des chaînes C à 0 terminé dans des fonctions Winapi de bas niveau telles que des noms de fichiers). En outre, la question i> n'utilise aucune fonction de chaîne DOS, ce n'est que dans l'une des réponses, il est donc possible que cela ne soit même pas utile si l'appel de sortie DOS est juste là pour tester le code de démarrage sous DOS. Quoi qu'il en soit, s'il n'y avait pas de balise DOS, votre édition aurait peut-être été justifiée (mais la création d'une étiquette DOS aurait été meilleure). Mais c'est clairement faux.@Peter - lol ... Dos est mort. Mais continuez à croire que les gens utilisent si cela vous rend heureux.
@JWW: DOS est toujours utilisé pour tester des cartes mères nouvellement développées et pour une raison folle de certaines écoles (beaucoup en Inde) enseignent la langue de l'Assemblée avec un DOS 16 bits. Beaucoup d'entre eux avec EMU8086. (Un peu comme Mars / Spim Gui Editor + Debugger + Simulator, mais pour 8086, y compris DOS). Je souhaite I> Dos était mort, mais ce n'est pas le cas. C'est un système d'exploitation intégré qui sort du chemin, je peux voir le cas d'utilisation. FreeDos.org est toujours maintenu, pour une utilisation dans des trucs intégrés apparemment. Je n'ai aucun intérêt à DOS, mais vous n'avez clairement pas passé beaucoup de temps à regarder dans la balise
[x86] code> si vous pensez que DOS est mort.@JWW: littéralement toutes les questions de DOS que j'ai vues sur les débutants sont des débutants qui sont bloqués pour l'école ou pour une raison pour une raison pour l'auto-enseignement (bien que autodidactu à on sait généralement "écrire leur propre système d'exploitation" en tant que Bios BIOS Legacy MBR Bootloader, SO x86-16 mais pas DOS, Just BIOS appelle). Mais il y a un volume important de ces questions. Les personnes qui utilisent réellement DOS pour tester l'ingénierie-échantillon mobos ou d'autres cas d'utilisation n'ont pas besoin de demander un autre duplicata sur la lecture / l'impression de numéros multi-chiffres ou comment
div code> fonctionne donc.@JWW: Plus important encore, vous Ne pouvez pas i> Exécuter ce code sur un système Windows de 64 bits moderne sans émulateur comme DosBox ou Bochs.