微机原理实验一 两个多位十进制数相加实验试做报告

合集下载

多位十进制数加法器设计.

多位十进制数加法器设计.

深圳大学实验报告课程名称:微机原理及应用实验实验项目名称:多位十进制数加法器设计学院:物理科学与技术学院专业:应用物理指导教师:报告人:学号:班级:应用物理班实验时间: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范围但计算结果超出该范围的情况?如何改进?可以,如图:主要考虑到最高位是否进位,可以设置一个进位变量加以判断。

多位十进制数加法器设计.

多位十进制数加法器设计.

深圳大学实验报告课程名称:微机原理及应用实验实验项目名称:多位十进制数加法器设计学院:物理科学与技术学院专业:应用物理指导教师:报告人:学号:班级:应用物理班实验时间: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范围但计算结果超出该范围的情况?如何改进?可以,如图:主要考虑到最高位是否进位,可以设置一个进位变量加以判断。

微机原理实验报告

微机原理实验报告

微机原理实验报告班级:指导老师:学号:姓名:实验一两个多位十进制数相加的实验一、实验目的学习数据传送和算术运算指令的用法熟悉在PC机上建立、汇编、链接、调试和运行汇编语言程序的过程。

二、实验内容将两个多位十进制数相加,要求被加数和加数均以ASCII码形式各自顺序存放在以DATA1、DATA2为首的5个内存单元中(低位在前),结果送回DATA1处。

三、程序框图图3-1四、参考程序清单DATA SEGMENTDATA1 DB 33H,39H,31H,37H,34H;被加数DATA1END EQU $-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],30H SUB 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 AD3RETADDA ENDPCODE ENDSEND START五、实验结果与分析这次实验依次将相加数与被加数存入AL,BL,依次从低位向高位相加,然后把结果放在内存中。

实验二数据传送及两个多位十进制数相加的实验

实验二数据传送及两个多位十进制数相加的实验

实验二数据传送及两个多位十进制数相加的实验1、实验目的(1).学习数据传送和算术运算指令的用法。

(2).熟悉在PC机上建立、汇编、链接、调试和运行8088汇编语言程序的过程。

2、实验内容将两个多位十进制数相加。

要求被加数均以ASCII码形式各自顺序存放在以DA TAl和DA TA2为首的5个内存单元中(低位在前),结果送回DA T Al处。

3、部分程序代码DATA SEGMENT ;数据段……...... ;补充必要的代码,定义被加数和加数DATA ENDSSTACK SEGMENT STACK ;堆栈段STA DB 64 DUP(0)SP_TOP DB 0STACK ENDSCODE SEGMENT ;代码段...... ;补充必要的代码START:...... ;补充必要的代码MOV SI, OFFSET DATA1MOV BX,05CALL DISPL ; 显示被加数CALL CRLF ; 回车、换行...... ;补充必要的代码,显示加数CALL CRLF ; 回车、换行LEA DI, DA TA2CALL ADDA ;加法运算...... ;补充必要的代码,显示结果CALL CRLF ; 回车、换行......; 主程序结束,返回DOSCRLF PROC NEAR ;回车、换行于功能MOV DL,0DH ;回车(0DH为回车的ASCII 码)MOV AH,02H ; 送DOS 的中断调用功能号INT 21H ; DOS 的中断调用MOV DL,0AH ;换行(0AH为换行的ASCII 码)MOV AH,02H ; 送DOS 的中断调用功能号INT 21H ; DOS 的中断调用RETCRLF ENDPDISPL PROC NEAR ; 显示子程序DSL: MOV AH,02 ; 送显示功能号MOV DL,[SI+BX-1] ; 显示字符串中一字符INT 21H ; DOS INT 21 功能调用DEC BX ;修改偏移量JNZ DSLRETDISPL ENDPADDA PROC NEAR......;需要自编的求和核心程序RETADDA ENDPCODE ENDSEND START4.实验及报告要求:1)要求画出完整的程序流程图。

多位十进制数加法器实验-2014

多位十进制数加法器实验-2014

实验三多位十进制数加法器设计1、实验目的(1)继续熟练掌握在PC机上建立、汇编、链接、调试和运行8088汇编语言程序的过程;(2)学习数据传送和算术运算指令的用法;(3)掌握子程序设计方法;(4)掌握宏汇编设计方法;(5)掌握键盘输出的DOS功能调用方法。

2、实验内容(1)将两个多位十进制数相加。

要求被加数、加数均以ASCII码形式各自按高位高地址的规律分别顺序存放在以DATAl和DATA2为首的5个内存单元中(低位在前),结果送回结果变量DATA3处,并屏幕显示结果。

(2)在以上程序基础上,设计一个多位十进制数加法器,键盘输入十进制加数和被加数,将输入和输出结果以竖式形式显示在屏幕。

3、提示:(1)算法说明:以42136与12547相加为例,首先将两个数中的每一位都以ASCII码存入相应的内存单元,然后将每一位数都减去30H,并将被加数DATA1和加数DATA2相对应位相加(BCD码加法及其十进制调整,要考虑低位向高位的进位),存入相应的结果DATA3存储单元中,最后将该单元中的每一位数转换成相应的ASCII码,调用DOS系统功能调用的显示字符指令,显示两数相加的结果。

(2)部分程序代码:DATA SEGMENT ;数据段…;补充必要的代码,定义被加数、加数和结果变量DATA ENDSSTACK SEGMENT STACK ;堆栈段STA DB 64 DUP(0)SP_TOP DB 0STACK ENDSCODE SEGMENT ; 代码段…;补充必要的代码;显示回车换行功能用宏定义CRLF实现,放在代码段最前面CRLF MACROMOV DL,0DH ;回车(0DH为回车的ASCII 码)MOV AH,02H ; 送DOS 的中断调用功能号INT 21H ; DOS 的中断调用...;补充必要的代码:用DOS功能调用实现换行,0AH为换行的ASCII 码ENDMSTART:...; 补充必要的代码:程序开头必须要有的五条指令; 显示被加数,并回车换行MOV BX, OFFSET DATA1MOV SI, 05CALL DISPL ; 显示被加数,DISPL为显示子程序CRLF ; 回车、换行宏调用…; 补充必要的代码,显示加数CALL ADDA ;调用加法运算子程序…; 补充必要的代码,显示结果…; 补充必要的代码:回车、换行...; 补充必要代码:主程序结束,返回DOS;DISPL为字符串显示子程序DISPL PROC NEAR ; 子程序定义DSL: MOV AH,02 ; 送显示功能号MOV DL,[BX+SI-1] ; 显示字符串中一字符INT 21H ; DOS INT 21 功能调用DEC SI ;修改偏移量JNZ DSLRETDISPL ENDP; 多位数加法子程序ADDA PROC NEAR...;需要自编的求和核心程序RETADDA ENDP;代码段与程序结束CODE ENDSEND START(3)加法器的设计:需要用到字符串输入和字符串输出的DOS功能调用。

