北理bit微机原理上机软件实验报告Word文件下载.docx

上传人:b****5 文档编号:21298115 上传时间:2023-01-29 格式:DOCX 页数:18 大小:369.79KB
下载 相关 举报
北理bit微机原理上机软件实验报告Word文件下载.docx_第1页
第1页 / 共18页
北理bit微机原理上机软件实验报告Word文件下载.docx_第2页
第2页 / 共18页
北理bit微机原理上机软件实验报告Word文件下载.docx_第3页
第3页 / 共18页
北理bit微机原理上机软件实验报告Word文件下载.docx_第4页
第4页 / 共18页
北理bit微机原理上机软件实验报告Word文件下载.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

北理bit微机原理上机软件实验报告Word文件下载.docx

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

北理bit微机原理上机软件实验报告Word文件下载.docx

1.1编写程序求出10个数中的最大值和最小值

由于一共有十个数,所以求其最大数或者最小数需要比较9次。

从数据段的段首开取数,先取两个数进行比较,比较完后取其中的最大数或者最小数放入数据段的第二位中。

再取第三位数与第二位数比较,如此循环,比较9次后在数据段最末位的就是我们需要的数。

1.2求1到100的累加和,并用十进制形式将结果显示在屏幕上

求和部分:

1~100一共有100个数,所以需要做100次加法。

做加法要有两个数,第一个数是第i位的数值,第二个数是i-1位以及之前所有数的和,所以这两个数必须分别存放在两个寄存器里,并且两个数相加之后的所得的值,必须放在存放“和”的寄存器中,另外一个寄存器每做完一次加法自加1。

显示部分:

我们所求得的最终数值在内存中是以16进制数存放的,但是由于结果只是一个数,我们可以把它的每一位所对应的ASCII码按照一定的顺序存放到一个数据段中,再以字符串形式直接输出。

1.3将存储器中的十个字节型十六进制有符号数按从小到大的顺序排序并按十六进制显示出来

比较部分:

题目一共给了我们10个数,如果要进行排序的话可以先把十个数中最大的数选出来,放到数据段的最后一个位置,接着再选出次大的数放到数据段的倒数第二位,如此循环到最后便可成功将所给的十个数排序好。

我们所求得的最终数值在内存中是以16进制数存放的,如果想要显示16进制数就必须要把所得数的每一位ASCII码求出来放入DL中。

2、流程图

2.1编写程序求出10个数中的最大值和最小值

Y

N

2.2求1到100的累加和,并用十进制形式将结果显示在屏幕上

2.3将存储器中的十个字节型十六进制有符号数按从小到大的顺序排序并按十六进制显示出来

四、实验源程序

1、编写程序求出10个数中的最大值和最小值

DATASEGMENT;

定义数据段

DATA1DB12H,23H,34H,45H,56H,67H,78H,89H,9AH,0FDH;

定义十个数

MAXDB0

MINDB0

DATAENDS;

数据段定义完毕

CODESEGMENT;

定义代码段

ASSUMECS:

CODE,DS:

DATA

EXP1PROCFAR;

设定为子函数,可以远

程调用

START:

MOVAX,DATA

MOVDS,AX;

初始化DS

LEASI,DATA1;

将SI指向DATA1

LEADI,MAX;

将DI指向MAX

MOVAH,[SI]

MOVAL,[SI+1];

取出DATA1的前两个数

CALLCASE1;

调用子函数CASE1

MOVAH,0

MOV[DI],AX;

将最大数存入MAX中

LEADI,MIN;

将DI指向MIN

CALLCASE2;

调用子函数CASE2

将最小数存入MIN中

MOVAH,4CH

INT21H;

返回DOS

RET;

远程调用返回

CASE1PROC;

子程序CASE1(查找最

大数)

MOVCX,10;

设定比较次数

GO1:

MOVAH,[SI];

取出SI所指定的数放

入AH

CMPAL,AH;

比较AH与AL

JAGO2;

如果AL大于AH则跳转

到GO2

MOVAL,AH;

若AL小于AH则将AH

放到AL中

INCSI;

修改指针,将指针指向

取DATA1中的下一个数

LOOPGO1;

循环比较10次

JMPEND1;

循环完成

GO2:

END1:

RET;

循环完成,得到最大值

并存在AL了中返回主

程序

CASE1ENDP;

子程序CASE1结束

CASE2PROC;

小数)

XORAX,AX;

将AX清零,以便存数

比较

SI指向DATA1

MOVAL,[SI];

取出第一个数

GO3:

