微原实验二 数码转换

实验内容

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

实验结果

在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Polaris_T

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值