微机原理实验报告.docx

上传人:b****3 文档编号:2127883 上传时间:2022-10-27 格式:DOCX 页数:22 大小:335.35KB
下载 相关 举报
微机原理实验报告.docx_第1页
第1页 / 共22页
微机原理实验报告.docx_第2页
第2页 / 共22页
微机原理实验报告.docx_第3页
第3页 / 共22页
微机原理实验报告.docx_第4页
第4页 / 共22页
微机原理实验报告.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

微机原理实验报告.docx

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

微机原理实验报告.docx

微机原理实验报告

微机原理实验报告

院别:

物理与电子工程学院

专业:

电子信息工程0911班

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

一、实验目的

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

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

二、实验内容

将两个多位十进制数相加,要求被加数和加数均以ASCII码形式各自顺序存放在以DATA1、DATA2为首的5个内存单元中(低位在前),结果送回DATA1处。

三、程序框图

四、实验所用程序

DATASEGMENT

DATA1DB33H,39H,31H,37H,34H;被加数

DATA1ENDEQU$-1

DATA2DB34H,35H,30H,38H,32H;加数

DATA2ENDEQU$-1

SUMDB5DUP(?

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

MOVSI,OFFSETDATA1END

MOVDI,OFFSETDATA2END

CALLADDA

MOVAX,4C00H

INT21H

ADDAPROCNEAR

MOVDX,SI

MOVBP,DI

MOVBX,05H

AD1:

SUBBYTEPTR[SI],30H

SUBBYTEPTR[DI],30H

DECSI

DECDI

DECBX

JNZAD1

MOVSI,DX

MOVDI,BP

MOVCX,05H

CLC

AD2:

MOVAL,[SI]

MOVBL,[DI]

ADCAL,BL

AAA

MOV[SI],AL

DECSI

DECDI

LOOPAD2

MOVSI,DX

MOVDI,BP

MOVBX,05H

AD3:

ADDBYTEPTR[SI],30H

ADDBYTEPTR[DI],30H

DECSI

DECDI

DECBX

JNZAD3

RET

ADDAENDP

CODEENDS

ENDSTART

五、实验程序分析及预计结果

数据定义段省略分析

MOVSI,OFFSETDATA1END;将DATA1的偏移地址给SI,SI中存放的是0004

MOVDI,OFFSETDATA2END;将DATA2的偏移地址给DI,DI中存放的是0009

CALLADDA;调用子程序ADDA

MOVAX,4C00H

INT21H

ADDAPROCNEAR

MOVDX,SI

MOVBP,DI

MOVBX,05H

AD1:

SUBBYTEPTR[SI],30H;将SI中的数值变为十进制数

SUBBYTEPTR[DI],30H;将DI中的数值变为十进制数

DECSI;将SI中的地址前移一位改变下一个数值

DECDI;将DI中的地址前移一位改变下一个数值

DECBX;定义循环的次数

JNZAD1;在BX中的数值不等于0的情况下循环执行AD1

MOVSI,DX;重新初始化SI

MOVDI,BP;重新初始化DI

MOVCX,05H

CLC;将进位标志位清零

AD2:

MOVAL,[SI]

MOVBL,[DI]

ADCAL,BL;将AL,BL中的数据用带进位的加法相加,保存到AL中

AAA

MOV[SI],AL

DECSI

DECDI

LOOPAD2

MOVSI,DX

MOVDI,BP

MOVBX,05H

AD3:

ADDBYTEPTR[SI],30H;将十进制数转化为十六进制,并存到SI中

ADDBYTEPTR[DI],30H;将十进制数转化为十六进制,并存到DI中

DECSI

DECDI

DECBX

JNZAD3

1、在数据段,定义了一个data1,分配的地址是00~04,data1end里面的内容是04h,且不占内存,定义的data2,分配的地址是05~09,类似的,data2end里面的内容是09h

2、在循环AD1过程中,data1里面的内容从开始的33h,39h,31h,37h,34h变为3,9,1,7,4;data2里面的内容也从开始的34h,35h,30h,38h,32h变为4,5,0,8,2。

循环AD2就是实现数据的相加,不过此处还用到了ADC,也就是带进位的加法运算,所以此前就将CF清零了。

循环后data1里面的内容是8,4,2,5,6。

循环AD3后,data1里面的内容为38h,34h,32h,35h,36h;data2里面的内容为34h,35h,30h,38h,32h.

循环结束后,返回到主程序,程序运行到INT21h结束。

也就是说实验最后的结果就是执行完循环AD3后,data1和data2中的内容。

结果保存在内存中,地址为00h~09h(ds:

000038343235363435303832)

六、实验结果如下:

七、实验总结

第一次做微机原理的实验,开始看了老师发给我们的实验内容和操作细节但是还是有很多的东西不是很清楚,感觉是模拟两可的。

在老师的讲解下,知道首先要将masm这个文件夹放在D盘里面,然后再在masm这个文件夹里面建一个文本文档,如xiangj.asm,然后再运行。

先masm.exexiangj.asm。

若程序报错,则要在记事本里面修改,直至编译没有错误为止,这时候会自动生成一个xiangj.obj文件。

然后链接,link.exexiangj.obj,执行之后敲xiangj.exe就可以运行程序了。

这是我觉得第一做微机原理的实验学习到最能让我永远记得的东西。

至于实验的程序,刚开始根本就看不懂,由于里面涉及的很多知识都是我们还没有学到的,这就给我们看程序以及程序的功能的阅读带来了很大的阻碍。

也直到现在,我才看懂这个程序。

我觉得做实验最重要的是细心和耐心,还有就是要预习。

那样才能够提前知道可能会出现什么样的状况,自己能有有余地去解决这个问题。

即使自己解决不了的能够在实验室的时候去问老师,在老师的讲解下能明白的更彻底些。

实验二排序实验

一、实验目的

掌握用汇编语言编写排序程序的思路和方法。

二、实验内容

将指定内存出开始的数据(最多为4位数)按从大到小的顺序排列。

第一个数字表示数据的个数(不是要比较的数值!

)。

三、程序流程图

图3-2

四、实验所用程序

DATASEGMENT

ADDRDW8,234,35,67,876,54,39,765,237

DATAENDS

STACKSEGMENT

STADW32DUP(?

TOPDW

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,ES:

DATA,SS:

STACK

START:

MOVAX,DATA

MOVDS,AX

MOVES,AX

MOVAX,STACK

MOVSS,AX

MOVSP,TOP

MOVCX,WORDPTRADDR[0]

DECCX

LOOP1:

MOVDI,CX

MOVBX,2

LOOP2:

MOVAX,WORDPTRADDR[BX]

CMPAX,WORDPTRADDR[BX+2]

JGECCC

XCHGAX,WORDPTRADDR[BX+2]

MOVWORDPTRADDR[BX],AX

CCC:

ADDBX,2

LOOPLOOP2

MOVCX,DI

LOOPLOOP1

EXIT:

MOVAX,4C00H

INT21H

CODEENDS

ENDSTART

五、实验程序分析及预计结果

DATASEGMENT

ADDRDW8,234,35,67,876,54,39,765,237;定义9个字,注意:

数字8是要排序的数据的个数

DATAENDS

STACKSEGMENT

STADW32DUP(?

TOPDW?

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,ES:

DATA,SS:

STACK

START:

MOVAX,DATA

MOVDS,AX

MOVES,AX

MOVAX,ACK

MOVSS,X

MOVSP,TOP

MOVCX,WORDPTRADDR[0];将0008H赋给CX

DECCX;将CX中的数据减1,用于控制循环次数

LOOP1:

MOVDI,CX

MOVBX,2

LOOP2:

MOVAX,WORDPTRADDR[BX];将BX中的数据00EA(234)给AX

CMPAX,WORDPTRADDR[BX+2];将下一个数据与00EA相比较

JGECCC;比较之后AX中的数大于或等于BX+2中的数则跳转到执行CCC

XCHGAX,WORDPTRADDR[BX+2];如果AX中的数小于BX+2中的数则交换两者的位置

MOVWORDPTRADDR[BX],AX

CCC:

ADDBX,2

LOOPLOOP2

MOVCX,DI

LOOPLOOP1

EXIT:

MOVAX,4C00H;跳出程序

INT21H

CODEENDS

ENDSTART

预计结果:

经过分析程序的最后的排序结果是036C02FD00ED00EA0043003600270023

程序设计思路:

冒泡排序法

六、实验结果如下

七、实验中存在的问题及分析

1、看不懂程序还是主要的问题,开始看的时候不知道定义中的第一个数据是要排序的数据的个数

2、这个程序循环的次数比较多,没耐心去分析这个程序的功能。

3、有很多指令的功能不清楚,给分析程序带来了很大的困难。

实验三自编程序上机调试

一、实验目的

掌握用汇编语言编写排序程序的思路和方法。

二、实验内容

选作业题中题目上机调试。

用汇编实现多位十六进制数相加

DATASEGMENT;高位在前,个位最后

xdb0,45h,21h,0ADh,0CBh,54h,59h,44h,55H;4521ADCB54594455H

ydb0,45h,21h,0BAh,0DCh,78h,59h,44h,55H;4521BADC78594455H

zdb9dup(0);累加和存放区

DATAENDS

;

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

movax,DATA

movds,ax

movsi,offsety

decsi;SI指向x的个位

movdi,offsetz

adddi,8;指向z的个位

clc

movcx,9

next:

moval,[si];逐位

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

当前位置:首页 > 求职职场 > 简历

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

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