实验内容
1. 重复从键盘输入不超过5位的十进制数,按回车键结束输入。
2. 将该十进制数转换成十六制数;结果以十六进制数的形式显示在屏幕上。
3. 如果输入非数字字符,则报告出错信息,重新输入。
4. 键盘输入一字符串,以空格结束,统计其中数字字符的个数,在屏幕显示。
5. 输入’Q’或’q’时程序运行结束。
流程图
实验源码
STACK1 SEGMENT
DB 128 DUP(0)
STACK1 ENDS
DATA SEGMENT
TISHIINFO DB 'Please input a number:',0AH,0DH,'$'
STRING DB 0AH,0DH,'String:$'
INPUT DB 20H
DB 100 DUP('$')
RESULT DB 'Hex:$'
ERRORINFO DB 'Please input again:',0AH,0DH,'$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK1
START:
MOV AX, STACK1
MOV SS, AX
MOV AX, DATA
MOV DS, AX
MOV DX, OFFSET TISHIINFO
MOV AH, 09H
INT 21H
MOV BX,0
READ:
MOV DX, OFFSET STRING
MOV AH, 09H
INT 21H
MOV DX, OFFSET INPUT
MOV AH, 0AH
INT 21H
MOV BX, OFFSET INPUT+1
MOV CX, [BX]
MOV CH, 0
MOV DX, OFFSET INPUT+2
MOV AL, [BX+1]
CMP AL, 'q'
JE EXIT
CMP AL, 'Q'
JE EXIT
CALL NEW
CALL BINARY
PUSH AX
MOV DX, OFFSET RESULT
MOV AH, 09H
INT 21H
POP AX
CALL DISPHEX
JMP READ
EXIT:
MOV AH, 4CH
INT 21H
BINARY PROC
PUSH BX
PUSH SI
PUSH CX
PUSH DX
MOV BX, 0
MOV SI, DX
MOV AH, 0
MOV AL, [SI]
SUB AX, 30H
CMP AX, 9
JA OVERERR
CMP CX, 1H
JE BINPROCESS
MOV DX, 10
DEC CX
LOOPFORBIN:
INC SI
MOV DX, 10
MUL DX
MOV BL, [SI]
SUB BL, 30H
CMP BL, 9
JA OVERERR
ADD AX, BX
LOOP LOOPFORBIN
JMP BINPROCESS
OVERERR:
POP DX
POP CX
PUSH CX
PUSH DX
CALL COUNT
CALL NEW
MOV DX, OFFSET ERRORINFO
MOV AH, 09H
INT 21H
POP DX
POP CX
POP SI
POP BX
JMP READ
BINPROCESS:
POP DX
POP CX
POP SI
POP BX
RET
BINARY ENDP
COUNT PROC
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV SI, DX
MOV AX, 0
CHECK:
MOV BL, [SI]
INC SI
CMP BL, 30H
JB NOTNUM
CMP BL, 39H
JA NOTNUM
INC AX
NOTNUM:
LOOP CHECK
ADD AX, 30H
MOV DX, AX
MOV AH, 02H
INT 21H
POP DX
POP CX
POP BX
POP AX
RET
COUNT ENDP
DISPHEX PROC
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV BX, AX
MOV CX, 4
L1:
PUSH CX
MOV CL, 4
ROL BX, CL
MOV DL, BL
AND DL, 1111B
ADD DL, 30H
CMP DL, 39H
JBE DEAL
ADD DL, 7
DEAL:
MOV AH, 02H
INT 21H
POP CX
LOOP L1
POP DX
POP CX
POP BX
POP AX
DISPHEX ENDP
NEW PROC
PUSH AX
PUSH DX
MOV AH, 02H
MOV DL, 0AH
INT 21H
MOV DL, 0DH
INT 21H
POP DX
POP AX
RET
NEW ENDP
CODE ENDS
END START
实验结果