微机原理实验报告两个数相乘Word格式.docx

上传人:b****5 文档编号:21459495 上传时间:2023-01-30 格式:DOCX 页数:13 大小:18.76KB
下载 相关 举报
微机原理实验报告两个数相乘Word格式.docx_第1页
第1页 / 共13页
微机原理实验报告两个数相乘Word格式.docx_第2页
第2页 / 共13页
微机原理实验报告两个数相乘Word格式.docx_第3页
第3页 / 共13页
微机原理实验报告两个数相乘Word格式.docx_第4页
第4页 / 共13页
微机原理实验报告两个数相乘Word格式.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

微机原理实验报告两个数相乘Word格式.docx

《微机原理实验报告两个数相乘Word格式.docx》由会员分享,可在线阅读,更多相关《微机原理实验报告两个数相乘Word格式.docx(13页珍藏版)》请在冰豆网上搜索。

微机原理实验报告两个数相乘Word格式.docx

MOV

LEA

L1:

INT

DEC

JNZ

AND

LOOP1:

MOV

INC

MUL

AAM

ADD

AAA

INCAX,STACKSS,AXSP,TOPSI,DATA1BX,05HAH,02H

DL,[SI+BX-1]21HBXL1AH,09HDX,MES121HSI,DATA2

AH,02HDL,[SI]21HAH,09HDX,MES221HSI,OFFSETDATA2;

显示算式BL,[SI];

乘数DATA2?

BLBL,00001111B;

屏蔽高4位,ASCII码转化为十六进制数SI,OFFSETDATA1DI,OFFSETRESULT

CX,05AL,[SI]AL,00001111B;

取被乘数DATA1,ASCII变十六进制数SI;

指向被乘数1的下一字符单元BL;

相乘;

AAM调整

AL,[DI];

结果低位与前次计算的进位相加;

AAA调整[DI],ALDI;

结果送存到下一单元

MOV[DI],AH

LOOPLOOP1;

计算结果高位进位送存MOVCX,06

MOVSI,DI

DISPL:

MOVAH,02

MOVDL,[SI]

ADDDL,30H

INT21H

DECSI

L

OOPDISPL

MOVAX,4C00H

CODEENDS

ENDSTART

;

显示结果;

结束

篇二:

微机原理设计实验之两个数相乘

课程设计题目:

两个数相乘

一、实验目的

1、领会汇编语言的编程思想;

2、掌握汇编语言的指令,加深乘法指令和循环指令的用法;

3、学会DOS功能的调用。

二、实验内容

实现两个十进制数的乘法,被乘数和乘数均以ASCII码形式存放在内存中,乘积在屏幕上显示出来。

三、实验原理

本实验设计A、B两个数相乘。

巧妙地运用了数学中的乘法原理,将B的低位和A的最低位相乘得到的数的低位存到AL中,这个数的进位存到AH中,再用B的低位和A的次低位相乘,得到一个数,这个数的低位和上一次的进位相加。

循环此过程直到到B与A的最高位相乘结束,并与上一次结果的进位相加,得到最后的结果。

四、程序设计流程图

(此处画上是实验纸上的流程图)

五、实验程序

DATASEGMENT;

定义数据段

DATA1DB32H,39H,30H,35H,34H;

用ASCII码表示被乘数45092

DATA2DB34H;

用ASCII码表示乘数4

BUFDB&

Result$&

RESULTDB6DUP(00H);

定义存放结果的数据缓冲区,6个字节长,初值为0

DATAENDS;

数据段结束

STACKSEGMENT;

定义堆栈段

STADB20DUP(?

);

为变量STA分配20个字节的空间

返回利用DUP定义的数组元素的个数到TOP,TOP=20

STACKENDS;

堆栈段结束

CODESEGMENT;

定义代码段

CODE,DS:

MOVDS,AX;

DS?

AX

MOVAX,STACK

MOVSS,AX;

SS?

STACK

MOVSP,TOP;

栈顶指针指向TOP

MOVDX,OFFESETBUF

MOVAH,9;

DOS功能号09H送AH

INT21H;

显示字符串‘pleaseinput’LEASI,DATA1;

被乘数首地址送SI

MOVBX,05H

MOVAH,02H;

DOS功能号02H送AH

MOVDL,[SI+BX-1];

被乘数送DL

