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

上传人:b****7 文档编号:24030674 上传时间:2023-05-23 格式:DOCX 页数:9 大小:15.91KB
下载 相关 举报
微机原理实验一两个多位十进制数相加实验试做报告.docx_第1页
第1页 / 共9页
微机原理实验一两个多位十进制数相加实验试做报告.docx_第2页
第2页 / 共9页
微机原理实验一两个多位十进制数相加实验试做报告.docx_第3页
第3页 / 共9页
微机原理实验一两个多位十进制数相加实验试做报告.docx_第4页
第4页 / 共9页
微机原理实验一两个多位十进制数相加实验试做报告.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

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

《微机原理实验一两个多位十进制数相加实验试做报告.docx》由会员分享,可在线阅读,更多相关《微机原理实验一两个多位十进制数相加实验试做报告.docx(9页珍藏版)》请在冰豆网上搜索。

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

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

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

【实验目的】

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码相加,只能从最低位开始逐个字节地进行加法操作,并随即进行调整。

参考程序清单(WJSY

0.ASM):

DATASEGMENT

DATA1DB33H,39H,31H,37H,34H

DATA2DB36H,35H,30H,38H,32H

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVCX,5;计数

MOVSI,0;做指针用,因从DATA1的第一个数取数,故SI=0CLC

NEXT:

MOVAL,DATA1[SI];取被加数给AL

ADCAL,DATA2[SI];取加数和AL相加

AAA;未组合十进制数加法调整指令

MOVDATA1[SI],AL;结果回送至DATA1处

INCSI;修改SI指向下一位数

LOOPNEXT

MOVSI,5;因显示是从高位到低位,故SI=5

L:

ADDDATA1[SI-1],30H;还原成ASCII码

MOVDL,DATA1[SI-1]

MOVAH,02;送显示

INT21H

JNZL

MOVAH,4CH;返回DOS

INT21H

CODEENDS

ENDSTART

运行结果:

75249

上述程序有很多不方便的地方,比如①加数和被加数以低字节在前高字节在后顺序存放在内存单元中,不符合我们日常的习惯,如果改为高字节在前低字节在后的形式存放数据,程序如何改变?

②程序只显示了相加结果,没有显示加数和被加数,如果要求显示加数和被加数,程序如何修改?

③如果按47193+28056=75249格式显示,程序如何修改?

①程序清单(WJSY

1.ASM):

DATASEGMENT

DATA1DB34H,37H,31H,39H,33H;高位在前低位在后

DATA2DB32H,38H,30H,35H,36H

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVSI,5;做加法是从低位开始加,故SI=5

CLC

NEXT:

MOVAL,DATA1[SI-1];取被加数给AL

ADCAL,DATA2[SI-1];取加数和AL相加

AAA;未组合十进制数加法调整指令

MOVDATA1[SI-1],AL;结果回送至DATA1处

DECSI;修改SI指向下一位数

JNZNEXT

L:

ADDDATA1[SI],30H;还原成ASCII码

MOVDL,DATA1[SI]

MOVAH,02;送显示

INT21H

INCSI

CMPSI,5

JNZL

MOVAH,4CH;返回DOS

INT21H

CODEENDS

ENDSTART

运行结果:

75249

②程序清单(WJSY

2.ASM):

DISPMACRO;回车换行宏定义

MOVAH,2

MOVDL,0DH

INT21H

MOVAH,2

MOVDL,0AH

INT21H

ENDM

DATASEGMENT

DATA1DB34H,37H,31H,39H,33H

DATA2DB32H,38H,30H,35H,36H

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVSI,OFFSETDATA1

CALLDISPL

DISP

MOVSI,OFFSETDATA2

CALLDISPL

DISP

MOVSI,5

CLC

NEXT:

MOVAL,DATA1[SI-1]

ADCAL,DATA2[SI-1]

AAA

MOVDATA1[SI-1],AL

DECSI

JNZNEXT

L:

ADDDATA1[SI],30H

MOVDL,DATA1[SI]

MOVAH,02

INT21H

INCSI

CMPSI,5

JNZL

MOVAH,4CH

INT21H

DISPLPROC

MOVBX,0

D1:

MOVDL,[SI+BX]

MOVAH,2

INT21H

INCBXASCII码

;调显示子程序显示被加数;宏调用,回车换行

;调显示子程序显示加数;宏调用,回车换行

;做加法

;还原为

;送显示

;显示子程序

CMPBX,5

JNZD1

RET

DISPLENDP

CODEENDS

ENDSTART

运行结果:

47193

28056

75249

③程序清单(wjsy3a.asm)

DISPMACROM

MOVAH,2

MOVDL,M

INT21H

ENDM

DATASEGMENT

DATA1DB34H,37H,31H,39H,33H

DATA2DB32H,38H,30H,35H,36H

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVSI,OFFSETDATA1

CALLDISPL

DISP'+'

MOVSI,OFFSETDATA2

CALLDISPL

DISP'='

MOVSI,5

CLC

NEXT:

MOVAL,DATA1[SI-1]

ADCAL,DATA2[SI-1]

AAA

MOVDATA1[SI-1],AL

DECSI

JNZNEXT

L:

ADDDATA1[SI],30H

MOVDL,DATA1[SI]

MOVAH,02

INT21H

INCSI

CMPSI,5+”

=”

;显示运算符宏定义

;调显示子程序显示被加数

;宏调用显示“

;调显示子程序显示加数

;宏调用显示“

JNZL

MOVAH,4CH

INT21H

DISPLPROC

MOVBX,0

D1:

MOVDL,[SI+BX]

MOVAH,2

INT21H

INCBX

CMPBX,5

JNZD1

RET

CODEENDS

ENDSTART

运行结果:

47193+28056=75249;显示子程序

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 自我管理与提升

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1