微机原理实验 数据传送及两个多位十进制数相加

微机原理实验 数据传送及两个多位十进制数相加

深圳大学实验报告课程名称:微机原理及应用实验实验项目名称:数据传送及两个多位十进制数相加学院:专业:指导教师:报告人:学号:班级:实验时间:实验报告提交时间:教务处制一、实验名称:数据传送及两个多位十进制数相加二、实验目的(1)学习数据传送和算术运算指令的用法。

(2)熟悉在PC机上建立、汇编、链接、调试和运行8088汇编语言程序的过程。

三、实验内容将两个多位十进制数相加。

要求被加数均以ASCII码形式各自顺序存放在以DATAl和DATA2为首的5个内存单元中(低位在前),结果送回DATAl处。

四、实验电路及连线(硬件实验)此实验属于软件实验,故无硬件实验的电路及连线。

五、程序说明(预习)包括程序功能,程序框图,算法说明及所用到的寄存器等。

功能:将被加数和加数分别显示,接着运行加法运算,然后将结果显示出来。

算法说明:①定义数据段:定义被加数和加数,且要使其用ASCII码以十六进制之间的转换;②定义堆栈段,并给SP_TOP单元赋初值0;③定义代码段,并将源代码放在里面首先,编写主程序;接着,编写显示、回车换行和加法运算的子程序。

④程序结束。

所用到的寄存:AX、SS 、CS 、DS、 ES、SI、SP、DI程序框图:开始显示加数和被加数加数和被加数以ASCⅡ码表示的数字串形式转化为由十六进制表示的数字串形式赋计数值给CX清除最低位进执行ADC带进位相加AAA调整结果送被加数区调整偏移量显示加数和被加数CX-1=0十六进制结果转化为ASCⅡ显示结果结束六、源程序清单(预习);DATAS SEGMENT ;数据段DATA1 DB 33H,32H,38H,34H,37H ;定义DATA1为被加数DATA2 DB 34H,35H,39H,37H,31H ;定义DATA2为加数DATAS ENDSSTACKS SEGMENT ;堆栈段STA DB 64 DUP(0) ;为STA预留64个字节的存储空间SP_TOP DB 0 ;定义SP_TOP单元的数值为0 STACKS ENDSCODES SEGMENT ;代码段ASSUME CS:CODES,DS:DATAS,ES:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AX ; 设置数据段MOV AX,STACKSMOV SS,AX ; 设置堆栈段LEA SP,SP_TOP ; 设置栈顶指针MOV SI,OFFSET DATA1 ;把DATA1偏移量地址赋予SIMOV BX,05CALL DISPL ; 显示被加数CALL CRLF ; 回车、换行MOV SI,OFFSET DATA2 ; 把DATA2偏移量地址赋予SIMOV BX,05CALL DISPL ; 显示加数CALL CRLF ; 回车、换行MOV DI,OFFSET DATA1 ; 把DATA1偏移量地址赋予DICALL ADDA ;调用ADDA子程序,实行加法运算MOV BX,05CALL DISPL ; 显示结果CALL CRLF ; 回车、换行MOV AX,4C00H ;INT 21H ;调用DOS21H功能,返回CRLF PROC NEAR ;回车、显示功能过程定义,属性为NEAR MOV DL,0DH ;把回车的ASCII码0DH传给DLMOV AH,02H ;送DOS 的中断调用功能号INT 21H ; DOS 的中断调用MOV DL,0AH ; 把换行的ASCII码0AH传给DLMOV AH,02H ; 送DOS 的中断调用功能号INT 21H ; DOS 的中断调用RET ; 返回CRLF ENDP ;完成过程定义DISPL PROC NEAR ;显示功能过程定义,属性为NEARDSL: MOV AH,02 ;送显示功能号MOV DL,[SI+BX-1] ;显示字符串中一字符INT 21H ; DOS 的中断调用DEC BX ;BX减1,修改偏移量JNZ DSL ;如果BX未减到零,跳到DSL执行指令RET ;返回DISPL ENDP ;完成显示功能子程序定义ADDA PROC NEAR ;实行加法运算子程序过程定义,属性为NEAR MOV DX,SIMOV BP,DIMOV BX,05TRAN_HEX: SUB BYTE PTR[SI+BX-1],30H ;把ASCII码数转化为十六进制SUB BYTE PTR[DI+BX-1],30HDEC BX ;BX减1,修改偏移量JNZ TRAN_HEX ;如果BX未减到零,跳到TRAN_ HEX执行指令MOV SI,DXMOV DI,BPMOV CX,05 ; 包括进位,共5位CLC ;进位标志位CF清零(clear carry flag)THE_ADD: MOV AL,[SI]MOV BL,[DI]ADC AL,BL ; 带进位相加,把结果存在AXAAA ;进行AAA调整,非结合BCD码的加法调整MOV [SI],AL ; 结果送被加数区INC SI ;SI加1INC DI ;DI加1(指向下一位)LOOP THE_ADD ;循环MOV SI,DXMOV DI,BPMOV BX,05TRAN_ASCI: ADD BYTE PTR[SI+BX-1],30HADD BYTE PTR[DI+BX-1],30H ;使用PTR转换属性并相加,将十六进制数转化为ASCII表示DEC BX ; BX减1,修改偏移量JNZ TRAN_ASCI ; 如果BX未减到零,跳到TRAN_ASCIRET ;返回ADDA ENDP ;加法子程序定义完成CODES ENDS ;代码段完成END START七、实验源程序清单(实验后以电子报告形式存储到指定位置)1.源程序路径及文件名:E:\masm\实验三\l3.asm2.可执行程序路径及文件名:E:\masm\实验三\l3.exe;八、上机调试情况说明1.上机调试步骤A.通过dos对pts3.asm文件进行操作。

