汇编语言实现从键盘输入两个4位十进制数 ,求和输出(详解) 您所在的位置:网站首页 汇编八位二进制输出四位 汇编语言实现从键盘输入两个4位十进制数 ,求和输出(详解)

汇编语言实现从键盘输入两个4位十进制数 ,求和输出(详解)

2024-01-19 16:59| 来源: 网络整理| 查看: 265

程序段目录 题目要求程序结构数据段定义十六进制输出十进制输出 代码段定义初始化及主程序输入累加输出十六进制输出十进制输出 结束

题目要求

汇编语言实现从键盘输入两个4位十进制数 ,将它们的和存SUM 单元,并输出对应的十进制数 。 汇编语言实现从键盘输入两个4位十进制数 ,将它们的和存SUM 单元,并输出对应的十六进制数 。 用子程序结构完成课程设计

程序结构

数据段定义——程序初始化——输入——累加——输出——结束 十进制和十六进制的处理存在区别,根据需要进行搭配

数据段定义 十六进制输出 DATA SEGMENT A DB 5 ;为调用10号功能准备的数据区A DB ? DB 5 DUP(?) B DB 5 ;为调用10号功能准备的数据区B DB ? DB 5 DUP(?) SUM DW ? ;数值结果数据区 TEN DW 10 ;固定值10,用于加倍 DATA ENDS 十进制输出 DATA SEGMENT A DB 5 DB ? DB 5 DUP(?) B DB 5 DB ? DB 5 DUP(?) SUM DW ? ;数值结果数据区 TEN DW 10 ;固定值10,用于加倍 RESULTS DB 5 DUP('0') ;字符结果数据区 DB '$' DIVISORS DW 10000,1000,100,10,1 ;除数 DATA ENDS 代码段定义 初始化及主程序 CODE SEGMENT ASSUME CS:CODE,DS:DATA BEGIN: MOV AX,DATA MOV DS,AX MAIN: CALL INPUT ;主程序 MOV SI,OFFSET A CALL PROCDP MOV SI,OFFSET B CALL PROCDP CALL OUTPUT MOV AH,4CH INT 21H 输入 INPUT PROC ;输入两个数,回车换行表示结束 MOV DX,OFFSET A ;10号功能调用输入 MOV AH,10 INT 21H MOV DL,0AH ;换行 MOV AH,2 INT 21H MOV DX,OFFSET B ;10号功能调用输入 MOV AH,10 INT 21H RET INPUT ENDP 累加 PROCDP PROC ;输入的数转为十进制,并按位直接加到sum,该程序调用两次 ADD SI,2 ;跳过数据区头两个用于指明字符个数的字节 MOV BX,4 ;4位十进制数,从个位开始处理 MOV CX,1 ;倍数,用于按位累加 LOP: DEC BX MOV AL,[SI][BX] ;基址变址方式寻址 AND AX,00FFH ;AX高位清零 SUB AL,30H ;从ASCII码转为十进制数 MUL CX ADD SUM,AX ;累加 MOV AX,CX ;CX的值乘10,用于按位加倍 MUL TEN MOV CX,AX CMP BX,0 ;如果BX=0,说明已经处理完 JNE LOP RET PROCDP ENDP

累加过程是把A、B的值分别按位加到SUM中,并不是俩个值独立转换后再相加

输出 十六进制输出 OUTPUT PROC ;转化成十六进制输出 MOV DL,0AH MOV AH,2 INT 21H MOV BX,SUM MOV CH,4 MOV CL,4 T1: ROL BX,CL ;循环左移4位 MOV AL,BL ;屏蔽高4位 AND AL,0FH ADD AL,30H ;转换为ASCII码 CMP AL,3AH ;ASCII码与3AH比较,如果大于3AH说明已经到了A~F的范围 JL T2 ADD AL,07H T2: MOV DL,AL ;不大于3AH说明在0~9范围 MOV AH,2 INT 21H DEC CH JNZ T1 MOV DL,48H ;显示字符H,标注结果是十六进制 MOV AH,2 INT 21H RET OUTPUT ENDP 十进制输出 OUTPUT PROC NEAR MOV SI,OFFSET DIVISORS MOV DI,OFFSET RESULTS MOV AX,SUM ;SUM存储着要显示的字符 MOV CX,5 L1: MOV DX,0 DIV WORD PTR [SI] ;除法指令的被除数是隐含操作数,此处为dx:ax,商ax,余数dx ADD AL,30H MOV BYTE PTR [DI],AL ;转换成ASCII码后存入结果存储区 INC DI MOV AX,DX ADD SI,2 LOOP L1 MOV CX,5 MOV DI,OFFSET RESULTS ;重新回到results的开始 L2: CMP BYTE PTR [DI],'0' ;不输出前面的0字符,跳过results中的0位 JNE L3 INC DI LOOP L2 L3: MOV DL,0AH ;换行 MOV AH,2 INT 21H MOV DX,DI ;9号功能调用输出 MOV AH,9 INT 21H RET OUTPUT ENDP

十进制输出引用自:

https://blog.csdn.net/pfboy/article/details/1549942

结束 CODE ENDS END BEGIN


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有