I'm crazy,help help!!!!

来源:百度知道 编辑:UC知道 时间:2024/06/17 19:03:05
帮忙看一下这段程序吧:
CODE SEGMENT
ASSUME CS:CODE
START:MOV AH,2
MOV DL,13
MOV CX,5
MOV DL,'1'
MOV AL,0
NEXT:MOV AH,2
INT 21H
XCHG AL,DL
INC AL
MOV DL,13
INT 21H
XCHG DL,AL
LOOP NEXT
EXIT:MOV AH,4CH
INT 21H
CODE ENDS
END START

我是想输出这样的东西:
1
2
3
4
5
可是结果只有一个1,再把13改成‘*’,结果却是”1*********“

CODE SEGMENT
ASSUME CS:CODE
START:MOV AH,2
MOV DL,13
MOV CX,5
MOV DL,'1'
MOV AL,0
NEXT:MOV AH,2
INT 21H
mov bl,dl
INC bl
MOV DL,13
INT 21H
mov dl,10
int 21h
mov dl,bl
LOOP NEXT
EXIT:MOV AH,4CH
INT 21H
CODE ENDS
END START

1.INT21h 是可能更改AL的值的,所以要放到bl中去保存
2.输出回车应该先输出13再输出10

加上这几句,为了好看
mov ah,0ah;显示回车
int 21h
mov ah,0dh;显示换行
int 21h
代码可以这样写
code segment
assume cs:code
start:mov dl,'1'
mov bl,dl
mov cx,5
stat:
mov ah,2
int 21h
mov dl,0ah
int 21h
mov dl,0dh
int 21h
inc bl
mov dl,bl
loop stat
mov ah,4ch
int 21h
code ends
end start

楼上说的没错,我刚才调试出来了,INT21H的确修改了AL的值,所以就出问题了。换行的话是0AH+0DH。
以下程序调试通过:(去掉多余指令)
CODE SEGMENT
ASSUME CS:CODE
START:
MOV CX,5
MOV DL,'1'
NEXT:MOV