概述
要求实现:
(1)输出提示信息“PLEASE INPUT A”
(2)利用01H功能,获取输入A(A为二位数,如下B同理)
(3)对输入A进行处理实现ASCLL码到数值的转换
(4)输出提示信息"PLEASE INPUT B"
(5)利用01H功能,获取输入B
(6)对输入B进行处理实现ASCII码到数值的转换
(7)计算A+B并实现十六进制到BCD码的转换
实现软件:EMU8086
DATA SEGMENT ;数据段
MSG1 DB 'PLEASE INPUT A',0DH,0AH,'$'
MSG2 DB 0DH,0AH,'PLEASE INPUT B',0DH,0AH,'$'
MSG3 DB 0DH,0AH,'RESULT IS',0DH,0AH,'$'
MSG4 DB 0DH,0AH,'ERROR',0DH,0AH,'$'
DATA ENDS
EXTRA SEGMENT;附加段
EXTRA ENDS
STACK SEGMENT;堆栈段
STAPN DB 100 DUP (00H) ;定义100字节空间
TOP EQU LENGTH STAPN
STACK ENDS
CODE SEGMENT
MAIN PROC FAR ;过程定义语句
ASSUME CS:CODE,DS:DATA,ES:EXTRA,SS:STACK
START:
MOV AX,DATA
MOV DS,AX
MOV AX,EXTRA
MOV ES,AX
MOV AX,STACK
MOV SS,AX
;写入代码
LEA DX,MSG1
MOV AH,09H
INT 21H
A:MOV AH,01H
INT 21H ;读入一个数的十位,放在AL中,读进来的数为ASCLL码
SUB AL,30H ;转为原来的数
MOV BH,AL ;将十位放在BH中
MOV AH,01H
INT 21H ;读入一个数的个位,放在AL中,读进来的数为ASCLL码
SUB AL,30H ;转为原来的数
MOV BL,AL ;个位放在BL
SHL BH,4
ADD BL,BH;十位和个位相加构成一个二位数,即操作者输入的数据
B: MOV DX,OFFSET MSG2
MOV AH,09H
INT 21H
MOV AH,01H
INT 21H
SUB AL,30H ;转为原来的数
MOV CH,AL
MOV AH,01H
INT 21H
SUB AL,30H ;转为原来的数
MOV CL,AL
SHL CH,4
ADD CL,CH;用户输入的B存在CL中
MOV AL,CL;将用户输入的B送回AL,以方便后续的BCD码调整
AND AH,00H
AND BH,00H;清空AH和BH
ADD AL,BL;A和B相加
DAA;组合BCD码加法调整指令
ADC AH,00H
MOV BH,AH
MOV BL,AL
MOV CL,AL;备份十位和个位在CL
DISPLAY:MOV DX,OFFSET MSG3
MOV AH,09H
INT 21H
ADD BH,30H ;输出百位数
MOV DL,BH ;将带显示字符的ASCLL码放入DL中
MOV AH,02H
INT 21H
AND BL,0F0H ;输出十位位数
SHR BL,4
ADD BL,30H
MOV DL,BL ;将带显示字符的ASCLL码放入DL中
MOV AH,02H
INT 21H
AND CL,0FH ;输出个位位数
ADD CL,30H
MOV DL,CL ;将带显示字符的ASCLL码放入DL中
MOV AH,02H
INT 21H
;退出DOS系统
MOV AH,4CH
INT 21H
;RET
;ERROR:LEA DX,MSG4
;MOV AH,09H
;INT 21H
RET
MAIN ENDP;MAIN过程结束
CODE ENDS ;代码段结束
END START ;整个源代码结束
最后
以上就是还单身泥猴桃为你收集整理的[微机原理与接口控制】利用DOS调用实现简单的加法(2)的全部内容,希望文章能够帮你解决[微机原理与接口控制】利用DOS调用实现简单的加法(2)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复