微机实验-2(多精度十进制加法程序设计)

微机实验-2(多精度十进制加法程序设计)

实验内容及要求
2、完成程序的设计、调试程序并学习 DEBUG工具的D命令、E命令、F命令、R 命令、G命令、U命令、单T命令、N命令、 L命令、Q命令等常用调试命令的使用,运 L Q 行程序并记录结果。 3、完成实验报告。
实验内容及要求
编程思路
该题目要求掌握加法ADD、ADC指令和十进制 调整DAA指令的应用和循环程序的编程方法。为 了实现指定功能,应从以下几个方面考虑: 【1】组织数据时,要按照高位在高地址,低位在 低地址的原则。 【2】完成多精度字节数据相加运算,最低字节用 ADD指令,而其它高位字节则要用ADC指令。 还要考虑最后的进位位存储。
实验内容及要求
1、编写程序将内存两个多精度十进制数相加。 4619534937+2531498790 = 11151033727 要求被加数和加数均以压缩BCD码形式分别存放在 以DATA1和DATA2为首的连续5个字节单元中,结果 送以RESULT为首存储区。 已知变量DATA1和DATA2定义如下: DATA1 DB 37H,49H,53H,19H,46H ;被加数 DATA2 DB 90H,87H,49H,31H,65H ;加数 RESULT DB 6 DUP(?) ;结果
十进制加法计数器高精度加法微机原理实验微机实验报告微机接口实验报告微机原理实验报告微机实验微机原理实验答案南邮微机实验东南大学微机实验
实验二 多精度十进制 加法程序设计
实验目的
1、学习数据传送和算术运算指令的用 法。 2、学习循环程序编程方法。 3、掌握多字节加法计算程序的设计方 法。 4、学会使用DEBUG工具调试程序。
实验内容及要求
【3】因为被加数和加数都以压缩BCD码表示,所以 在加法指令之后要有压缩BCD码加法调整指令DAA。 【4】题目要求完成5个字节十进制数相加,所以应 采用循环程序结构。 【5】 程序结束时应使用DOS系统功能调用返回系统 提示符。即程序代码段的最后两条指令应是: MOV AH,4CH INT 21H

两个多位十进制数相加实验

两个多位十进制数相加实验

实验一两个多位十进制数相加实验一实验目的1学习数据传送及算术运算指令的用法2 进一步熟悉汇编语言上机过程二、实验要求1 独立完成每个实验项目2 按照程序流程图编好实验程序三程序框图Array加程序四、实验所用仪器计算机电源DVCC——8086 实验箱一台五、实验步骤和方法1 独立编好程序2 在软件上调试实验程序3 写出实验结果实验二将键盘输入的小写字母转换成大写字母一实验目的了解小写字母和大写字母在计算机内的表示方法,学习如何转换二、实验要求1 独立完成每个实验项目2三程序框架加程序四、实验所用仪器计算机电源DVCC——8086 实验箱一台五、实验步骤和方法1 独立编好程序2 在软件上调试实验程序3 写出实验结果实验三输入字符一实验目的1学习数据传送及算术运算指令的用法2 进一步熟悉汇编语言上机过程加程序四、实验所用仪器计算机电源DVCC——8086 实验箱一台五、实验步骤和方法1 独立编好程序2 在软件上调试实验程序3 写出实验结果实验四8255A并行口实验一、实验目的加深理解逐次逼近法模数转换器的特征和工作原理,掌握ADC0809的接口方法以及A/D输入程序的设计和调试方法。

二、实验要求1 理解实验程序2 掌握各个芯片的原理和使用方法。

三、实验原理PC口8位接8个开关K1~ K8,PB口8位接8个发光二极管,从PC口读入8位开关量送PB口显示。

拨动K1~ K8,PB口上接的8个发光二极管L1~ L8对应显示K1~ K8的状态。

程序:CODE SEGMENTASSUME CS:CODEIOCONPT EQU 0073HIOAPT EQU 0070HIOBPT EQU 0071HIOCPT EQU 0072HIOBDATA EQU 0500HCONTPORT EQU 00DFHDATAPORT EQU 00DEHDATA1 EQU 0640HSTART: J MP IOLEDIOLED: CALL FORMATCALL LEDDISPMOV DS,AXMOV AL,82HMOV DX,IOCONPTOUT DX,ALMOV DX,IOBPTIN AL,DXMOV BYTE PTR DS:[0501H],ALMOV DX,IOCONPTMOV AL,80HOUT DX,ALMOV DX,IOBPTMOV AL,DS:[0501H]OR AL,0F0HOUT DX,ALMOV DX,IOCPTMOV AL,0F0HOUT DX,ALCALL DELAY1IOLED0: MOV AL,10100101BMOV DX,IOCPTOUT DX,ALCALL DELAY1CALL DELAY1OR AL,0F0HOUT DX,ALMOV CX,8HIOLED1: MOV DX,IOBPTMOV AL,DS:[0501H]AND AL,10101111BOUT DX,ALCALL DELAY2OR AL,01010000BOUT DX,ALCALL DELAY2LOOP IOLED1MOV DX,IOCPTMOV AL,0F0HOUT DX,ALCALL DELAY2MOV AL,01011010BOUT DX,ALCALL DELAY1CALL DELAY1OUT DX,ALMOV CX,8HIOLED2: MOV DX,IOBPTMOV AL,DS:[0501H]AND AL,01011111BOUT DX,ALCALL DELAY2OR AL,10100000BOUT DX,ALCALL DELAY2LOOP IOLED2MOV DX,IOCPTMOV AL,0F0HOUT DX,ALCALL DELAY2JMP IOLED0DELAY1: PUSH AXPUSH CXMOV CX,0030HDELY2: CALL DELAY2LOOP DELY2POP CXPOP AXRETDELAY2: PUSH CXMOV CX,8000HDELA1: LOOP DELA1POP CXRETLEDDISP:MOV AL,90HMOV DX,CONTPORTOUT DX,ALMOV BYTE PTR DS:[0600H],00 LED1: CMP BYTE PTR DS:[0600H],07H JA LED2MOV BL,DS:[0600H]MOV BH,0HMOV AL,CS:[BX+DATA1]MOV DX,DATAPORTOUT DX,ALADD BYTE PTR DS:[0600H],01HJNZ LED1LED2: RETFORMAT: MOV BX,0MOV WORD PTR DS:[BX+0640H],405BHADD BX,2MOV WORD PTR DS:[BX+0640H],4040HADD BX,2MOV WORD PTR DS:[BX+0640H],6D6DHADD BX,2MOV WORD PTR DS:[BX+0640H],7F5BHRETCODE ENDSEND START四、实验所用仪器计算机电源DVCC——8086 实验箱一台五、实验步骤和方法1 独立编好程序2 在实验机箱上连好实验线路3 观察实验现象4 分析实验结果实验五8259中断控制器实验一、实验目的1.掌握8259中断控制器的接口方法.2.掌握8259中断控制器的应用编程.二、实验要求1 理解实验程序2 掌握各个芯片的原理和使用方法。

