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

合集下载
  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

相关文档
最新文档