微机原理实验一 两个多位十进制数相加实验试做报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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