微机原理实验报告多位十进制数相加程序

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

本科实验报告

课程名称:微机原理及接口技术

课题项目:多为十进制数相加程序

专业班级:电科1201 学号:2012001610 学生姓名:王天宇

指导教师:任光龙

2015年5月23日

实验一多位十进制数相加程序

一、实验目的

学习数据传送和算术运算指令的用法

二、实验内容

将两个多位十进制数28056、47193相加,并显示加数、被加数、和。

要求两个加数均以ASCII码形式各自顺序存放在DATA1和DATA2内存

单元中,结果送回DATA1处(低位在前,高位在后)

三、程序流程图

开始

显示加数和被加数

加数和被加数由ASCⅡ码表示转化为十六进制

计数值5-->CX

清除最低位进位

执行ADC带进位相加

AAA调整

调整偏移量

显示加数和被加数

N

CX-1=0

Y

将十六进制结果转化为ASCⅡ码表示的数字

显示结果

结束

四、实验程序

SHOW MACRO B

MOV DL,B

MOV AH,02H

INT 21H

ENDM

DATA SEGMENT

DATA1 DB 33H,39H,31H,37H,34H

DATA2 DB 36H,35H,30H,38H,32H

DATA3 DB '__',0DH,0AH,'$'

DATA ENDS

STACK SEGMENT STACK

STA DB 20 DUP (?)

TOP EQU LENGTH STA

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

MOV AX,TOP

MOV SP,AX

MOV SI,OFFSET DATA2

MOV BX,05

SHOW 20H

CALL DISPL

SHOW 0DH

SHOW 0AH

MOV SI,OFFSET DATA1 MOV BX,05

SHOW 2BH

CALL DISPL

SHOW 0DH

SHOW 0AH

MOV CL,7

S1: SHOW 2DH

LOOP S1

SHOW 0DH

SHOW 0AH

MOV SI,OFFSET DATA1 MOV DI,OFFSET DATA2 CALL ADDA

MOV SI,OFFSET DATA1 MOV BX,05

SHOW 20H

CALL DISPL

MOV AX,4C00H

INT 21H

DISPL PROC NEAR

DS1: SHOW [SI+BX-1]

DEC BX

JNZ DS1

RET

DISPL ENDP

ADDA PROC NEAR

MOV DX,SI

MOV BP,DI

MOV BX,05

AD1: SUB BYTE PTR [SI+BX-1],30H SUB BYTE PTR [DI+BX-1],30H DEC BX

JNZ AD1

MOV SI,DX

MOV DI,BP

MOV CX,05

CLC

AD2: MOV AL,[SI]

MOV BL,[DI]

ADC AL,BL

AAA

MOV [SI],AL

INC SI

INC DI

LOOP AD2

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

五、实验步骤

1、在windows环境下,打开“开始”菜单,选择“运行”项,然后输入”CMD”,按“确定”进去DOS环境。

2、输入“E:”回车,输入“CD MASM”回车。

3、输入“EDIT LR.ASM”回车,进入编辑状态,将以上源程序写入,完成后,如图1,按“Alt+F”打开文件菜单,选“Save”存盘,选“Exit”退出编辑状态。

4、对源程序进行汇编连接:输入“ML LR.ASM”回车,如图2。

5、运行可执行文件.EXE:输入“LR”回车,即可得到程序中给定数据的相加结果,如图2.

图1:程序

图2:汇编连接结果及执行结果

六、思考题:

问:不改变数据段DATA1和DATA2的内容,如何将加数和被加数分别有28056和47193变成65082和39174?

答:将原程序中的数据相加顺序改变一下,即将原来的倒序相加变为顺序相加,也可将结果变为65082和39174。程序具体改动如下:

源程序改变后的程序

DS1:SHOW [SI+BX-1] 改为 DS1: SHOW [SI]

AD2: MOV AL,[SI] 改为 AD2: MOV AL,[SI+BX-1]

MOV BL,[DI] 改为 MOV BL,[DI+BX-1]

INC SI

INC DI 改为 DEC BX

ADD BYTE PRT 改为 ADD BYTE PRT [SI],30H [SI+BX-1],30H 改为 ADD BYTE PRT [DI],30H ADD BYTE PRT 改为 INC SI

[DI+BX-1],30H 改为 INC DI

七、实验感想

通过这次实验,我熟悉了DOS环境,了解了数据传送和算术运算指令的用法,并且对微机原理及接口技术这门课程有了更深的了解和认识。

相关文档
最新文档