微机实验作业两个多位十进制数相加

微机实验作业两个多位十进制数相加

微机实验作业两个多位十进制数相加实验二两个多位十进制数相加一、要求:将两个多位十进制数(如四位)相加,要求被加数、加数以ASCII 码形式按顺序存放在以DATA1和DATA2为首的5个内存单元中(低位在前)。

结果显示在屏幕上。

二、目的:1、学习数据传送和算术运算指令的用法。

2、熟悉在PC机上建立、汇编、连接、调试和运行汇编语言程序过程。

程序如下:STACK SEGMENT STACK 'STACK'DW 100H DUP(?)STACK ENDSDA TA SEGMENTADD1 DD H ;加数以组合十进制形式存放在双字单元ADD2 DD HSUM 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,ADD1 ;将16位偏移地址传送到通用寄存器中LEA 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,00 CALL 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 LAB POP DXPOP SIPOP CXPOP BXPOP AXRETDISPSUM ENDPCODE ENDSEND START。

微机原理实验之两位十进制数相加

微机原理实验之两位十进制数相加

计算机硬件实验室实验报告课程名称:微机原理及应用
三.实现方法(含实现思路、程序流程图、实验电路图和源程序列表等)
源代码:
Mov AH,1
Int 21H
Mov BH, AL
Mov AH,1
AND Bh, 0fH
Int 21h
Mov BL,AL
AND Bl, 0fH
Mov DL, '+'
Mov AH, 2
Int 21h
MOV AH, 1
INT 21H
Mov CH,AL
AND CH, 0fH
Mov AH, 1
INT 21H
Mov CL,AL
AND CL, 0fH
ADD BL, CL
Mov Al,BL
Mov AH,00H 四.实验结果分析(含执行结果验证、输出显示信息、图形、调试过程中所遇的问题及处理方法等)
结论如上图
五.结论
本次实验完成了简单的两个两位十进制数相加。

完成了表达式的输出,将实验跟理论相结合,加深了对知识的理解。

AAA Mov Bl,Al ADC BH,CH Mov AL,BH Mov AH,00H AAA Mov CH,AH Mov CL,Al ADD BL, 30H ADD CX, 3030H Mov DL, '=' Mov AH, 2 Int 21H Mov DL,CH Mov AH, 2 Int 21H Mov DL, CL Mov AH, 2 Int 21H Mov DL,BL Mov AH, 2 INT 21H。

微机原理实验之两位十进制数相加

微机原理实验之两位十进制数相加

微机原理实验之两位十进制数相加实验目的:了解和掌握两位十进制数相加的原理和方法,熟悉数字电路的组成和工作原理。

实验器材:数字计算器、示波器、两位十进制加法器。

实验原理:在计算机中,数字电路是基础。

而十进制数相加是数字电路中最基本的运算之一、十进制数可以用二进制数表示,通过逻辑门和添加器电路可以实现十进制数的加法运算。

十进制数是由0~9这10个基本数字组成。

每一位都有从0到9的取值范围。

当两位十进制数相加时,需要对个位、十位等位上的数字进行相加,并向高一位进位。

具体的加法过程可以通过数字电路来实现。

一个两位十进制数相加的示例:23+56首先从个位数开始相加,3+6=9,个位上的结果是9;然后从十位数开始相加,2+5=7,十位上的结果是7;将个位和十位上的结果合并,得到最终结果79实验步骤:1.准备好实验器材,确保电路连接的正确性。

2.输入两个需要相加的两位十进制数,例如23和56,将这两个十进制数转化为二进制数。

3.将两个二进制数输入到相应的输入端口,将输入数送入两位十进制加法器。

4.确认输入数的有效性,检查输入数的范围是否符合要求。

5.等待计算器输出结果,结果以二进制数的形式表示。

6.确认结果的正确性,将输出数转化为十进制数。

7.对比计算结果与预期结果,分析原因。

实验结果:输入数:23、56预期结果:79实际结果:79分析和讨论:在本次实验中,我使用了两位十进制加法器,将两个两位十进制数相加。

实验结果显示,实际结果与预期结果一致,说明实验顺利完成。

通过这个实验,我了解到了两位十进制数相加的原理和方法。

在实际应用中,十进制数相加往往需要通过数字电路来实现。

对于更高位数的十进制数相加,可以通过级联多个十进制加法器来实现。

总结:通过本次实验,我掌握了两位十进制数相加的原理和方法,了解了数字电路的组成和工作原理。

继续深入学习和实践,在实际应用中灵活运用数字电路知识,将有助于提高计算和运算效率。

微机原理软件实验

微机原理软件实验