INT21H;

DOS功能号调用(显示器输出)

DECBX

JNZL1

MOVAH,09H;

DOS功能号09H送AH

LEADX,MES1;

MES1的偏移地址送DX

DOS功能号调用(显示字符串)LEASI,DATA2;

乘数地址

送SI

MOVAH,02H

MOVDL,[SI];

乘数送DL

INT21H;

显示乘数

MOVAH,09H

LEADX,MES2;

MES2的偏移地址送DX

INT21H

MOVSI,OFFSETDATA2

MOVBL,[SI];

DATA2中的乘数送BL

ANDBL,00001111B;

屏蔽乘数高4位,ASCII码转换为十六进制

MOVSI,OFFSETDATA1;

被乘数偏移地址送SI

MOVDI,OFFSETRESULT;

运算结果偏移地址送DI

MOVCX,05;

设置循环次数

MOVAL,[SI];

被乘数送AL

ANDAL,00001111B;

屏蔽被乘数高4位,ASCII码转换为十六进

INCSI

MULBL;

AL*BL送AX

AAM;

乘法十进制调整

ADDAL,[DI];

结果低位与前次计算的进位相加

AAA;

BCD码加法十进制调整指令

MOV[DI],AL;

计算结果低位送DI

INCDI

MOV[DI],AH;

计算结果高位进位送DI+1

循环

MOVCX,06

MOVSI,DI;

计算结果送SI

MOVAH,02H;

调用DOS功能号02H送AH

MOVDL,[SI]

ADDDL,30H;

结果转换为ASCII码

显示一位数据

DECSI;

地址减一,继续后面的数据显示

LOOPDISPL;

显示运算结果

MOVAX,4C00H;

返回DOS

ENDSTART

六、DOS功能调用

在DOS软中断指令中最常用的是系统功能调用(INT21H),主

要完成文件管理,输入/输出设备控制,系统参数操作等等。

它本

身包含80多个子程序,每个字程序对应一个功能号,其编号为0,62H。

此次课程设计用到的几个常用DOS系统功能调用。

1)键盘显示并回显(01H号功能)。

此功能程序将扫描键盘并等待输入一个字符,直到按下一个键(输入一个字符),先检查是否有Ctrl+Break键,若是则退出,否则把字符的ASC?

码送入寄存器AL,并在屏幕上显示该字符。

2)在屏幕显示一个字符(02H号功能)。

该功能要求的入口参数为:

将将要显示的字符的ASC?

码存入DL,功能号存入AH。

在执行INT21H时,会把DL寄存器中的ASC?

码字符送到屏幕显示。

02H号功能可显示任意字符,如果DL。

09H号功能不能显示‘,’符号,所以02H号功能可作为09H号功能的补充。

3)字符串显示(09H号功能)。

09H号功能子程序将指定的内存缓冲区中的字符串送屏幕显示。

要现实的字符串必须事先存放在内存数据区中,且字符串以‘,’作为结束标志,除此之外,还需要把存放待显示字符串的内存首地址分别存入DS和DX中。

也可以将非显示字符(如:

回车,换行)的ASC?

码(如:

0AH,0DH)插入字符串中。

4)读入字符串操作(0AH号功能)。

这个功能子程序入口参数是DS:

DX=输入缓冲区首地址。

5)返回操作系统(4CH号功能)。

这个功能子程序无入口参数,结束当前正在执行的程序,并返回操作系统,屏幕上显示操作系统提示符。

七、部分指令介绍

1、AAA是对BCD码的加法十进制进行调整,用于对两个非组合的BCD码相加的结果进行调整,产生一个非组合的BCD码。

2、AAM指令总是跟在乘法指令之后,对两个非组合BCD码相乘结果进行调整,最后得到一个正确的非组合BCD码结果。

3、EQU:

标号赋值伪指令,代表数据、数据地址或程序地址。

4、DB:

伪指令,是用来定义字节类型的伪变量

八、实验结果

九、实验总结及体会

通过此次实验,我查阅了相关资料,学习汇编语言,了解了汇编语言的编程思路,同时还学到一些DOS功能以及其调用方式。

从汇编语言的编程思路上来看,汇编的编程思路一般是基于最基础的原理,易理解,这样就会产生较清晰的编程思路,但是在编程上还是有些吃力。

