两个多位十进制数相加的实验
多位十进制数加法器设计.

深圳大学实验报告课程名称:微机原理及应用实验实验项目名称:多位十进制数加法器设计学院:物理科学与技术学院专业:应用物理指导教师:报告人:学号:班级:应用物理班实验时间:2015-10-19实验报告提交时间:2015-11-02教务处制五、程序说明(预习)七、实验源程序清单(实验后以电子报告形式存储到指定位置)1.源程序路径及文件名:ADD2.ASM ADD1.ASM2.可执行程序路径及文件名:八、上机调试情况说明EMU8086:一:没有键盘录入1.结果显示如下:2.程序运行时的各段地址:3.两个子程序IP入口:4.改变两个加数数值5.子程序格式及其调用方法和宏汇编区别子程序格式:子程序名称PROC NEAR ; 子程序定义; …子程序内容RET ;子程序返回子程序名称ENDP ;子程序结束调用格式:CALL 子程序名称注意事项:1、子程序不能直接传递参数,需要自行定义变量。
2、注意保护现场和恢复现场。
宏汇编与子程序的区别:1、宏汇编有宏展开,子程序没有2、宏汇编可以传递参数。
二:键盘录入DOS:例如:250+250=500例如:62142+63123=125265九、实验结果与分析结果如下:十、实验总结(必备部分,评分重要依据之一)本次实验实则是对实验二的加强巩固基础上,进行更加友好的人机交互设计;通过本次实验不仅在程序中首先把两个加数固定,在实验二的基础上扩展位数,考虑到最高位进位的情况,并最终得出正确结果;后来又通过键盘录入两个加数,增加了人机交互的设计,如此一来,更加加深了对寄存器的使用,汇编语言宏定义,子程序调用以及DOS功能调用的学习。
同时,通过本次实验的学习,更加熟练了EMU8086工具的使用,也把理论课上学习到的汇编操作指令实际操作,对汇编语言的风格加深认识。
MOV DL,BLINT 21HCRLFJMP BEGINERROR:CRLFMOV AH,09H ;显示输入错误LEA DX,STRING3INT 21HCRLFJMP BEGINEXIT:CRLFMOV AH,09H ;显示成功退出LEA DX,STRING4INT 21HMOV AH,4CHINT 21HCODE ENDSEND START(2)请问你的程序能否处理加数和被加数都介于0~65535范围但计算结果超出该范围的情况?如何改进?可以,如图:主要考虑到最高位是否进位,可以设置一个进位变量加以判断。
微机原理实验报告-两个多位十进制数相加的实验等.doc

微机原理实验报告-两个多位十进制数相加的实验等微机原理实验报告班级:学号:姓名:实验一两个多位十进制数相加的实验一、实验目的学习数据传送和算术运算指令的用法熟悉在PC机上建立、汇编、链接、调试和运行汇编语言程序的过程。
二、实验内容将两个多位十进制数相加,要求被加数和加数均以ASCII码形式各自顺序存放在以DATA1、DATA2为首的5个内存单元中(低位在前),结果送回DATA1处。
三、程序流程图图3-1四、参考程序清单DATA SEGMENTDATA1 DB 33H,39H,31H,37H,34H;被加数DATA1END E QU $-1DATA2 DB 34H,35H,30H,38H,32H;加数DATA2END EQU $-1SUM DB 5 DUP(?)DATA ENDSSTACK SEGMENTSTA DB 20 DUP(?)TOP EQU LENGTH STASTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA START: MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV AX,TOPMOV SP,AXMOV SI,OFFSET DATA1ENDMOV DI,OFFSET DATA2ENDCALL ADDAMOV AX,4C00HINT 21HADDA PROC NEARMOV DX,SIMOV BP,DIMOV BX,05HAD1: SUB BYTE PTR [SI],30HSUB BYTE PTR [DI],30HDEC SIDEC DIDEC BXJNZ AD1MOV SI,DXMOV DI,BPMOV CX,05HCLCAD2: MOV AL,[SI]MOV BL,[DI]ADC AL,BLAAAMOV [SI],ALDEC SIDEC DILOOP AD2MOV SI,DXMOV DI,BPMOV BX,05HAD3: ADD BYTE PTR [SI],30HADD BYTE PTR [DI],30HDEC SIDEC DIDEC BXJNZ A D3RETADDA ENDP CODE ENDSEND S TART五、实验结果分析我们计算的结果是:84256他们结果是一样的。
bcd码加法.

