[微机原理与接口控制】利用DOS调用实现简单的加法(1)

要求实现:

(1)输出提示信息“PLEASE INPUT A”

(2)利用01H功能,获取输入A

(3)对输入A进行处理实现ASCLL码到数值的转换

(4)输出提示信息"PLEASE INPUT B"

(5)利用01H功能,获取输入B

(6)对输入B进行处理实现ASCII码到数值的转换

(7)计算A+B并实现十六进制到BCD码的转换

(8)当输出大于等于10时报错,只有当AB之和小于10时才可输出数据

实现软件:EMU8086

程序分析:

1.实现在DOS界面上输出字符串,可调用09H指令

2.实现在DOS界面上键盘输入并显示输入字符,可调用02H指令,该指令操作为用户输入一个字符,并显示在DOS界面上,输入值将赋给AL。

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 ;将MSG1首地址值赋给DX
      MOV AH,09H  ;调用09H指令,显示字符串,DS:DX=串指令
      INT 21H 
      
      MOV AH,01H
      INT 21H    ;读入一个数,放在AL中,读进来的数为ASCII码  
      SUB AL,30H  ;转为原来的数,因为30H为0的ASCLL码
      MOV BL,AL ;由于后期AL需要再度被赋值,固将操作数A存放在BL中
                               
      MOV DX,OFFSET MSG2 ;将首地址存放在DX中
      MOV AH,09H
      INT 21H 
          
      MOV AH,01H
      INT 21H  
      SUB AL,30H  ;转为原来的数,例如34H,原来的数实际上为我们由键盘输入的4

      
      ADD AL,BL    ;两数相加,根据条件(8)假如数字只和大于10则显示错误    
      CMP AL,0AH  ;假如大于等于10则错误
      JAE ERROR   ;相加之和大于等于10则跳转到ERROR,否则顺序执行
      MOV BL,AL 
      
      
      MOV DX,OFFSET MSG3
      MOV AH,09H
      INT 21H
      
      ADD BL,30H ;将BL众数据转换为ASCII码,因为输出结果是个位数且只输出一个字符
      
      MOV DL,BL  ;将待显示字符的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 ;整个源代码结束
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值