一方面与自身编程经历少有关外,还有一方面就是没有很系统地掌握这门计算机语言,对计算机内部运行机制的理解还不到位,感觉很简单,却不知道从何下手,知道如何实现部分功能,却不能系统地联系起来,可以说,只能写程序段,不熟悉怎么写程序。

此次实验最大的收获就是了解并学习了DOS功能。

这是我们上课没有涉及到的,感觉很新鲜,觉得这是汇编很关键的地方,可以大大减轻用户的编程负担,使用起来也很简单方便。

有了这些调用这些DOS功能号可使编写的程序简单,易读,代码紧凑,调

试也方便。

而且,我们可以利用DOS的这些功能实现更便捷更广泛的功能。

例如,我们可以适当修改程序,增加一个键盘输入字符并显示的功能号,使得我们可以从键盘输入两个十进制数来实现这两个数的乘积,而不是每次要计算就要修改DARA1和DATA2中的数。

另外,此程序对溢出的结果无法显示,那么,我们可以修改程序,判断乘数被乘数的范围,如果溢出,屏幕显示的因溢出引起的错误,

篇三:

微机原理实验报告

实验报告

课程名称:

实验名称:

班级

学号

姓名

指导教师李北明

实验一两个多位十进制数相加实验

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

2、熟悉在pc机上建立、汇编、链接、调试和运行汇编语言程序的过程。

1、将两个五位十进制相加。

要求加数和被加数均以ASCII码形

式各自顺序存放在以DATA1和DATA2为首的5个内存单元中(低

位在前),结果送回DATA1处。

2,改变程序手动输入2个数相加

三、实验程序

原程序

CRLFMACRO;

建立宏指令CRLF

MOVDL,0DH

MOVAH,02H

MOVDL,0AH

ENDM

DATA1DB32H,33H,34H,35H,36H;

第一个数据(作为被加数)

DATA2DB31H,32H,33H,34H,34H;

第二个数据(作为加数)DATA

ENDS

堆栈段

STADB20DUP(?

TOPEQULENGTHSTA

MOVAX,STACK

MOVSS,AX

MOVAX,TOP

MOVSP,AX

MOVSI,OFFSETDATA2

MOVBX,05

CALLDISPL;

显示被加数

CRLF

MOVSI,OFFSETDATA1

显示加数

MOVDI,OFFSETDATA2

CALLADDA;

加法运算

MOVBX,05;

显示结果

CALLDISPL

DISPLPROCNEAR;

显示子功能

DS1:

MOVDL,[SI+BX-1];

显示字符串中一字符

DECBX;

修改偏移量

JNZDS1

RET

DISPLENDP

ADDAPROCNEAR

MOVDX,SI

MOVBP,DI

AD1:

SUBBYTEPTR[SI+BX-1],30H

SUBBYTEPTR[DI+BX-1],30H

DECBX

JNZAD1

MOVSI,DX

MOVDI,BP

MOVCX,05;

包括进位,共五位

CLC;

清位进位

AD2:

MOVAL,[SI]

MOVBL,[DI]

ADCAL,BL;

带进位相加

AAA;

非组合BCD码的加法调整

MOV[SI],AL;

结果送被加数区

INCSI

INCDI;

指向下一位

LOOPAD2;

AD3:

ADDBYTEPTR[SI+BX-1],30H

ADDBYTEPTR[DI+BX-1],30H

JNZAD3

ADDAENDP

手动输入相加

CRLFMACRO

MOVDL,0DH

MOVDL,0AH

DATASEGMENT

DATA1DB20DUP(?

DATA2DB20DUP(?

DATAENDS

TOPEQULENGTHSTA

CODESEGMENT

ASSUMECS:

CALLINPUT

MOVSI,OFFSETDATA2MOVBX,06CALLDISPL

MOVSI,OFFSETDATA1MOVBX,06

MOVDI,OFFSETDATA2CALLADDAMOVSI,OFFSET

DATA1MOVBX,06

MOVAX,4C00HINT21H

DISPLPROCNEARDSI:

MOVDL,[SI+BX-1]INT21HDECBX

JNZDSI

MOVBX,06

SUBBYTEPTR[SI+BX-1],30HSUBBYTEPTR[DI+BX-1],30H

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

当前位置:首页 > 工作范文 > 行政公文

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

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