要求使用汇编语言编程,循环显示 26 个小写字母的 ASCII 码。每行十个,按 ALT+F1 结束。
题目链接:
http://zhidao.baidu.com/question/556679820
http://zhidao.baidu.com/question/562426170
题目中的说明,有些简略,经过使用百度 Hi 交流得知,实际上是需要如下显示:
61H 62H 63H 64H 65H 66H 67H 68H 69H 6AH
6BH 6CH 6DH 6EH 6FH 70H 71H 72H 73H 74H
75H 76H 77H 78H 79H 7AH 61H 62H 63H 64H
65H 66H 67H 68H 69H 6AH 6BH 6CH 6DH 6EH
6FH 70H 71H 72H 73H 74H 75H 76H 77H 78H
79H 7AH 61H 62H 63H 64H 65H 66H 67H 68H
69H 6AH 6BH 6CH 6DH 6EH 6FH 70H 71H 72H
73H 74H 75H 76H 77H ……
按下 ALT+F1 结束,否则,不停的滚动输出。
为此,做而论道编写程序如下:
DATAS SEGMENT
XX DB 'a'
YY DB 0
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES, DS:DATAS
START:
MOV AX, DATAS
MOV DS, AX
LOP2:
MOV AL, XX
CALL OUT_HEX
;===============在这里判断有没有按下 ALT+F1
MOV AH, 1 ;判断有无键输入
INT 16H
JZ NEXT ;无
MOV AH, 0 ;有, 读键
INT 16H
CMP AX, 6800H
JE EXIT
;==============按下 ALT+F1 结束程序
NEXT:
INC XX
CMP XX, 'z' + 1
JB LOP1
MOV XX, 'a'
LOP1:
INC YY
CMP YY, 10
JNZ LOP2
MOV YY, 0
CALL CR_LF
JMP LOP2
;-------------------------
EXIT:
MOV AH, 4CH
INT 21H
;=====================================
CR_LF:
MOV AH, 2
MOV DL, 13
INT 21H
MOV DL, 10
INT 21H
RET
;=====================================
OUT_HEX:
MOV AH, 0
MOV BL, 16
DIV BL
PUSH AX
MOV DL, AL
MOV AH, 2
ADD DL, '0'
CMP DL, 3AH
JB OUT1
ADD DL, 07H
OUT1:
INT 21H
;-----
POP AX
MOV DL, AH
MOV AH, 2
ADD DL, '0'
CMP DL, 3AH
JB OUT2
ADD DL, 07H
OUT2:
INT 21H
MOV DL, 'H'
INT 21H
MOV DL, ' '
INT 21H
RET
;=====================================
CODES ENDS
END START
程序运行后,确实可以不停的滚动输出:
61H 62H 63H 64H 65H 66H 67H 68H 69H 6AH
6BH 6CH 6DH 6EH 6FH 70H 71H 72H ……
按下 ALT+F1,才能结束。
程序中,对组合键 ALT+F1 的检测,做而论道并不很熟悉,这里使用的方法,是提问者给出的。