北理(bit)微机原理上机软件实验报告

更新时间:2023-09-09 22:47:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

微机原理软件编程

实验报告

班级: 学号: 姓名:

一、实验题目

1、IDE86集成开发环境的学习和运用

2、编写程序求出10个数中的最大值和最小值,并以单步形式观察如何求出最大值、最小值。

3、求1到100 的累加和,并用十进制形式将结果显示在屏幕上。要求实现数据显示,并返回DOS状态。

4、将存储器中的十个字节型十六进制有符号数按从小到大的顺序排序并按十六进制显示出来。(56H、0ffH、78H、82H、12H、0、95H、58H、0bcH、34H)

二、实验目的

1、学习并掌握IDE86集成开发环境的使用包括编辑、编译、链接、调试与运行等步骤 编辑:源程序的输入、修改。

编译:常见编译出现的语法错误的修改。

运行:运行、断点设置、单步运行、单步跟踪;观察寄存器、标志寄存器值;观察数据存储器中的数据。

2、完成所有题目,提高编程能力,加深对理论课的理解。

三、实验内容

1、文字叙述设计思路

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个数中的最大值和最小值

开始 开始

定义数据段代码段 定义数据段代码段

i=1 i=1

取第i个数和第i+1 取第i个数和第i+1个数进行比较 个数进行比较

N N [i]<[i+1]? [i]>[i+1]?

Y Y [i+1]=[i] [i+1]=[i]

i=i+1 i=i+1

N N 比较了 比较了

9次? 9次?

Y Y

最大数为[i+1] 最小数为[i+1]

结束 结束

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

开始

定义数据段代码段

AX=0,BX=0 加了 N 100次? BX=AX+BX

Y AX=AX+1

打印输出BX

结束

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

开始 BH=BH-1 定义数据段代码段 设定内循环外循环 次数BH=9,BL=9 N BH=0? BL=BH i=1 Y 打印输出数据段的 [i]>[i+1]? 所有内容 N

Y [i+1]=[i] i=i+1 结束 比较了 BL次? N Y 四、实验源程序

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

DATA SEGMENT ;定义数据段 DATA1 DB 12H,23H,34H,45H,56H,67H,78H,89H,9AH,0FDH;定义十个数 MAX DB 0

MIN DB 0

DATA ENDS ;数据段定义完毕 CODE SEGMENT ;定义代码段 ASSUME CS:CODE,DS:DATA

EXP1 PROC FAR ;设定为子函数,可以远 程调用

START:MOV AX,DATA

MOV DS,AX ;初始化DS

LEA SI,DATA1 ;将SI指向DATA1 LEA DI,MAX ;将DI指向MAX MOV AH,[SI]

MOV AL,[SI+1] ;取出DATA1的前两个数 CALL CASE1 ;调用子函数CASE1

MOV AH,0

MOV [DI],AX ;将最大数存入MAX中 LEA DI,MIN ;将DI指向MIN CALL CASE2 ;调用子函数CASE2 MOV AH,0

MOV [DI],AX ;将最小数存入MIN中 MOV AH,4CH

INT 21H ;返回DOS

RET ;远程调用返回 CASE1 PROC;子程序CASE1(查找最

MOV CX,10 GO1: MOV AH,[SI] CMP AL,AH JA GO2 MOV AL,AH;若AL小于AH则将AH

INC SI LOOP GO1 JMP END1 GO2: INC SI LOOP GO1 JMP END1 END1 :RET CASE1 ENDP

CASE2 PROC MOV CX,10 XOR AX,AX LEA SI,DATA1 MOV AL,[SI] GO3: MOV AH,[SI] CMP AL,AH JB GO4 MOV AL,AH INC SI 大数)

;设定比较次数

;取出SI所指定的数放

入AH

;比较AH与AL

;如果AL大于AH则跳转

到GO2

放到AL中

;修改指针,将指针指向

取DATA1中的下一个数

;循环比较10次 ;循环完成

;修改指针,将指针指向

取DATA1中的下一个数

;循环比较10次 ;循环完成

;循环完成,得到最大值

并存在AL了中返回主 程序

;子程序CASE1结束 ;子程序CASE1(查找最

小数)

;设定比较次数

;将AX清零,以便存数

比较

;SI指向DATA1 ;取出第一个数 ;取出第一个数

;比较DATA1中的两个数 ;小于则跳转 大于则把较小数放于AL ;修改指针指向下一位

本文来源:https://www.bwwdw.com/article/k4lh.html

Top