实验三数据传送及两个多位十进制数相加
两个十进制数相加的汇编程序
两个十进制数相加的汇编程序汇编语言是一种底层的编程语言,用于编写计算机的指令集。
在汇编语言中,可以使用指令来执行加法操作。
下面是一个用汇编语言编写的程序,用于将两个十进制数相加。
1. 首先,我们需要将两个十进制数保存在内存中。
假设第一个数为A,第二个数为B。
我们可以使用数据段来定义这两个数,并将它们存储在内存中的某个位置。
例如,我们可以将A存储在内存的地址1000处,将B存储在内存的地址1004处。
2. 接下来,我们需要使用寄存器来执行加法操作。
我们可以使用通用寄存器来保存结果。
假设我们将结果保存在寄存器AX中。
3. 首先,将A加载到AX寄存器中。
我们使用MOV指令将A从内存加载到AX 寄存器。
指令为:MOV AX, [1000]。
这将从内存地址1000处读取数据,并将其存储在AX寄存器中。
4. 接下来,将B加载到BX寄存器中。
我们使用MOV指令将B从内存加载到BX寄存器。
指令为:MOV BX, [1004]。
这将从内存地址1004处读取数据,并将其存储在BX寄存器中。
5. 现在,我们需要将AX和BX寄存器中的值相加,并将结果保存在AX寄存器中。
我们使用ADD指令执行加法操作。
指令为:ADD AX, BX。
这将将AX寄存器和BX寄存器中的值相加,并将结果存储在AX寄存器中。
6. 最后,我们可以将结果从AX寄存器中写回内存。
我们使用MOV指令将结果从AX寄存器写回内存。
指令为:MOV [1008], AX。
这将将AX寄存器中的值写回内存地址1008处。
7. 程序结束后,我们可以从内存地址1008处读取结果,并将其输出。
这是一个简单的汇编程序,用于将两个十进制数相加。
程序首先将两个数加载到寄存器中,然后执行加法操作,并将结果存储在寄存器中,最后将结果写回内存。
请注意,这只是一个示例程序,实际的汇编程序可能会更加复杂,并考虑到输入的错误处理和边界情况。
微机原理实验报告-两个多位十进制数相加的实验等.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他们结果是一样的。
多位十进制数加法器实验-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功能调用。
十进制数的加减法
十进制数的加减法在数学中,十进制数是使用10个数字(0-9)来表示数值的一种方法。
而加法和减法是数学中最基本的运算之一。
本文将详细介绍十进制数的加减法运算。
一、十进制数的加法1. 加法的基本原理十进制数的加法是将两个或多个数值相加,得到它们的和。
加法的基本原理是将对应位上的数字相加,并将结果从右往左逐位写出。
如果相加的两个数的对应位上的数字之和大于等于10,就需要进位。
2. 加法的步骤(1)将加数垂直地写在被加数下面,保持各个位对齐。
(2)从最右边一位开始逐位相加。
(3)如果某一位的和大于等于10,则将进位写在上一位的左边,并在当前位上写下本位的和减去10的结果。
(4)重复以上步骤,直到所有位数相加完毕。
例如,计算1234 + 5678的和:```1234+ 56786912```二、十进制数的减法1. 减法的基本原理十进制数的减法是从一个数中减去另一个数,得到它们的差。
减法的基本原理是从左到右逐位相减,并将结果从右往左逐位写出。
如果被减数的某一位小于减数的对应位,则需要向上一位借位。
2. 减法的步骤(1)将减数写在被减数的上面,保持各个位对齐。
(2)从最右边一位开始逐位相减。
(3)如果被减数的某一位小于减数的对应位,则需要向上一位借位。
(4)在当前位上写下被减数的数字加上10,再减去对应位上减数的数字。
(5)重复以上步骤,直到所有位数相减完毕。
例如,计算9876 - 5432的差:```9876--------4444```三、小结十进制数的加减法是数学中最基本的运算之一。
通过将对应位上的数字相加或相减,我们可以计算出数值的和或差。
在进行加减法运算时,需要注意进位和借位的问题。
通过练习和熟练掌握加减法的步骤和原理,我们可以更加准确地计算出十进制数的加减结果。
本文简要介绍了十进制数的加减法运算的基本原理和步骤,希望对您有所帮助。
通过不断练习和实践,您将能够更加熟练地进行十进制数的加减运算,提升您的数学能力。
两个多位十进制数相加实验
实验一两个多位十进制数相加实验一、实验目的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(页面不足请附页)四、实验总结和体会通过本次实验我对汇编有了更加具体的认识,也明白了汇编中各个寄存器的作用及寄存器间是怎样联系的,也初步明白了什么是断地址,什么是堆栈,以及汇编的基本结构和循环结构的基本运用,但是我了解的只是初步的,汇编中还有很多我不明白和不了解的地方,最重要的是汇编语句掌握不牢固,不能很快的知道一些专用的汇编语句的意义,这方面还是比较薄弱的,还需要在今后的实验和学习中不断的学习和练习。
两个多位十进制数相加实验
实验一两个多位十进制数相加实验一实验目的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 掌握各个芯片的原理和使用方法。
十进制数的加法十进制数的简单加法运算
十进制数的加法十进制数的简单加法运算十进制数的简单加法运算十进制数的加法运算是我们日常生活中经常遇到的计算方式。
在这篇文章中,我们将探讨十进制数的简单加法运算,并通过实例来说明如何进行计算。
一、加法的基本原理加法是一种基本的数学运算,它的基本原理是将两个或多个数值相加得到一个新的数值。
在十进制数中,我们从右到左逐位相加,并考虑进位的情况。
二、十进制数的简单加法运算实例现在,我们来看几个十进制数的简单加法运算实例,以便更好地理解加法运算的过程。
1. 例子一:计算:235 + 124解答:235+ 124______359答案为359。
我们先从个位开始相加,得到9,然后考虑进位的情况,因为2加4等于6,大于等于10,所以我们需要将1进位到十位,再将3加上进位后的值,得到5。
2. 例子二:计算:987 + 129解答:987+ 129______1116答案为1116。
同样地,我们从个位开始相加,得到6,然后考虑进位的情况,因为8加9等于17,大于等于10,所以我们需要将1进位到十位,再将7加上进位后的值,得到11。
我们将1写在十位上,然后将1和1相加,得到2。
通过以上实例,我们可以看出,十进制数的简单加法运算并不复杂,只需要从右到左逐位相加,并考虑进位的情况即可。
三、加法的性质加法具有一些基本的性质,这些性质可以帮助我们更好地理解和应用加法运算。
1. 交换律:a + b = b + a加法的交换律表明,两个数相加,不管顺序如何,得到的结果是相同的。
2. 结合律:(a + b) + c = a + (b + c)加法的结合律表明,无论怎样分组,相同的数相加得到的结果是相同的。
3. 加零律:a + 0 = a加法的加零律表明,任何数与零相加,结果等于本身。
4. 加法逆元:a + (-a) = 0加法逆元是指一个数和它的相反数相加,结果等于零。
通过运用这些加法的性质,我们可以简化计算过程,更快地得出结果。
微机原理与接口技术实验三 多字节加法
电子信息专业实验报告课程微机原理与接口技术实验实验题目多字节十进制加法学生姓名lz评分学号20171414xxxxx班级xxxxxxxx同实验者实验时间2019.10.19上午地点望江实验室基教B520电子信息学院专业实验中心一、实验目的1、掌握循环程序的设计;2、标志位判断;3、带进位的加法指令及其十进制调整指令的使用方法。
二、实验内容(含技术指标)1、设计多字节十进制加法程序;2、将被加数、加数、和、进位分别放在1000H开始的单元;3、在debug初始化要用的寄存器;4、通过循环程序完成取加数、被加数、十进制调整和修改指针的操作;5、处理进位,输出结果,观察IP、SI、CL和十进制调整前后AL、A、C的变化;6、连续执行,检查并验证结果是否正确。
三、实验仪器(仪器名称、型号,元器件名称、清单,软件名称、版本等)1、联想笔记本电脑Windows10系统2、Masm for Windows集成实验环境2015四、实验原理(基本原理,主要公式,参数计算,实现方法及框图,相关电路等)1、ADC:带进位的加法指令,ADC指令在格式和功能上都与ADD指令类似,只是相加时要把进位标志CF的当前值加到和中,结果送到目的操作数中。
2、DAA:十进制数加调整指令,用于调整AL的值,该值是由指令ADD或ADC运算二个压缩型BCD码所得到的结果。
压缩型BCD码是一个字节存放二个BCD码,低四位和高四位都是一个BCD码。
其调整规则:如果AL的低四位大于9,或AF=1则AL=AL+6,置AF=1;如果AL的高四位大于9,或CF=1则AL=AL+60H,置CF=1;如果以上两点都不成立则清除标志位AF和CF。
3、标志位的含义:AF:半加标志位。
在加法时,当位3需要向位4进位,或者在减法时位3需向位4借位时,该标志位置1;否则清0。
该标志位通常用于对BCD运算结果的调整。
CF:进位标志位。
作加法时出现进位或者作减法时出现借位,该标志位置1;否则清0。
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、将一串不带符号的十进制数,求其最大值和最小值。
十进制数的加减法运算
十进制数的加减法运算在数学中,十进制数是我们常用的一种计数系统。
它由10个数字(0、1、2、3、4、5、6、7、8、9)组成,并按照权重的规则进行运算。
本文将详细介绍十进制数的加减法运算方法。
一、十进制数的加法运算十进制数的加法运算是指将两个或多个十进制数相加的过程。
对于十进制数的加法运算,我们遵循以下规则:1. 从右往左逐位相加,先将个位进行相加,然后十位、百位,依次类推。
2. 如果相加的两个数在某一位上的和超过9,则结果的该位值为和值减去10,并将进位1加到下一位的运算中。
3. 如果两数位数不同,可以在较短的数前补0,使其位数相同。
举例如下:例1:计算49 + 2749+27------76按照上述规则,先将个位上的数4和7相加,得到11,结果中个位上的数为1,十位上的数为进位,然后将十位上的数9和2相加,得到11,结果中十位上的数为1,百位上的数为进位。
因此,49 + 27 = 76。
例2:计算1234 + 56781234+5678-------6912按照上述规则,分别将个位、十位、百位和千位的数字相加,得到最终结果。
二、十进制数的减法运算十进制数的减法运算是指将一个十进制数减去另一个十进制数的过程。
对于十进制数的减法运算,我们遵循以下规则:1. 从右往左逐位相减,先减去个位,然后十位、百位,依次类推。
2. 如果被减数小于减数,则需要借位。
借位的原则是从高位向低位借,借位后需要在被减数中加上10。
3. 如果两数位数不同,可以在较短的数前补0,使其位数相同。
举例如下:例1:计算87 - 2987- 29------58按照上述规则,先减去个位上的数9和7,得到差值2,然后减去十位上的数2和8,由于被减数小于减数,需要借位。
在被减数87中的十位上加上10,结果为17。
然后再减去个位上的数,得到差值8。
因此,87 - 29 = 58。
例2:计算5432 - 12875432- 1287-------4145按照上述规则,分别将个位、十位、百位和千位的数字相减,得到最终结果。
微机原理 两个多位十进制数相加
实验三两个多位数十进制数相加的实验一、实验目的学习数据传送和算术运算指令的用法。
熟悉在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)熟悉在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、完成程序的设计、调试程序并学习 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
实验3(两个五位十进制数相加1)
提示:如计算 提示:如计算12345+67890=80235 + = 数据段定义如下: 数据段定义如下: data segment data1 db 1,2,3,4,5 data2 db 6,7,8,9,0 data3 db 5 dup(?) data ends
;定义被加数 高位在前 低位在后 定义被加数,高位在前 定义被加数 高位在前,低位在后 ;定义加数 高位在前 低位在后 定义加数,高位在前 定义加数 高位在前,低位在后 ;重复定义 个存放结果单元 重复定义5个存放结果单元 重复定义
二实验内容将两个五位十进制数相加要求被加数和加数均以非压缩的bcd码的形式各自顺序地存放在以data1和data2为首的5个内存单元中高位在前低位在后结果送回data3处只考虑最高位无进位的情三程序流程图四源程序加注释五实验步骤写出上机操作的具体步骤每一步要求仅写出具体命令屏幕显示信息不用写
实验三 一、实验目的
如果程序正确,则以 为首的5个单元的内容分别 如果程序正确,则以data3为首的 个单元的内容分别 为首的 即十进制数80235的非压缩 是:08H,00H,02H,03H,05H,即十进制数 即十进制数 的非压缩 BCD码。 码
两个五位十进制数相加(1) 两个五位十方法; 、掌握使用运算类指令编程及调试方法; 2、掌握循环结构程序的设计和调试方法。 、掌握循环结构程序的设计和调试方法。 二、实验内容 将两个五位十进制数相加, 将两个五位十进制数相加,要求被加数和加数均以非 压缩的BCD码的形式各自顺序地存放在以 码的形式各自顺序地存放在以DATA1和 压缩的 码的形式各自顺序地存放在以 和 DATA2为首的 个内存单元中(高位在前,低位在 为首的5个内存单元中 为首的 个内存单元中(高位在前, ),结果送回 结果送回DATA3处(只考虑最高位无进位的情 后),结果送回 处 况) 。 三、程序流程图
两个多位十进制数相加的实验Word版
学生实验报告(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 21HMOV DL,0AH ;换行MOV AH,02H ; 2号调用换行INT 21HENDM ;宏指令定义结束DATA SEGMENT ;数据段定义DATA1 DB 33H,39H,31H,37H,34H ;第一个数据(作为加数)47193DATA2 DB 36H,35H,30H,38H,32H ;第二个数据(作为被加数)28056DATA ENDS ;数据段定义结束STACK SEGMENT ;堆栈段定义STA DB 20 DUP(?) ;定义从STA开始20个单元作为堆栈使用 TOP EQU LENGTH STA ;TOP等于堆栈单元数STACK ENDSCODE SEGMENT ;代码段定义ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATASTART: MOV AX,DATAMOV DS,AX ;设置数据段MOV AX,STACKMOV SS,AX ;设置堆栈段MOV AX,TOPMOV SP,AXMOV SI,OFFSET DATA2 ;DATA2的偏移地址送SIMOV BX,05 ;计数次数为5次CALL DISPL ;调用多次显示子程序DISPL(显示28056) CRLF ;回车换行MOV SI,OFFSET DATA1 ; DATA1的偏移地址送SIMOV BX,05 ;计数次数为5次CALL DISPL ;调用多次显示子程序DISPL(显示47193)CRLF ;回车换行MOV DI,OFFSET DATA2CALL ADDA ;使用加法运算程序MOV SI,OFFSET DATA1 ;将和显示在屏幕上MOV BX,05 ;显示结束CALL DISPL ;调用多次显示子程序DISPLCRLF ;执行回车换行程序MOV AX,4C00H ;返回系统提示符INT 21HDISPL 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 ;实行加法运算子程序定义、属性为NEARMOV DX,SIMOV BP,DIMOV 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 AD1MOV SI,DXMOV DI,BPMOV CX,05 ;包括进位,共5位CLC ;清进位AD2: MOV AL,[SI]MOV BL,[DI]ADC AL,BL ;进行代进位加法AAA ;非组合BCD码的加法调整MOV [SI],AL ;结果送被加数区INC SIINC DI ;指向下一位LOOP AD2 ;循环MOV SI,DXMOV DI,BPMOV BX,05AD3: ADD BYTE PTR [SI+BX-1],30HADD BYTE PTR [DI+BX-1],30HDEC BX ;十六进制的数字串转化JNZ AD3RETADDA ENDP ;加法程序结束CODE ENDS ;代码段结束END START ;整个程序结束五、实验结果六、心得体会通过这次实验让我对这个软件的编程有了更深的了解、知道如何安装这个软件、怎样运行程序。
汇编语言两个多位十进制数相加代码
ADDA PROC NEAR MOV DX,SI MOV BP,DI MOV BX,5 AD1: SUB BYTE PTR [SI+BX-1],30H SUB BYTE PTR [DI+BX-1],30H DEC BX JNZ AD1 MOV CX,5 CLC AD2: MOV AL, [SI] MOV BL, [DI] ADC AL, BL AAA MOV [SI], AL INC SI INC DI LOOP AD2
将两个多位十进制数相加 两加数以ASCII码形式各自顺序存放在以 码形式各自顺序存放在以DATA1 两加数以 码形式各自顺序存放在以 为首的5个内存单元中 低位在前)其和 和 DATA2为首的 个内存单元中 , (低位在前 其和 为首的 个内存单元中, 低位在前 要求送回DATA1 处。 要求送回 CRLF MACRO MOV DL,0DH MOV AH,02H INT 21H MOV DL,0AH MOV AH,02H INT 21H ENDM
DATA SEGMENT DATA1 DB 33H , 39H , 31H , 37H , 34H DATA2 DB 36H , 35H , 30H , 38H , 32H DATA CODE SEGMENT ASSUME CS:CODE, DS:DATA, ES:DATA START: MOV AX,DATA MOV DS,AX MOV SI,OFFSET DATA2 MOV BX,5 CALL DISPL CRLF MOV SI,OFFSET DATA1 MOV BX,5 CALL DISPL CRLF
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
十进制数的加法
十进制数的加法十进制数的加法(decimal addition)是数学中常见的基本运算之一。
它涉及将两个或多个十进制数相加,得出它们的和。
十进制数是由0-9这十个数字组成的数字系统,其中每个数字位的权值都是10的幂,从右向左依次递增。
这篇文章将介绍十进制数的加法规则,并提供一些例子来帮助读者更好地理解这个概念。
在十进制数的加法中,将两个或多个数字按位对齐,然后从右向左逐位相加,最后得出结果。
如果相加的两个数字位数不同,较短的数字可以在左边用0进行填充,以确保每一位都能相加。
进位(carry)是加法中的一个重要概念,它指的是当两个位的和大于9时,需要将进位值作为下一位的一部分进行相加。
下面我们来看一个具体的示例:假设我们要计算1234和5678的和。
1 0 0 0 0+ 1 2 3 4+ 5 6 7 8___________6 8 1 2从右向左逐位相加,最右边的位是个位,将3和8相加得到11,11大于9,所以需要将进位1作为下一位的一部分。
接下来将1、2、7和6相加,结果是16,同样需要将进位1作为下一位的一部分。
继续相加,得到的结果是12。
最后得到的和是6812。
以上是一个基本的加法示例。
下面我们来看一些更复杂的例子,以帮助读者更好地理解十进制数的加法。
例子1:计算4512和6789的和。
1 1 1 0 1+ 4 5 1 2+ 6 7 8 9___________1 1 0 1 0 1首先从右向左逐位相加,最右边的位是个位,将2和9相加得到11,需要进位1。
接下来将1、1、5和7相加,结果为14,同样需要进位1。
继续相加,得到的结果是10,再次需要进位1。
最后得到的和是110101。
例子2:计算900和12345的和。
1 12 4 5+ 9 0 0+ 1 2 3 4 5___________1 2 3 4 4 5在这个例子中,较短的数字900在左边用0进行填充,以确保每一位都能相加。
从右向左逐位相加,结果是123445。
计算机接口技术实验4 运算实验
实验四加减运算实验
一、实验目的
1.学习并掌握数据传送指令和算术运算指令的用法。
2.熟悉在PC机上建立、汇编、链接和运行8086汇编语言程序的过程。
二、实验内容
将两个多位十进制数相加,并在屏幕上显示加数、被加数以及和。
己知被加数和加数均以ASCII码形式存放在DA TA1和DA TA2为首的单元中(低位位于低地址),结果送回DATAl 处。
如:
DATA1 DB '2','1','4','3' ;两个两位十进制被加数以ASCII码保存
DATA2 DB '6','5','8','7' ;两个两位十进制加数以ASCII码保存
结果在屏幕上打印出:
12+56=68
34+78=112
结果为
三、编程提示
1.因被加数和加数均以ASCII码形式存放,所以在相加前必须转化为BCD码,此时用未组合BCD码最适宜。
未组合BCD码相加要用到AAA加法调整指令。
2.显示数据可用2号DOS功能调用。
3.程序流程图如图所示。
图4.1 多位十进制数相加程序流程图
四、思考题
如果是减法,程序应如何修改?如果加数、被加数以组合BCD码形式存放在DA TA1、DA TA2缓冲区,程序应怎样修改?
五、实验报告
1.简述本次实验的内容。
2.画出编程流程图。
3.编写程序并注释。
4.写出自己在调试过程中遇到的难点及如何解决等心得体会。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
深圳大学实验报告课程名称:微机原理及应用实验实验项目名称:数据传送及两个多位十进制数相加学院:专业:指导教师:报告人:学号:班级:实验时间:实验报告提交时间:一、实验名称:数据传送及两个多位十进制数相加二、实验目的(1)学习数据传送和算术运算指令的用法。
(2)熟悉在PC机上建立、汇编、链接、调试和运行8088汇编语言程序的过程。
三、实验内容将两个多位十进制数相加。
要求被加数均以ASCII码形式各自顺序存放在以DATAl和DA TA2为首的5个内存单元中(低位在前),结果送回DA TAl处。
四、实验电路及连线(硬件实验)此实验属于软件实验,故无硬件实验的电路及连线。
五、程序说明(预习)包括程序功能,程序框图,算法说明及所用到的寄存器等。
功能:将被加数和加数分别显示,接着运行加法运算,然后将结果显示出来。
程序框图:算法说明:①定义数据段:定义被加数和加数,且要使其值大于30H(方便后面ASCII码与十六进制之间的转换;②定义堆栈段,并给SP_TOP单元赋初值0;③定义代码段,并将源代码放在里面首先,编写主程序;接着,编写显示、回车换行和加法运算的子程序。
④程序结束。
所用到的寄存:AX、SS 、CS 、DS、 ES、SI、SP、DI六、源程序清单(预习);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\实验三\pts3.asm2.可执行程序路径及文件名:E:\masm\实验三\pts3.exe;八、上机调试情况说明1.上机调试步骤A.通过dos对pts3.asm文件进行操作。
E:\masm\实验三\pts3.asmlink pts3.obj ;Debug pts3.exe;B.编译通过并实现功能。
C. 使用-T 、-G等操作指令,来查看程序运行时的各段地址及三个子程序入口的IPD.通过在适当的时候使用-r对被加数和加数进行修改,然后用 -D DS:00在适当的位置去查看内存的数据。
2.上机调试过程中遇到的问题:在显示的时候,加数和被加数出现乱码解决办法:查看加数和被加数相关操作,最后发现是在定义数据段时,将加数和被加数的值小于30H,从而使得在ASCII码与十六进制之间的转换时出错,修改数据段中的数据,使得他们大于30H即可。
3.对调试源程序的中间结果和最终结果进行分析A对结果分析时,通过程序一步一步跟踪,查看相应的寄存器和符号标志位是否与预想中的一样。
B对输出结果分析时,可以通过查看需要输出的寄存器的值,或查看需要输出的存储空间的内容。
九、实验结果1.在debug和Emu8086下调试该可执行文件,给出程序运行时的各段地址:emu8086 DosCS F400 0B8BDS 0710 0B85ES 0700 0B75SS 0711 0B862.在debug和Emu8086下调试该可执行文件,三个子程序入口的IP:子程序emu8086 DosDISPL 0046 0047CRLF 0039 003AADDA 0051 00523.⑴在源程序上,将被加数和加数分别改成:DATA1 DB 31H,31H,31H,31H,31H DATA2 DB 32H,32H,32H,32H,32H ⑵从内存中观察结果的变化:①-u寻找到子程序返回指令RET的IP:子程序RET的IPDISPL 未出现CRLF 0046ADDA 008A②观察加数和被加数的变化:(-G:CS:0000 0046→-D DS:0000)③观察结果的变化:(-G:CS:0046 008A→-D DS:0000)4.子程序格式及其调用方法:段内直接调用指令的格式:CRLF PROC NEAR调用方法:指令在汇编时,汇编程序会计算CALL的下一条指令与被调用过程的入口地址之间的16位位移量,最后通过RET返回主程序。
十、实验总结①在预习时,要把源程序看懂,每一步都要看透,有可能的话就要自己去敲打一下源程序的代码,并把预习当做一种学习,把不懂的通过翻书或者查资料看懂;②在实验进行时,不要进行太多的目的性不明确的操作,也即是要清楚自己要完成哪些任务,对于一些数据不要自以为是的作修改,比如这次定义被加数和加数时,自己将加数调成都小于30H,所以在程序运行时,显示出来的会是乱码;③对于一些操作命令和汇编语言的格式,要自己亲自去运行才能领会其存在的含义。
十一、思考题:试写出从键盘输入一个字符,再将其显示出来的程序段。
DISPL PROC NEARDSL: MOV AH,02MOV DX,0A40HIN AL,DXRET指导教师批阅意见:成绩评定:预习情况(20)实验过程(35)实验报告(45)总分指导教师签字:年月日备注:注:1、报告内的项目或内容设置,可根据实际情况加以调整和补充。
2、教师批改学生实验报告时间应在学生提交实验报告时间后10日内。