比较DATA1中的两个数

JBGO4;

小于则跳转

大于则把较小数放于AL

修改指针指向下一位

LOOPGO3;

循环比较

JMPEND2;

GO4:

END2:

循环完成,得到最小值

CASE2ENDP;

子程序CASE2结束

EXP1ENDP;

远程调用完成并返回

CODEENDS;

代码段结束

ENDSTART;

汇编结束

2、求1到100的累加和,并用十进制形式将结果显示在屏幕上

DATASEGMENT;

DATA1DW?

定义字形变量存放累加

和结果

RESULTDB4DUP(?

),0DH,0AH,'

$'

定义数组以便输出

CODESEGMENT;

DATA,ES:

MOVDS,AX;

MOVCX,100;

设置累加次数

XORAX,AX

XORBX,BX;

清空两个寄存器以便用

于计算

INCAX;

AX为第N个数

ADDBX,AX;

BX为N-1个数的累加和

相加100次

MOV[SI],BX;

所得结果放入DATA1

MOVCX,4;

设定循环次数求结果每

一位的ASCII码

LEADI,RESULT;

将DI指向RESULT

XORDX,DX

MOVAX,DATA1

MOVBX,0AH

AGAIN:

DIVBX

ADDDL,30H

MOV[DI+3],DL

DECDI

MOVDL,0

LOOPAGAIN;

取得结果每一位数的十

进制ASCII码并存放于

RESULT中

LEADX,RESULT

MOVAH,09H

结果以十进制显示

INT21;

ENDSTART;

3、将存储器中的十个字节型十六进制有符号数按从小到大的顺序排序并按十六进制显示出来

数据段定义

DATA1DB56H,0FFH,78H,82H,12H,0,95H,58H,0BCH,34H;

定义要比较的数

数据段定义结束

CODESEGMENT;

代码段定义

远程调用定义

LEASI,DATA1

MOVBH,9;

设置外循环比较次数

MOVDI,SI;

重新开始从第一位开始

MOVBL,BH;

设置内循环比较次数

MOVAH,[DI]

MOVAL,[DI+1]

CMPAH,AL;

比较DATA1中某前后两

位的大小

JNLGO3;

大于跳转

JMPGO4;

小于跳转

MOV[DI+1],AH

MOV[DI],AL;

大于则改变两者位置

跳转

INCDI;

将指针指向下一位数

DECBL

JNZGO2;

判断内循环是否完成

DECBH

JNZGO1;

判断外循环是否完成

MOVCX,10

DISP1:

MOVAL,[SI]

ANDAL,0F0H

RORAL,4

ADDAL,30H

CMPAL,'

9'

与‘9’判断

JBEDISP2

ADDAL,07H;

大于则加07H

DISP2:

MOVDL,AL;

小于直接显示

MOVAH,2

显示某一位数高位16

进制的ASCII码

MOVAL,[SI]

MOVBL,16

DIVBL

ADDAH,30H

CMPAH,'

JBEDISP3

ADDAH,07H

DISP3:

MOVDL,AH

显示某一位数低位16

MOVDL,'

H'

显示‘H’

'

显示‘’(空格)

LOOPDISP1;

逐个显示

远程调用返回

远程调用结束

五、实验运行结果

编译

连接

运行

连接

运行

六、实验中遇到的问题以及解决方法

在这几次的编程实验中,我遇到的问题主要有两个:

1.运行程序后所得到的结果不是我想要的结果

2.不懂得如何输出自己所得到的结果

其解决方法为:

1.通过使用ide86中的单步运行功能单步运行自己的程序,最终找到某一步运行时出现偏差,对那一步的语句进行改正。

2.这个没有其他的办法可以解决,只能先抄写课本上所给的程序,当出现自己想要的结果之后,再与同学讨论输出结果的语句,充分理解其内涵。

七、心得体会

通过此次的上机实验课,我懂得了如何使用ide86来调试自己编写的程序:

首先需要通过ide86来创建一个.ASM文件。

然后对其进行编译和连接。

当完成上述过程后,我们便可以使用DEBUG功能来对程序进行调试:

在该界面中,我们可以从View菜单中调出CPU栏,这样,我们就可以清楚地看到每一步运行时各个寄存器的状态了。

同时,通过使用ide86,我能够更好地理解课本中的许多程序,也能够自己编写一些程序。

总而言之,通过这些次的上机实验课,我学会了如何运用ide86来处理自己在理论课学习上遇到的各种问题。

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

当前位置:首页 > 工程科技 > 电力水利

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

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