汇编调用子程序计算输入的数字个数并以十进制形式显示计算结果【源码】

;版权所有,欢迎借鉴
DATAS 	SEGMENT
MSG1	DB 'Please enter data:$'
MSG2	DB 'The number of the data is:$'
DATAS 	ENDS

STACKS 	SEGMENT
STACKS 	ENDS

CODES 	SEGMENT
    	ASSUME 	CS:CODES,DS:DATAS,SS:STACKS
START:
    	MOV 	AX,DATAS
    	MOV 	DS,AX

    	LEA	DX,MSG1				;显示“Please enter data:”
    	MOV	AH,9
    	INT	21H
    	
    	CALL	ENTER1				;回车换行
    	CALL	READ				;调用子程序,
    						;读取用户输入的数字,计算个数
    	
    	LEA	DX,MSG2				;显示“The number of the data is:”
    	MOV	AH,9
    	INT	21H
    	
    	CALL	ENTER1				;回车换行
    	CALL	SHOW				;显示输入数字的个数,以十进制的形式
    	CALL	ENTER1				;回车换行
    	CALL	ENTER1				;再次回车换行,使得每次操作以段落
    						;的形式显示,使界面清新
    	JMP	START				;循环
    	
    	MOV 	AH,4CH
    	INT 	21H
    	
;----------------------------------------
;【子程序-读取用户输入的数字并计算个数】
READ	PROC
		MOV		CX,0
		
TAG0:		MOV		AH,1				;调用1号功能请求输入一个字符
		INT		21H
		
		CMP		AL,'0'				;判断所输入的字符是否为数字
		JB		TAG1
		CMP		AL,'9'
		JA		TAG1
		
		MOV		AX,CX				;由于下面的DAA指令要使用AX寄存器,
								;所以启用CX作临时存储使用
		ADD		AX,1				;输入是数字的话,加一
		DAA						;把相加后的结果转换为BCD码
		MOV		CX,AX				;保存起来
		JMP		TAG0				;循环请求输入
TAG1:	RET
READ	ENDP
;【子程序-读取用户输入的数字并计算个数】
;----------------------------------------

;----------------------------------------
;【子程序-以十进制的形式显示数字个数】
SHOW	PROC
		MOV		BX,CX				;读取数字个数
		MOV		CL,4H				;位移次数
		ROR		BX,CL				;右移4位
		ADD		BX,'0'				;转换为数字对应的字符
		MOV		DL,BL				;结果送到DL,以备输出
		MOV		AH,2				;调用2号功能显示高位
		INT		21H
		ROL		BX,CL				;左移4位
		AND		BX,0FH				;去掉高位的值
		ADD		BX,'0'				;转换为数字对应的字符
		MOV		DL,BL				;......
		INT		21H
		RET						;返回
SHOW	ENDP
;【子程序-以十进制的形式显示数字个数】
;----------------------------------------

;----------------------------------------
;		【子程序-实现回车换行】
ENTER1	PROC
		MOV		AH,2H
		MOV		DL,0DH				;回车
		INT		21H
		MOV		DL,0AH				;换行
		INT		21H
		RET
ENTER1	ENDP
;		【子程序-实现回车换行】
;----------------------------------------

CODES 	ENDS

    	END 	START





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值