微机原理实验报告专业:工业工程姓名:刘雷学号:089094082指导老师:陈全目录软件实验一汇编语言程序的调试与运行 (3)一.实验目的 (3)二.实验内容 (3)三.程序框图 (3)四.程序清单 (4)五.调试步骤 (6)六.思考题 (6)软件实验二分支程序设计 (14)一.实验目的 (14)二.实验内容与要求 (14)三.程序框图 (15)四.程序清单: (16)五.思考题 (17)软件实验三循环程序设计 (18)一.实验目的 (18)二.实验内容与要求 (18)三.程序框图 (19)四.程序清单(将程序补充完整) (20)软件实验四子程序结构 (22)一.实验目的 (22)二.实验内容与要求 (22)三.程序框图: (23)四.部分程序清单 (23)五.步骤 (25)六.思考题 (25)软件实验一汇编语言程序的调试与运行一.实验目的1.学习数据传送和算术运算指令的用法2.熟悉在PC机上编辑、汇编、连接、调试和运行汇编语言程序的过程。

二.实验内容将两个多位十进制数相加,要求被加数和加数均以ASCII码形式各自顺序存放在DATA1和DA TA2为首的5个内存单元中,结果送回DATA1处。

三.程序框图图1.1 两个多位十进制相加程序流程图四.程序清单DISP MACRO XMOV DL,X ;要显示的字符送DL寄存器MOV AH,02H ;DOS功能调用号是02HINT 21H ;21H中断程序是DOS功能调用ENDMDATA SEGMENTDATA1 DB '12732'DATA2 DB '06815'N EQU $-DA TA2DATA ENDSSTACK SEGMENT STACKSTA DB 20 DUP (?)TOP EQU $-STASTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK,ES:DA TA START:MOV AX,DA TAMOV DS,AXMOV AX,STACKMOV SS,AXMOV AX,TOPMOV SP,AXLEA SI,DATA1 ;☆MOV BX,0MOV CX,NCALL DISPL ;显示被加数DISP '+'LEA SI,DATA2MOV BX,0MOV CX,NCALL DISPL ;显示加数DISP '='LEA DI,DA TA1MOV CX,NCALL ADDA ;调用加法子程序LEA SI,DATA1MOV BX,0MOV CX,NCALL DISPL ;显示运算结果DISP 0DHDISP 0AHMOV AX,4C00HINT 21HDISPL PROC ;显示子程序DS1: MOV AH,02HMOV DL,[SI+BX]INT 21HINC BXLOOP DS1RETDISPL ENDPADDA PROC ;加法子程序PUSH CXMOV BX,0AD1: SUB BYTE PTR [SI+BX],30HSUB BYTE PTR [DI+BX],30HINC BXLOOP AD1POP CXPUSH CXMOV BX,N-1 ;☆☆CLCAD2: MOV AL,[SI+BX]ADC AL,[DI+BX]AAAMOV [DI+BX],ALDEC BXLOOP AD2POP CXPUSH CXMOV BX,0 ;☆☆☆AD3: ADD BYTE PTR [DI+BX],30HINC BXLOOP AD3POP CXRET ;☆☆☆☆ADDA ENDPCODE ENDSEND START五.调试步骤1.编辑源程序,建立一个以后缀为.ASM的文件.2.汇编源程序,检查程序有否错误,有错时回到编辑状态,修改程序中错误行。

04两个多位十进制数相加实验

04两个多位十进制数相加实验

实验原理
(2)BCD算术运算调整的基本原理 以组合十进制数加法运算为例: 当两数相加后,进位位C和半进位位A均为零,即 结果的高低4位均未大于9,则不需调整; 当两数相加后,结果的低4位大于9,即半进位位 A=1,则结果加06H; 当两数相加后,结果的高4位大于9,则结果加 60H; 当两数相加后,结果的低4位大于9,即半进位位 A=1,且同时进位位C=1,则结果加66H。
实验报告要求
1、记录实验中具体数据,并做整理和分析。
2、对程序进行逐行的详细注释。
3、将程序试改为减法,写出修改后的程序
指令、画出流程图、记录运行数据。
调用号
1 2 8
Байду номын сангаас功能
输入并显示一个字符
入口参数
出口参数
屏幕显示一个字符
DL中预先放入待显 示字符的ASCII码 执行后输入字符的 ASCII码存在AL中 DS:DX中存入字符 串首地址,字符串 必须要有$作为最后 结尾 DS:DX中设置字符 串首地址,且第1个 单元为允许输入最 大字符个数(外加1 个回车符) 执行后,实际输入 的字符个数存在字 符串第2个单元,字 符内容从字符串第3 个单元开始依次存 放 有输入AL=FFH, 无输入AL=0
键盘输入一个字符
9
屏幕显示字符串
10(0AH)
键盘输入同时屏幕显 示字符串
11(0BH)
检测有无键盘输入
下次实验内容
实验名称:
汇编语言程序设计实验(课堂测试)
实验内容:
根据后面提供的题目,由教师上课时随 机指定,当堂完成其中一个程序题目的编写、 编译、调试、运行等全过程。
汇编程序题
1、两个字节数(十六进制数)相减A-B送D,并以十六进制形式显 示结果。 2、两个十进制数相加,求其和,要求显示结果。(设两个加数及其 和均为位数相等的无符号数,且最多不超过5位) 3、将一个十进制正数(不超过4位数),转换成对应16进制数,显 示到屏幕上。 4、一个四位16进制数,按照二进制形式显示到屏幕上。 5、将一串十进制数字,分别用正序和反序显示到屏幕上。比如原始 序列为426135,其正序与之相同,反序就是531624. 6、将一串(2~10个)无序的十进制数字,按从小到大的顺序重新 排好后显示到屏幕上。 7、将一串不带符号的十进制数,求其最大值和最小值。

微机原理及其接口实验报告--两个多字节数相加

微机原理及其接口实验报告--两个多字节数相加

两个多字节数相加一.实验目的1.熟悉在PC机上建立、汇编、连接、调试和运行汇编语言程序的过程。

2.熟悉和掌握用DEBUG调试程序的方法。

二.实验内容将两个多字节数相加,要求加数和被加数分别存放在num1和num2为首的内存单元中。

结果送回num1处。

三.实验步骤1.生成可执行文件。