二.BCD码基本知识
BCD码有很多种表示方法,我们通常用 的BCD码是8421BCD码,我们单片机课 程当中的BCD码如不特别说明就是指 8421BCD码,8421BCD码实际就是用 0000—1001这样十个四位二进制数表示 0—9十个十进制数,但我们是以字节为 单位的,一个字节是八位二进制数,如 果高四位和第四位各存一个BCD码,这 样叫做压缩BCD码。
任务八BCD码相加
在单片机应用系统中,通常都要求进行 BCD码的运算,特别是在十进制运算的系 统中,很多的系统在人机界面的输出部分 往往都要用十进制显示,所以BCD码是很件来观看BCD码的相加过程。
在单片机应用系统中,通常都要求进行BCD码的运算, 特别是在十进制运算的系统中,很多的系统在人机界 面的输出部分往往都要用十进制显示,所以BCD码是 很重要的一部分。本任务通过WAVE6000软件来观看 BCD码的相加过程。 【任务目的】 1、理解什么是BCD码。 2、理解BCD码相加的过程。 【任务描述】 1、通过不同数据区的数据改变观察 BCD码的情况。 2、通过WAVE6000的窗口观察BCD码相加的情
MOV 50H , A
MOV A , 41H ADDC A , 31H DA A MOV 51H , A MOV A , #0
ADDC A , #0
MOV 52H , A END
;将加完并转化完的十进制数存至和值寄 存器的低位 ; ;将两个加数的高位相加 ;将高位相加后调整 ;将处理后的数据存至和值高位 ;如果有进位的话,将进位放至万位, 即将进位位Cy加至ACC ;既可。 ;ACC与0带进位位相加,就把Cy加至 ACC了 ;将万位存至52H ;结束伪指令
参考程序如下: ORG 0000H ;定位伪指令,指定下一条指令的地址,第一条指 令必须放在0000H MOV 30H , #78H ;第一个加数的高位。具体数值可以自己修改! MOV 31H , #34H ;第一个加数的低位。具体数值可以自己修改! MOV 40H , #56H ;第二个加数的高位。具体数值可以自己修改! MOV 41H , #12H ;第二个加数的低位。具体数值可以自己修改! MOV 50H , #0 ;将和值所要存储的数据区先清零。 MOV 51H , #0 MOV 52H , #0 MOV A , 40H ;因为加减指令必有一个为ACC暂存器,所以先将 一个加数的低 ;位送至ACC中,用于和另一个加数的低位相加。
十进制数的加法与减法

十进制数的加法与减法在我们日常生活中,十进制数是我们最常用的数制。
无论是购物、计算时间还是进行金融交易,我们都需要使用十进制数进行计算。
而在进行十进制数的加法和减法运算时,我们需要掌握一些基本的方法和技巧。
一、十进制数的加法十进制数的加法是我们最常见的运算之一。
下面,我将介绍一些常用的加法方法。
1. 垂直加法法则垂直加法法则是我们最常用的加法方法。
它的基本原理是将两个数的相同位数的数字对齐,然后从右向左逐位相加。
如果某一位的和大于等于10,就需要进位到更高位。
例如,计算1234 + 5678:```1234+ 5678------```首先,从右向左逐位相加:4 + 8 = 12,需要进位;3 + 7 + 进位 = 11,同样需要进位;2 + 6 + 进位 = 9;1 + 5 + 进位 = 7。
最终的结果是6912。
2. 补数法补数法是一种简化计算的方法。
它的基本原理是将一个数的补数与另一个数相加,然后再减去被加数的补数。
例如,计算47 + 58:首先,找到47的补数,即53。
然后,将53与58相加,得到111。
最后,减去47的补数53,得到58。
所以,47 + 58 = 111 - 53 = 58。
二、十进制数的减法十进制数的减法是加法的逆运算。
下面,我将介绍一些常用的减法方法。
1. 借位减法法则借位减法法则是我们最常用的减法方法。
它的基本原理是将两个数的相同位数的数字对齐,然后从右向左逐位相减。
如果被减数小于减数,就需要向高位借位。
例如,计算9876 - 5432:```9876- 5432------```首先,从右向左逐位相减:6 - 2 = 4;7 - 3 = 4;8 - 4 = 4;9 - 5 = 4。
最终的结果是4444。
2. 补数法补数法也可以用于减法运算。
它的基本原理是将一个数的补数与另一个数相加,然后再减去被减数的补数。
例如,计算98 - 57:首先,找到98的补数,即2。
然后,将2与57相加,得到59。
任意两个20位十进制数相加的例程

