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

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

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

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

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

微机原理实验报告两个数相乘

微机原理实验报告,两个数相乘

南昌大学微机原理实验十二两个数相乘的实验

实验十二两个数相乘的实验

一.实验要求

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

二.实验目的

掌握乘法指令和循环指令的用法。

三.实验程序框图

四(实验程序:

DATASEGMENT

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

DATA2DB34H

MES1DB'*','$'

MES2DB'=','$'

RESULTDB6DUP(00H)

DATAENDS

STACKSEGMENT

STADB20DUP(?

TOPEQULENGTHSTA

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK,ES:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOV

MOV

MOV

LEA

MOV

L1:

MOV

MOV

INT

DEC

JNZ

MOV

LEA

INT

LEA

MOV

MOV

INT

MOV

LEA

INT

MOV

MOV

AND

MOV

MOV

MOV

LOOP1:

MOV

AND

INC

MUL

AAM

ADD

AAA

MOV

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

INT21H

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

MES1DB'*','$'

MES2DB'=','$'

BUFDB'Result$'

RESULTDB6DUP(00H);定义存放结果的数据缓冲区,6个字节长,初值为0

DATAENDS;数据段结束

STACKSEGMENT;定义堆栈段

STADB20DUP(?

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

TOPEQULENGTHSTA

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

STACKENDS;堆栈段结束

CODESEGMENT;定义代码段

ASSUMECS:

CODE,DS:

DATA,SS:

STACK,ES:

DATA

START:

MOVAX,DATA

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

L1:

MOVAH,02H;DOS功能号02H送AH

MOVDL,[SI+BX-1];被乘数送DL

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

DECBX

JNZL1

MOVAH,09H;DOS功能号09H送AH

LEADX,MES1;MES1的偏移地址送DX

INT21H;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;设置循环次数

LOOP1:

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

LOOPLOOP1;循环

MOVCX,06

MOVSI,DI;计算结果送SI

DISPL:

MOVAH,02H;调用DOS功能号02H送AH

MOVDL,[SI]

ADDDL,30H;结果转换为ASCII码

INT21H;显示一位数据

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

LOOPDISPL;显示运算结果

MOVAX,4C00H;返回DOS

INT21H;结束

CODEENDS

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

INT21H

MOVDL,0AH

MOVAH,02H

INT21H

ENDM

DATASEGMENT

DATA1DB32H,33H,34H,35H,36H;第一个数据(作为被加数)

DATA2DB31H,32H,33H,34H,34H;第二个数据(作为加数)DATA

ENDS

STACKSEGMENT;堆栈段

STADB20DUP(?

TOPEQULENGTHSTA

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK,ES:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVAX,STACK

MOVSS,AX

MOVAX,TOP

MOVSP,AX

MOVSI,OFFSETDATA2

MOVBX,05

CALLDISPL;显示被加数

CRLF

MOVSI,OFFSETDATA1

MOVBX,05

CALLDISPL;显示加数

CRLF

MOVDI,OFFSETDATA2

CALLADDA;加法运算

MOVSI,OFFSETDATA1

MOVBX,05;显示结果

CALLDISPL

CRLF

MOVAX,4C00H

INT21H

DISPLPROCNEAR;显示子功能

DS1:

MOVAH,02

MOVDL,[SI+BX-1];显示字符串中一字符

INT21H

DECBX;修改偏移量

JNZDS1

RET

DISPLENDP

ADDAPROCNEAR

MOVDX,SI

MOVBP,DI

MOVBX,05

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;

MOVSI,DX

MOVDI,BP

MOVBX,05

AD3:

ADDBYTEPTR[SI+BX-1],30H

ADDBYTEPTR[DI+BX-1],30H

DECBX

JNZAD3

RET

ADDAENDP

CODEENDS

ENDSTART

手动输入相加

CRLFMACRO

MOVDL,0DH

MOVAH,02H

INT21H

MOVDL,0AH

MOVAH,02H

INT21H

ENDM

DATASEGMENT

DATA1DB20DUP(?

DATA2DB20DUP(?

DATAENDS

STACKSEGMENT

STADB20DUP(?

TOPEQULENGTHSTA

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK,ES:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVAX,STACK

MOVSS,AX

MOVAX,TOP

MOVSP,AX

MOVBX,05

MOVSI,OFFSETDATA1

CALLINPUT

CRLF

MOVBX,05

MOVSI,OFFSETDATA2

CALLINPUT

CRLF

CRLF

MOVSI,OFFSETDATA2MOVBX,06CALLDISPL

CRLF

MOVSI,OFFSETDATA1MOVBX,06

CALLDISPL

CRLF

MOVDI,OFFSETDATA2CALLADDAMOVSI,OFFSET

DATA1MOVBX,06

CALLDISPL

CRLF

MOVAX,4C00HINT21H

DISPLPROCNEARDSI:

MOVAH,02

MOVDL,[SI+BX-1]INT21HDECBX

JNZDSI

RET

DISPLENDP

ADDAPROCNEAR

MOVDX,SI

MOVBP,DI

MOVBX,06

AD1:

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

DECBX

JNZAD1

MOVSI,DX

MOVDI,BP

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

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

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

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