输入 SUM.ASM SUM.OBJ SUM.EXEedit MASM LINK DEBUG2.汇编源程序DATA SEGMENTNUM1 DB 1H,2H,3H,0NUM2 DB 4H,5H,6HDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXCLCLEA BX,NUM1LEA SI,NUM2MOV CX,3LL:MOV AL,[SI]ADC [BX],ALINC BXINC SILOOP LLMOV AL,0ADC AL,0MOV [BX],ALMOV AH,4CHINT 21HCODE ENDSEND START3.在DEBUG下使用DEBUG命令调试程序。

-N SUM.EXE (指定sum.exe文件)-L (从磁盘读sum.exe)-U (反汇编)记录源程序的首地址为0BC6:0000,NUM1和NUM2的首地址分别为0BC5:0000, 0BC5:0004。

如图所示:-G=0BC6:0000 0BC6:001F (使用G命令执行程序)-D OBC5:0000 (显示内存单元的内容)四.心得体会在做实验之前,尽量把源程序看懂,结合书去看。

在实验进行时,对于一些数据作修改,进行调试能够更好的理解程序所执行的内容。

经过这次试验,自己对运用MASM软件进行简单的debug指令操作有了进一步的理解和认识。

微原实验——两个四位十进制数相加并显示结果

微原实验——两个四位十进制数相加并显示结果

微原实验——两个四位十进制数相加并显示结果一、实验目的1.通过上机实验,熟悉汇编语言开发环境,了解代码编译,连接,执行的相关过程。

2.熟悉汇编语言的书写与使用,在调试程序的过程中熟悉不同代码的执行效率与效果。

二、实验原理从键盘输入2个4位二进制数,相加并显示结果。

三、实验设备及软件硬件:PC软件:TPC2003+汇编集成开发环境四、实验内容(代码及注释)DATA SEGMENTX1 DB 4 DUP(0) ;第一个加数X2 DB 4 DUP(0) ;第二个加数X3 DB 5 DUP(0) ;两数之和y1db 'please input the first number:','$'y2db 'please input the second number','$'y3db 'the result is:','$'DATA ENDS ;数据段STACK SEGMENT STACKDW 100 DUP(?)STACK ENDS ;堆栈段CODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKKEYIN PROC ;键盘输入函数AGAIN: MOV AH,8INT 21HCMP AL,30HJB AGAINCMP AL,39HJA AGAIN ;若不为数字,重新输入PUSH AXMOV DL,ALMOV AH,2INT 21H ;若为数字,入栈保存并显示POP AXRETKEYIN ENDPMAIN PROCMOV AX,DATAMOV DS,AXMOV DX,OFFSET Y1MOV AH,9INT 21HMOV DL,0DHMOV AH,2INT 21HMOV DL,0AHMOV AH,2INT 21H ;打印y1字符串,并在结尾输出回车MOV SI,OFFSET X1MOV CX,4NEXT1: CALL KEYINAND AL,0FH ;调整ASC码数字为纯数字以便相加MOV [SI],ALINC SILOOP NEXT1MOV SI,OFFSET X2MOV CX,4 ;将第一个加数保存在变量X1中MOV DL,0DHMOV AH,2INT 21HMOV DL,0AHMOV AH,2INT 21H ;输出回车MOV DX,OFFSET Y2MOV AH,9INT 21HMOV DL,0DHMOV AH,2INT 21HMOV DL,0AHMOV AH,2INT 21H ;打印y2字符串,并在结尾输出回车NEXT2: CALL KEYINAND AL,0FH ;调整ASC码数字为纯数字以便相加MOV [SI],ALINC SILOOP NEXT2 ;将第二个加数保存在变量X2中MOV DL,0DHMOV AH,2INT 21HMOV DL,0AHMOV AH,2INT 21H ;输出回车MOV DX,OFFSET Y3MOV AH,9INT 21HMOV DL,0DHMOV AH,2INT 21HMOV DL,0AHMOV AH,2INT 21H ;打印y3字符串,并在结尾输出回车MOV SI,(OFFSET X1)+3MOV DI,(OFFSET X2)+3MOV BX,(OFFSET X3)+4MOV CX,4OR CX,CX ;CF位清零PLUS: MOV AL,[SI]ADC AL,[DI]AAA ;十进制调整命令MOV [BX],ALDEC DIDEC SIDEC BXLOOP PLUSMOV AL,0ADC AL,0MOV [BX],ALMOV BX,OFFSET X1MOV CX,4NEXT4: MOV DL,[BX]ADD dl,30h ;将纯数字调整为ASC码以便打印MOV AH,2INT 21HINC BXLOOP NEXT4 ;打印加数X1MOV DL,2BHMOV AH,2INT 21H ;打印’+’号MOV BX,OFFSET X2MOV CX,4NEXT5: MOV DL,[BX]ADD DL,30HMOV AH,2INT 21HINC BXLOOP NEXT5 ;打印X2MOV DL,3DHMOV AH,2INT 21H ;打印’=’号MOV BX,OFFSET X3SUB BYTE PTR [BX],0JZ OUT1 ;判断结果最高位是否为零,若为零则跳至OUT1处MOV CX,5NEXT3: MOV DL,[BX]ADD DL,30HMOV AH,2INT 21HINC BXLOOP NEXT3 ;最高位不为零,打印五位数CMP CX,0JZ END1 ;若已经输出完毕,则跳至END1直接结束程序OUT1: MOV CX,4 ;结果最高位为零,打印四位数NEXT6: MOV DL,[BX+1]ADD DL,30HMOV AH,2INT 21HINC BXLOOP NEXT6END1: MOV AH,4CHINT 21HMAIN ENDPCODE ENDS ;结束程序END MAIN五、程序流程图从键盘输入字符或数字六、实验结果七、实验感想在本实验中,由于TPC编译平台问题,编译运行后的操作窗口过大,看不到显示的实验结果,还一直以为是代码有问题。

微机原理实验教学方案

微机原理实验教学方案

微机原理实验教学方案实验一两个多位十进制数相加的实验一、实验目的学习数据传送和算术运算指令的用法熟悉在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,05H AD3: ADD BYTE PTR [SI],30HADD BYTE PTR [DI],30HDEC SIDEC DIDEC BXJNZ AD3RETADDA ENDPCODE ENDSEND START。

加法程序

加法程序

