编程:从键盘输入一串以‘$‘为结束符的字符串,然后对其中的数字字符计数,并以十六进制数的形式显示出计数结果。
DATAS SEGMENT
co DW ?
DATAS ENDS
STACKS SEGMENT
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
INPUT:MOV AH,1
INT 21H ; 每次输入一个字符
CMP AL,24H ; 如果输入的字符为$,则结束循环输入,开始计算数字的个数
JE OUTIT
CMP AL,2FH ; 输入的字符ASIIC码小于0,继续输入
JLE INPUT
CMP AL,39H ; 输入的ASIIC码大于等于'0',小于等于'9',计数
JLE COUNT
JMP INPUT ; 大于'9'继续输入,不计数
COUNT:INC co ; 对数字0~9计数
JMP INPUT
OUTIT: MOV BX,co
MOV CH,4 ; 初始化循环次数
ROTATE: MOV CL,4
ROL BX,CL ; BX循环左移一个十六进制数位
MOV DL,BL ; BL内容送入DL以转换为ASIIC码
AND DL,0FH ; 得最右边的十六进制数位
ADD DL,30H ; 得到数字的ASIIC码
CMP DL,3AH ; 如果大于'0',则用字母表示,小于直接输出
JL PRINTIT
ADD DL,7
PRINTIT: MOV AH,2 ; 显示该十六进制
INT 21H
DEC CH ; 修改循环次数
JNZ ROTATE
MOV AX,4C00H
INT 21H
CODES ENDS
END START