2011-12-04 3 views
6

Je veux imprimer la table de plusieurs nombres de 0 à 9 dans l'assemblée. donc je programme ci-dessous le code:nouvelle ligne dans l'assemblage 8086

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

Il fonctionne correctement, mais avec un petit problème, quand je veux imprimer nouvelle ligne, et quelque chose imprimé en ligne en cours, il ira à la nouvelle ligne, mais avec un peu d'espace avant nouvelle ligne. enter image description here

Répondre

9

Vous devez imprimer la nouvelle ligne et retour chariot.

-1

essayer de mettre les voies pour le retour de la ligne

mov ax, 4c00h ; return to ms-dos 
int 21h 
3

AS dit anthony, En fonction de votre assembleur, vous devez faire un retour chariot et saut de ligne pour aller à la ligne suivante et placez le curseur à l'beggining du ligne. Pour MASM, vous pouvez utiliser Call crlf ou imprimer les valeurs 0dh et 0ah respectivement.

4

si vous utilisez emu80x86 ce code devrait le faire

mov dx,13 
    mov ah,2 
    int 21h 
    mov dx,10 
    mov ah,2 
    int 21h 
2

Ce imprimerait une nouvelle ligne:

1) Ajouter dans le segment de données:

linefeed db 13, 10, "$" 

2) Et puis utilisez ceci partout où vous avez besoin d'une nouvelle ligne:

; new line 
mov ah, 09 
mov dx, offset linefeed 
int 21h 
+0

cela a fonctionné pour moi .. mais qu'est-ce que linefeed db 13, 10, "$" exactement faire? –

+1

Découvrez cette question SO http://stackoverflow.com/q/17266837/2348704 – oat