ASSUME CS:CODE,DS:DATA
ASSUME ES:DATA,SS:STACK
MAIN PROC FAR
START:
PUSH DS
XOR AX,AX
PUSH AX ;将程序段前缀入栈,利用RET返回时调用INT20H,返回DOS
REPZ SCASB ;跳过0值不显示
DEC DI
MOV AL," "
REPZ SCASB
MOV DX,DI ;显示缓冲区首址
DEC DX ;调整指针,指向要显示的第一个字符
MOV AH,09H
INT 21H ;利用DOS系统功能调用显示字串
DISPCHR PROC
MOV AH,02H
INT 21H ;调用DOS中断,显示DL中字符
LEA BX,STR2
CALL DISPSTR ;调用显示子程序,显示提示输入加数字符串
LEA BX,ADD2
CALL INPUT ;输入加数
LEA BX,ADD1
CALL ADDAIGN ;被加数个位对齐到高地址
LEA BX,ADD2
CALL ADDAIGN ;加数个位对齐到高地址
POP AX
POP DX
RET
DISPSTR ENDP
;**************************************************
;子程序名称:ADDALIGN
;子程序功能:将加数或被加数个位对齐(按最长20位处理)
; 入口参数:BX为处理的加数或被加数首址
STR1 DB "ADD1:","$"
两个多位十进制数相加实验

实验一两个多位十进制数相加实验一、实验目的1.熟悉在PC机上建立、汇编、连接、调试和运行汇编语言程序的过程。
2.掌握数据传送、算术运算、BCD码调整和循环指令的用法,掌握字符显示的方法。
3.熟悉和掌握用DEBUG调试程序的方法。
二、实验内容及要求1.将两个5位十进制数相加,要求被加数(本题选47193)和加数(本题选28056)均以ASCII码形式各自顺序存放在以DATAl和DATA2为首的5个内存单元中(低位在前),结果送回以DATA3为首的5个内存单元中(低位在前),并显示相加的结果。
2.如果考虑可能产生的进位,则要显示完整的结果,程序如何修改?3.应该Masm for Windows 集成实验环境调试运行并讲解程序,并用屏幕录像软件录制全过程,全程开启摄像头,以MP4G格式上传,完成实验报告的书写。
三、实验程序和结果DATA SEGMENT ;定义数据段DATA1 DB 33H,39H,31H,37H,34H ;被加数DATA2 DB 36H,35H,30H,38H,32H ;加数DATA3 DB 5 DUP(?) ;定义五个空子节DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA ;表明程序代码段与段地址之间的关系START: MOV AX,DATAMOV DS,AX ;将段地址送入段地址寄存器MOV CX,5 ;循环控制次数MOV SI,0CLC ;清除CF位NEXT: MOV AL,DATA1[SI]ADC AL,DATA2[SI] ;从低位开始进行带进位/借位的加法运算AAA ;转换成非压缩BCD码,低位存AL,高位存AHMOV DATA3[SI],AL ;将AL中的内容存入SI所在地址INC SILOOP NEXTMOV SI,5DISP: ADD DATA3[SI-1],30H ;将16进制数转换为ASCII码表示 MOV DL,DATA3[SI-1]MOV AH,2INT 21HDEC SI ;偏移地址自减JNZ DISPMOV AH,4CHINT 21H ;终断调用CODE ENDS ;结束程序代码段END START(页面不足请附页)四、实验总结和体会通过本次实验我对汇编有了更加具体的认识,也明白了汇编中各个寄存器的作用及寄存器间是怎样联系的,也初步明白了什么是断地址,什么是堆栈,以及汇编的基本结构和循环结构的基本运用,但是我了解的只是初步的,汇编中还有很多我不明白和不了解的地方,最重要的是汇编语句掌握不牢固,不能很快的知道一些专用的汇编语句的意义,这方面还是比较薄弱的,还需要在今后的实验和学习中不断的学习和练习。
十进制数的运算了解十进制数的运算法则

