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 le
int 21h code>) et en utilisant
int 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.