本科实验报告课程名称:微机原理及接口技术实验项目:加法程序实验地点:专业班级:学号:学生姓名:ALXB指导教师:年月日实验一、加法程序一.实验目的学习数据传送和算术加法指令的用法。

二、实验内容将两个多位十进制数28056,47193相加,并显示加数、被加数、和。

要求两个加数均以 A SILL码形式各自顺序存放在DATA1和DATA2内存单元中,结果送回DATA1中(高位在后,低位在前)三、流程图:四、试验程序SHOW MACRO BMOV DL,BMOV AH,02HINT 21HENDMDATA SEGMENTDATA1 DB 33H,39H,31H,37H,34H DATA2 DB 36H,35H,30H,38H,32H DATA3 DB '_____',0DH,0AH,'$' DATA ENDSSTACK SEGMENT STACKSTA DB 20 DUP (?)TOP EQU LENGTH STASTACK ENDSCODE SEGMENTASSUMESHOW 20HCALL DISPLMOV AX,4C00HINT 21HDISPL PROC NEARDS1: SHOW [SI+BX-1]DEC BXJNZ DS1RETDISPL ENDPADDA PROC NEARMOV DX,SIMOV BP,DIMOV BX,05AD1: SUB BYTE PTR [SI+BX-1],30HCS:CODE,DS:DATA,SS:STACK,ES:DATA START: MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV AX,TOPMOV SP,AXMOV SI,OFFSET DATA2MOV BX,05SHOW 20HCALL DISPLSHOW 0DHSHOW 0AHMOV SI,OFFSET DATA1MOV BX,05SHOW 2BHCALL DISPLSHOW 0DHSHOW 0AHMOV CL,7S1: SHOW 2DHLOOP S1SHOW 0DHSUB BYTE PTR [DI+BX-1],30HDEC BXJNZ AD1MOV SI,DXMOV DI,BPMOV CX,05CLCAD2: MOV AL,[SI]MOV BL,[DI]ADC AL,BLAAAMOV [SI],ALINC SIINC DILOOP AD2MOV SI,DXMOV DI,BPMOV BX,05AD3: ADD BYTE PTR [SI+BX-1],30HADD BYTE PTR [DI+BX-1],30HSHOW 0AHMOV SI,OFFSET DATA1 MOV DI,OFFSET DATA2 CALL ADDAMOV SI,OFFSET DATA1 MOV BX,05DEC BXJNZ AD3RET ADDA ENDP CODE ENDSEND START五、实验结果六、思考题不改变数据段DATA1和DATA2的内容,如何将加数与被加数分别由28056和47193变成65082和39174,并且相加?答:源程序不变将DATA1 DB 33H,39H,31H,37H,34HDATA2 DB 36H,35H,30H,38H,32H后加上DATA4 DB 37H,34H,31H,39H,33HDATA5 DB 32H,38H,30H,35H,36H并将全部DATA1和DATA2全部改成DATA4和DATA5就可以实现。

微机原理实验一两个多位十进制数相加实验试做报告

微机原理实验一两个多位十进制数相加实验试做报告
INT21H
CODE ENDS
END START
运行结果:
75249
上述程序有很多不方便的地方,比如①加数和被加数以低字节在前高字节 在后顺序存放在内存单元中,不符合我们日常的习惯,如果改为高字节在前低 字节在后的形式存放数据,程序如何改变?②程序只显示了相加结果,没有显 示加数和被加数,如果要求显示加数和被加数,程序如何修改?③如果按47193+28056=75249格式显示,程序如何修改?
【实验说明】
汇编语言没有十进制加法指令,ADD/ADC加法指令的运算对象是二进制 数,如果要进行BCD码数的加法,需要对结果进行修正。组合BCD码的加法调 整指令为DAA,它针对AL寄存器中的组合BCD码数之和进行修正。对于未组合BCD码的加法调整指令为AAA(加法的ASCII码调整指令),它将存于AL寄存 器中的一位ASCII码数加法运算的结果调整为一位拆开型十进制数,仍保留在AL中,如果向高位有进位(AF=1),则进到AH中。
CODE,DS:
DATA
START:
MOV AX,DATA
MOV DS,AX
MOV CX,5;计数
MOV SI,0;做指针用,因从DATA1的第一个数取数,故SI=OCLC
NEXT:
MOVAL,DATA1[SI];取被加数给AL
ADCAL,DATA2[SI];取加数和AL相加
AAA:未组合十进制数加法调整指令
运行结果:
47193
28056
75249
3程序清单(wjsy3a.asm)
DISP MACRO M
MOV AH,2
MOV DL,M
INT21H
ENDM
DATA SEGMENT
DATA1DB 34H,37H,31H,39H,33H

8086微机原理实验之两位十进制数相加

8086微机原理实验之两位十进制数相加
二.理论分析或算法分析
输入第一个两位十进制 的数,分别将十位和个 位放在 BH 和 BL 里面。
从控制台显示’+’后, 输入第一个两位十进制 的数,分别将十位和个 位放在 CH 和 CL 里面。
将这两个十进制对应相 加,最后将表达式与结果 在控制台上输出
1
三.实现方法(含实现思路、程序流程图、实验电路图和源程序列表等)
四.实验结果分析(含执行结果验证、输出显示信息、图形、调试过程中所遇的问题及处理方法等)
结论如上图
五.结论 本次实验完成了简单的两个两位十进制数相加。完成了表达式的输出,将实验跟理 论相结合,加深了对知识的理解。 报告提交日期2 Nhomakorabea3
AAA Mov Bl,Al ADC BH,CH Mov AL,BH Mov AH,00H AAA Mov CH,AH Mov CL,Al ADD BL, 30H ADD CX, 3030H Mov DL, '=' Mov AH, 2 Int 21H Mov DL,CH Mov AH, 2 Int 21H Mov DL, CL Mov AH, 2 Int 21H Mov DL,BL Mov AH, 2 INT 21H
源代码: Mov AH,1 Int 21H Mov BH, AL Mov AH,1 AND Bh, 0fH Int 21h Mov BL,AL AND Bl, 0fH Mov DL, '+' Mov AH, 2 Int 21h MOV AH, 1 INT 21H Mov CH,AL AND CH, 0fH Mov AH, 1 INT 21H Mov CL,AL AND CL, 0fH ADD BL, CL Mov Al,BL Mov AH,00H
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验一两个多位十进制数相加实验试做报告
【实验目的】
1.熟悉在PC机上建立、汇编、连接、调试和运行汇编语言程序的过程。