十进制数的运算了解十进制数的运算法则十进制数是我们日常生活中最为常见的数,它由0、1、2、3、4、5、6、7、8、9这十个数字组成。
在我们进行十进制数的运算时,需要了解一些基本的运算法则。
本文将介绍十进制数的运算法则,包括加法、减法、乘法和除法。
一、加法运算法则十进制数的加法是最简单的运算之一,我们只需要按照位数对应相加即可。
当两个十进制数相加时,从右往左一位一位相加,并保留进位。
如果最高位有进位,需要在结果的最左侧加上进位的值。
例如,计算76 + 39的结果:```76+39----115```在这个例子中,个位7和9相加得到16,十位7和十位3相加得到10,十位的进位需要加到百位。
因此,最后结果为115。
二、减法运算法则减法是加法的逆运算,同样需要按照位数进行计算。
当两个十进制数相减时,从右向左一位一位相减,并借位。
如果被减数小于减数,则需要向高位借位,被借位的数减去1。
例如,计算96 - 42的结果:```96-42----54```在这个例子中,个位6减去2得到4,十位9减去4得到5。
因为四十位的6小于被减数的2,所以需要向百位借位,并在被借位的6上减去1,变为5。
所以最后结果为54。
三、乘法运算法则十进制数的乘法运算需要使用到乘法表格。
我们需要按照列竖直相乘的方式进行计算,并将每一列的积相加。
例如,计算27 × 36的结果:```27------162 (7×6)+ 810 (7×30)------972```在这个例子中,个位7与个位6相乘得到42,十位7与十位3相乘得到21,然后将这两个积相加得到162。
接下来,个位7与十位3相乘得到21,并将得到的积补0,得到810。
最后,将162与810相加得到最终的结果972。
四、除法运算法则十进制数的除法是比较复杂的运算,需要进行多次计算才能得到商和余数。
我们需要按照竖式除法的方式进行计算。
例如,计算648 ÷ 9的商和余数:```72------9 |648----28```在这个例子中,我们从左向右按位进行计算。
微机原理 两个多位十进制数相加

