【汇编语言】要求显示256个ASCII码,每行显示16个,码字间用空格分开,为什么我的只能显示一部分?

我的代码:
DATA SEGMENT
BUF DB 256 DUP(?)
COUNT EQU $-BUF
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA,CS:CODE
START: MOV AX,DATA
MOV DS,AX
MOV SI,OFFSET BUF
MOV CX,COUNT
MOV AL,00H
NEXT1: MOV [SI],AL
INC AL
INC SI
LOOP NEXT1

MOV SI,OFFSET BUF
MOV CX,COUNT
MOV BL,10H
SHOW_ROW:MOV DL,[SI]
MOV AH,2
INT 21H
MOV DL,0
MOV AH,2
INT 21H
INC SI
DEC BL
JZ CRLF
LOOP SHOW_ROW
CRLF: MOV DL,0DH
MOV AH,2
INT 21H
MOV DL,0AH
MOV AH,2
INT 21H
MOV BL,10H
CMP CX,0
JNZ SHOW_ROW
JZ EXIT
EXIT: RET
CODE ENDS
END START

运行结果:

试试下列程序,可以显示的:

CODE SEGMENT
ASSUME CS:CODE
START:
MOV AH, 2
MOV BL, 0 ;ASCII
MOV CX, 256
SHOW_0:
MOV BH, 0 ;列
SHOW_1:
MOV DL, BL
INT 21H
INC BL
INC BH
CMP BH, 16
JZ CR_LF
MOV DL, ' '
INT 21H
LOOP SHOW_1
CR_LF:
MOV DL, 0DH
INT 21H
MOV DL, 0AH
INT 21H
LOOP SHOW_0
EXIT:
MOV AH, 4CH
INT 21H
CODE ENDS
END START追问

谢谢,知道我是哪错了吗?我把EXIT:RET改成了EXIT:MOV AX,4C00H     INT 21H

运行结果:

追答

你的程序:

……
LOOP SHOW_ROW
CRLF:
MOV DL, 0DH
MOV AH, 2
INT 21H
MOV DL, 0AH
MOV AH, 2
INT 21H
MOV BL, 10H
; CMP CX, 0-----删除
; JNZ SHOW_ROW--删除
; JZ EXIT------删除
LOOP SHOW_ROW;----改成这行
EXIT:
; RET--------删除
MOV AH, 4CH;------改成这两行
INT 21H
CODE ENDS
END START

即可。

追问

这样改了以后和你提供的代码差不多了,但显示还是有问题的说~怎么有这么多问号。。

追答

改过之后,显示,在我这里,就没有问题了。

你显示出来这么多问号,显然是你的操作系统的问题。

你最后追问时插图,和你开始提问时的插图,比较一下,
两次所用的DOS系统,应该是不同的。

你开始提问时的插图,这个是可以的。
后来追问的,像是汉字系统。

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-11-26
有些ASCII码是不能显示的,有些是输出看不见的回车换行空格。追问

不是啊,我只显示到231号码字,后面还有可以显示的字符的

追答

EXIT: RET改成这样EXIT:mov ax,4c00h int 21h

追问

还是不对诶 囧。。。

相似回答