2.熟悉和掌握用DEBUG调试程序的方法。

【实验性质】
验证性实验(学时数:3H)。

【实验内容】
将两个多位十制数相加,要求加数和被加数均以ASCII码形式各自顺序存放在以DATAl 和DATA2为首的5个内存单元中(低位在前),结果送回DATAl处。

【实验说明】
汇编语言没有十进制加法指令,ADD/ADC加法指令的运算对象是二进制数,如果要进行BCD码数的加法,需要对结果进行修正。

组合BCD码的加法调整指令为DAA,它针对AL寄存器中的组合BCD码数之和进行修正。

对于未组合BCD码的加法调整指令为AAA(加法的ASCII 码调整指令),它将存于AL寄存器中的一位ASCII码数加法运算的结果调整为一位拆开型十进制数,仍保留在AL中,如果向高位有进位(AF=1),则进到AH中。

对于多字节的ASCII码相加,只能从最低位开始逐个字节地进行加法操作,并随即进行调整。

参考程序清单(WJSY0.ASM):
DATA SEGMENT
DATA1 DB 33H,39H,31H,37H,34H
DATA2 DB 36H,35H,30H,38H,32H
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV CX,5 ;计数
MOV SI,0 ;做指针用,因从DATA1的第一个数取数,故SI=0 CLC
NEXT: MOV AL,DATA1[SI] ;取被加数给AL
ADC AL,DATA2[SI] ;取加数和AL相加
AAA ;未组合十进制数加法调整指令
MOV DATA1[SI],AL ;结果回送至DATA1处
INC SI ;修改SI指向下一位数
LOOP NEXT
MOV SI,5 ;因显示是从高位到低位,故SI=5
L: ADD DATA1[SI-1],30H ;还原成ASCII码
MOV DL,DATA1[SI-1]
MOV AH,02 ;送显示
INT 21H
DEC SI
JNZ L
MOV AH,4CH ;返回DOS
INT 21H
CODE ENDS
END START
运行结果:
75249
上述程序有很多不方便的地方,比如①加数和被加数以低字节在前高字节在后顺序存放在内存单元中,不符合我们日常的习惯,如果改为高字节在前低字节在后的形式存放数据,程序如何改变?②程序只显示了相加结果,没有显示加数和被加数,如果要求显示加数和被加数,程序如何修改?③如果按47193+28056=75249格式显示,程序如何修改?
①程序清单(WJSY1.ASM):
DATA SEGMENT
DATA1 DB 34H,37H,31H,39H,33H ;高位在前低位在后
DATA2 DB 32H,38H,30H,35H,36H
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV SI,5 ;做加法是从低位开始加,故 SI=5
CLC
NEXT: MOV AL,DATA1[SI-1] ;取被加数给AL
ADC AL,DATA2[SI-1];取加数和AL相加
AAA ;未组合十进制数加法调整指令
MOV DATA1[SI-1],AL ;结果回送至DATA1处
DEC SI ;修改SI指向下一位数
JNZ NEXT
L: ADD DATA1[SI],30H ;还原成ASCII码
MOV DL,DATA1[SI]
MOV AH,02 ;送显示
INT 21H
INC SI
CMP SI,5
JNZ L
MOV AH,4CH ;返回DOS
INT 21H
CODE ENDS
END START
运行结果:
75249
②程序清单(WJSY2.ASM):
DISP MACRO ;回车换行宏定义
MOV AH,2
MOV DL,0DH
INT 21H
MOV AH,2
MOV DL,0AH
INT 21H
ENDM
DATA SEGMENT
DATA1 DB 34H,37H,31H,39H,33H
DATA2 DB 32H,38H,30H,35H,36H
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV SI,OFFSET DATA1
CALL DISPL ;调显示子程序显示被加数
DISP;宏调用,回车换行
MOV SI,OFFSET DATA2
CALL DISPL ;调显示子程序显示加数
DISP ;宏调用,回车换行
MOV SI,5
CLC
NEXT: MOV AL,DATA1[SI-1]
ADC AL,DATA2[SI-1] ;做加法
AAA
MOV DATA1[SI-1],AL
DEC SI
JNZ NEXT
L: ADD DATA1[SI],30H ;还原为ASCII码
MOV DL,DATA1[SI]
MOV AH,02 ;送显示
INT 21H
INC SI
CMP SI,5
JNZ L
MOV AH,4CH
INT 21H
DISPL PROC ;显示子程序
MOV BX,0
D1: MOV DL,[SI+BX]
MOV AH,2
INT 21H
INC BX
CMP BX,5
JNZ D1
RET
DISPL ENDP
CODE ENDS
END START
运行结果:
47193
28056
75249
③程序清单(wjsy3a.asm)
DISP MACRO M ;显示运算符宏定义
MOV AH,2
MOV DL,M
INT 21H
ENDM
DATA SEGMENT
DATA1 DB 34H,37H,31H,39H,33H
DATA2 DB 32H,38H,30H,35H,36H
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV SI,OFFSET DATA1
CALL DISPL ;调显示子程序显示被加数
DISP '+' ;宏调用显示“+”
MOV SI,OFFSET DATA2
CALL DISPL ;调显示子程序显示加数
DISP '=' ;宏调用显示“=”
MOV SI,5
CLC
NEXT: MOV AL,DATA1[SI-1]
ADC AL,DATA2[SI-1]
AAA
MOV DATA1[SI-1],AL
DEC SI
JNZ NEXT
L: ADD DATA1[SI],30H
MOV DL,DATA1[SI]
MOV AH,02
INT 21H
INC SI
CMP SI,5
JNZ L
MOV AH,4CH
INT 21H
DISPL PROC ;显示子程序MOV BX,0
D1: MOV DL,[SI+BX]
MOV AH,2
INT 21H
INC BX
CMP BX,5
JNZ D1
RET
CODE ENDS
END START
运行结果:
47193+28056=75249。

相关文档
最新文档