实验三两个多位数十进制数相加的实验一、实验目的学习数据传送和算术运算指令的用法。
熟悉在PC机上建立、汇编、链接、调试和运行8086汇编语言程序的过程。
二、实验内容及程序将两个多位数十进制数相加,要求被加数和加数均以ASCⅡ码形式各自顺序存放在以DATA1和DA TA2为首的5个内存单元中,且低位在前,结果送回DA TA1处。
编程要求与提示:[1] 两个加数均以压缩(组合)十进制数形式存放在ADD1和ADD2为首址的存贮器单元。
[2] 和以压缩十进制数的形式存入SUM以下单元。
[3] 将和送到屏幕显示部分功能的实现采用子程序的形式。
[4] 实验步骤如下:a. 用全屏幕编辑软件建立源程序。
b.用masm.exe汇编程序对源程序进行汇编,形成目标程序。
c. 用link.exe连接程序对目标程序进行连接形成可执行文件。
d. 用DEBUG对连接通过的可执行程序进行调试。
三、参考流程STACK SEGMENT STACK 'STACK'DW 100H DUP(?)STACK ENDSDA TA SEGMENTADD1 DD 12678532H ;加数以组合十进制形式存放在双字单元ADD2 DD 21736543HSUM DD ?DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TA,ES:DATA,SS:STACKSTART: MOV AX,DA TAMOV DS,AXMOV ES,AXMOV AX,STACKMOV SS,AXLEA SI,ADD1LEA DI,ADD2LEA BX,SUMMOV AL,[SI]ADD AL,[DI] ;最低位的一个字节相加DAA ;加法组合BCD码调整MOV [BX],AL ;结果存放在SUM第一个字节MOV AL,[SI+1] ;第二个字节相加ADC AL,[DI+1]DAAMOV [BX+1],ALMOV AL,[SI+2]ADC AL,[DI+2]DAAMOV [BX+2],ALMOV AL,[SI+3]ADC AL,[DI+3]DAAMOV [BX+3],ALMOV DL,00 ;最高位字节有进位则显示"01"ADC DL,00CALL DISPSUMMOV AH,4CH ;返回DOSINT 21HDISPSUM PROC NEAR ;结果显示子程序PUSH AXPUSH BXPUSH CXPUSH SIMOV SI ,4PUSH DXMOV CX,5LAB:PUSH CXPUSH BXMOV AL,DLMOV BL,DLMOV CL,4 ;显示高位字节SHR AL,CLADD AL,30HMOV AH,02MOV DL,ALINT 21H ;显示一位字符AND BL,0FH ;显示低位字节ADD BL,30HMOV AH,02MOV DL,BLINT 21HPOP BXPOP CXDEC SIMOV DL,[BX][SI] ;结果显示LOOP LABPOP DXPOP SIPOP CXPOP BXPOP AXRETDISPSUM ENDPCODE ENDSEND START。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
学生实验报告
(2010 —学年第学期)课程名称:微型计算机原理与接口技术开课实验室:2011年月日年级、专业、班学号姓名成绩实验项目名称两个多位十进制数相加的实验指导教
师
教
师
评语教师签名:
年月日
注:报告内容按实验须知中几点要求进行。
一、实验目的
1、学习数据传送和算术运算指令的用法。
2、熟悉在PC机上建立、汇编、链接、调试和运行8088汇编语言程序的过程。
3、学会PC机得安装
4、认识编程过程
二、实验原理及基本技术路线图或实验内容(方框原理图或程序流程图)
将两个多位十进制数相加。
要求被加数均以ASCII码形式各自顺序存放在以DATA1和DATA2为首的5个内存单元中(低位在前),结果送回DATA1处。
程序框图
三、所用软件
四、实验步骤
整个程序分为4个部分:显示加数、转换、相加、输出结果。
五、源码程序编制及分析注释
CRLF MACRO ;宏定义指令(回车执行程序)
MOV DL,0DH ;回车
MOV AH,02H ;2号调用,显示回车
INT 21H
MOV DL,0AH ;换行
MOV AH,02H ;2号调用换行
INT 21H
ENDM ;宏指令定义结束
DATA SEGMENT ;数据段定义
DATA1 DB 33H,39H,31H,37H,34H ;第一个数据(作为加数)47193
DATA2 DB 36H,35H,30H,38H,32H ;第二个数据(作为被加数)28056
DATA ENDS ;数据段定义结束
STACK SEGMENT ;堆栈段定义
STA DB 20 DUP(?) ;定义从STA开始20个单元作为堆栈使用TOP EQU LENGTH STA ;TOP等于堆栈单元数
STACK ENDS
CODE SEGMENT ;代码段定义
ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA
START: MOV AX,DATA
MOV DS,AX ;设置数据段
MOV AX,STACK
MOV SS,AX ;设置堆栈段
MOV AX,TOP
MOV SP,AX
MOV SI,OFFSET DATA2 ;DATA2的偏移地址送SI
MOV BX,05 ;计数次数为5次
CALL DISPL ;调用多次显示子程序DISPL(显示28056)
CRLF ;回车换行
MOV SI,OFFSET DATA1 ;DATA1的偏移地址送SI
MOV BX,05 ;计数次数为5次
CALL DISPL ;调用多次显示子程序DISPL(显示47193)
CRLF ;回车换行
MOV DI,OFFSET DATA2
CALL ADDA ;使用加法运算程序
MOV SI,OFFSET DATA1 ;将和显示在屏幕上
MOV BX,05 ;显示结束
CALL DISPL ;调用多次显示子程序DISPL
CRLF ;执行回车换行程序
MOV AX,4C00H ;返回系统提示符
INT 21H
DISPL PROC NEAR ;多次显示子程序
DS1: MOV AH,02 ;显示功能号
MOV DL,[SI+BX-1] ;显示字符串中一字符
INT 21H ;DOS的中断调用
DEC BX ;BX减1,修改偏移量
JNZ DS1 ;如果BX未减到零跳到DSL执行指令
RET ;返回
DISPL ENDP ;完成显示功能子程序定义
ADDA PROC NEAR ;实行加法运算子程序定义、属性为NEAR MOV DX,SI
MOV BP,DI
MOV BX,05 ;转换5次
AD1: SUB BYTE PTR [SI+BX-1],30H ;把加数的ASCLL转换为16进制SUB BYTE PTR [DI+BX-1],30H ;把被加数的ASCLL转换为16进制
DEC BX ;修改偏移量
JNZ AD1
MOV SI,DX
MOV DI,BP
MOV CX,05 ;包括进位,共5位
CLC ;清进位
AD2: MOV AL,[SI]
MOV BL,[DI]
ADC AL,BL ;进行代进位加法
AAA ;非组合BCD码的加法调整
MOV [SI],AL ;结果送被加数区
INC SI
INC DI ;指向下一位
LOOP AD2 ;循环
MOV SI,DX
MOV DI,BP
MOV BX,05
AD3: ADD BYTE PTR [SI+BX-1],30H
ADD BYTE PTR [DI+BX-1],30H
DEC BX ;十六进制的数字串转化
JNZ AD3
RET
ADDA ENDP ;加法程序结束
CODE ENDS ;代码段结束
END START ;整个程序结束
五、实验结果
六、心得体会
通过这次实验让我对这个软件的编程有了更深的了解、知道如何安装这个软件、怎样运行程序。
让我学到了很多课本是学不到的东西,有一点意外收获的感觉。
Welcome To Download !!!
欢迎您的下载,资料仅供参考!。