2011-12-04 96 views
6

我想在彙編中打印0到9之間的多個數字表。 所以程序下面的代碼: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

它工作正常,但有一個小問題,當我想打印新的生產線,並在當前行印刷的東西,它會去新的生產線,但與之前的一些空間新隊。 enter image description here

回答

9

您需要打印新行回車。

-1

儘量把車道線返回

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

安東尼說,根據您的彙編程序,你需要做的回車和換行轉到下一行,並將光標在的的beggining線。對於MASM,您可以分別使用Call crlf或打印值0dh和0ah。

4

如果您使用emu80x86此代碼應做到

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

這將打印新行:

1)添加在數據段:

linefeed db 13, 10, "$" 

2),然後在任何需要新線路的地方使用此設備:

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

這爲我工作..但什麼是換行數據庫13,10,「$」正確嗎? –

+1

看看這個SO問題http://stackoverflow.com/q/17266837/2348704 – oat