实验一两个多位十进制数相加的实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一两个多位十进制数相加的实验
一、实验目的
1、学习数据传送和算术运算指令的用法。
2、熟悉在PC机上建立、汇编、链接、调试和运行汇编语言程序的过程。
二、实验内容
将两个多位十进制数相加,要求被加数和加数均以ASCII码形式各自顺序存放在以DATA1、DATA2为首的5个内存单元中(低位在前),结果送回DATA1处。
三、程序框图
四、程序清单
DATA SEGMENT ;定义数据段
DATA1 DB 33H,39H,31H,37H,34H ;被加数
DATA1END EQU $-1
DATA2 DB 34H,35H,30H,38H,32H ;加数
DATA2END EQU $-1
SUM DB 5 DUP() ;定义5个空字节
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 ;将当前堆栈段首地址送入SS
MOV SP,AX ;将堆栈段首地址送入堆栈指针寄存器
MOV SI,OFFSET DATA1END ;将DATA1的偏移地址送入SI
MOV DI,OFFSET DATA2END ;将DATA2的偏移地址送入DI
CALL ADDA ;调用子程序ADDA
MOV AX,4C00H
INT 21H ;中断调用
ADDA PROC NEAR ;子程序段
MOV DX,SI ;DX=0004H
MOV BP,DI ;BP=0009H
MOV BX,05H ;程序调用次数
AD1: SUB BYTE PTR[SI],30H ;将被加数的ASCII码转换成十六进制数
SUB BYTE PTR[DI],30H ;将加数的ASCII码转换成十六进制数
DEC SI ;SI中的内容自减1
DEC DI ;DI中的内容自减1
DEC BX ;程序调用次数自减1
JNZ AD1 ;条件转移
MOV SI,DX ;回到初始位置
MOV DI,BP
MOV CX,05H ;循环次数控制
CLC ;清除CF位
AD2: MOV AL,[SI]
MOV BL,[DI]
ADC AL,BL ;从低位开始进行带进/借位的加法运算
AAA ;转换成非压缩BCD码,低位存于AL,高位存于AH MOV [SI],AL ;将AL中的内容存入SI所在地址
DEC SI ;偏移地址自减
DEC DI ;偏移地址自减
LOOP AD2 ;循环控制指令
MOV SI,DX
MOV DI,BP
MOV BX,05H
AD3: ADD BYTE PTR[SI],30H ;将16进制数转换为ASCII码表示
ADD BYTE PTR[DI],30H
DEC SI ;偏移地址自减
DEC DI
DEC BX
JNZ AD3
RET ;返回指令
ADDA ENDP ;结束子程序
CODE ENDS ;结束程序代码段
END START
五、实验结果(截屏--软件实验或者拍照---硬件实验)
六、实验结果分析(预期结果与实际结果的对照)
1、数据段分析
用ASCII码值的形式表示被加数和加数
被加数=39174;加数=45082
2、堆栈段分析
用于存放计算过程中的过程量。
3、程序代码段分析
1)从低位起,将被加数和加数转换成十六进制数
被加数和加数转换各位转换成十六进制数表示。
2)从低位起进行各个位上的带进位的加法运算
得到的结果的各位上的十六进制表示形式。
3)将结果的各个位上的数转换成ASCII码的形式得到最后的结果
实验得到的最后的结果是39174+45082=84256。
七、实验心得体会
通过本次实验,我对汇编有了更物理化的认识,也明白了汇编中各个寄存器的作用及寄存器间是怎样联系的,也初步明白了什么是段地址,什么是堆栈,以及汇编的基本结构和循环结构的基本运用。但是,我的了解只是初步的,汇编中还有很多我不明白和不了解的地方,最重要的是,汇编语句掌握不牢固,不能很快的知道一些专用的汇编语句的意义,对于宏方面的认识也非常薄弱,还需要在今后的实验和学习中不多的学习和练习。