北京理工大学微机原理实验报告.doc

上传人:b****2 文档编号:1259138 上传时间:2022-10-19 格式:DOC 页数:13 大小:614KB
下载 相关 举报
北京理工大学微机原理实验报告.doc_第1页
第1页 / 共13页
北京理工大学微机原理实验报告.doc_第2页
第2页 / 共13页
北京理工大学微机原理实验报告.doc_第3页
第3页 / 共13页
北京理工大学微机原理实验报告.doc_第4页
第4页 / 共13页
北京理工大学微机原理实验报告.doc_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

北京理工大学微机原理实验报告.doc

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

北京理工大学微机原理实验报告.doc

微机原理与接口技术

实验报告

实验内容:

汇编语言程序设计实验

组别:

12

姓名:

班级:

学号:

一、实验目的

1、熟悉IDE86集成开发环境的使用。

 

2、通过编程、上机调试,进一步理解汇编语言的设计思路与执行过程。

 

3、熟悉DOS命令调用,以达到输入输出、返回DOS系统等目的。

4、掌握利用汇编实现求和与求最值的方法。

5、掌握利用汇编实现数制转换的方法。

 

6、巩固理论知识,锻炼动手编程,独立思考的能力。

二、实验内容(具体内容)

1、求从TABLE开始的10个无符号字节数的和,并将结果放在SUM字单元中。

并查看前5个,前8个数之和以及各寄存器和内存的状态。

2、在1的基础上修改程序,求出10个数中的最大值和最小值,最后将最大最小值分别赋给MAX及MIN。

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

要求实现数据显示,并返回DOS状态。

三、实验方法

1、设计思路

(1)实验1的设计思路:

先将10个要相加的数存在以TABLE为首的10个连续的存储单元中,然后利用循环结构依次取出数值放在AL中并累加,若有进位则加到AH中直至循环10次累加结束,将累加的结果放在SUM中并返回DOS状态。

(2)实验2的设计思路:

先将10个要比较的数放在以TABLE为首的10个连续的存储单元中。

将第一个数首先赋给AL和AH(分别存储相对最小和最大值)在利用LOOP循环结构,依次和下面的数进行比较,每次把相对的最大值与最小值存储到AH和AL中直至循环9次比较结束,将AH和AL里面的最大值与最小值赋给MAX和MIN,返回DOS状态

(3)实验3的设计思路:

先在内存中定义COUNT=100,表示1-100求和,若相求1-n的和并显示只需COUNT的值为n即可,同时定义一块以DNUM为首地址的数据区用于存储累加和的十进制数对应的ASCII码。

先利用AX和LOOP求出1-COUNT的累加和存在AX中;在进行数值转化,AX依次除10取余数保存,将16进制数转化为10进制ASCII码值并存在DUNM中。

最后在屏幕上显示并返回DOS状态。

2程序流程图

实验一、二和三的流程图分别如图1、图2和图3所示

数据段地址放入

相应的段寄存器

SI指向TABLE

AX清零

设置循环次数,CX=10

把AL的值赋给SUM

CX=0?

将SI指向的

数加到AL中

若有进位加到AH中

SI加1指向下一个数

CX减1

返回DOS状态

结束

定义数据段

开始

N

Y

图110个数求和流程图

图2求10个数最大最小值流程图

返回DOS状态

结束

数据段地址放入

相应的段寄存器

SI指向TABLE

第一个数送入AL和AH

设置循环次数,CX=9

把AL的值赋给MIN

CX=0?

SI指向的值与AL比较,较小的值存入AL中

SI=SI+1

SI指向的值与AH比较,较大的值存入AH中

CX减1

定义数据段

开始

N

Y

把AH的值赋给MAX

AX的值赋给SUM

数据段地址放入

相应的段寄存器

COUNT=100,AX=0

累加次数CX=COUNT

累加:

AX=AX+CX

定义数据段

开始

N

Y

CX=0?

CX=CX-1

DX清零

循环次数CX=4

屏幕显示数字和

返回DOS状态

结束

CX=0?

DX,AX构成的数除10取余,余数保存在DX

将余数加上30H保存在DUNM中,CX减1

Y

N

图31-100求和并在屏幕显示流程图

四、实验源程序(必要的文字注释)

实验一:

;求10个无符号字节数的和,结果存在SUM中

DATASEGMENT;定义数据段

TABLEDB12H,23H,34H,45H,56H;10个加数

DB67H,78H,89H,9AH,0FDH

SUMDW?

DATAENDS

;

CODESEGMENT;定义代码段

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX;初始化DS

LEASI,TABLE;SI指向TABLE

MOVCX,10;循环次数为10

XORAX,AX;AX清零

NEXT:

ADDAL,[SI];把一个数加到AX中去

ADCAH,0;若有进位AH加1

INCSI;SI指向下一个数

LOOPNEXT;循环相加

MOVSUM,AX;循环结束将结果保存到SUM中

MOVAH,4CH;返回DOS状态

INT21H

CODEENDS;代码段结束

ENDSTART;汇编结束,起始地址为START

实验二:

;求出10个数中的最大值和最小值。

DATASEGMENT

TABLE1DB12H,23H,34H,45H,56H;十个数据

DB67H,78H,89H,9AH,0FDH

MINDB?

;最小值

MAXDB?

;最大值

DATAENDS

;

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,ES:

DATA

START:

MOVAX,DATA

MOVDS,AX ;数据段段地址送入DS

MOVES,AX;附加数据段段地址送入ES

LEASI,TABLE1

MOVCX,9;比较次数,一共9次

MOVAL,[SI];把第一个数送入AL,把最小数存在AL中

MOVAH,[SI];把第一个数送入AH,把最大数存在AH中

NEXT:

INCSI

CMPAL,[SI];比较AL中的数和下一个数的大小

JCGOON;如果AL中的数小转到GOON,继续执行

MOVAL,[SI];如果AL中的数大,将小的数存入AL

GOON:

CMPAH,[SI];比较AH中的数和下一个数的大小

JNCCONTU;如果AH中的数大转到CONTU,去下一次循环

MOVAH,[SI];如果AH中的数大,将大的数存入AH

CONTU:

LOOPNEXT;继续循环直至全部比较完毕

MOVMAX,AH;将最大的数存入MAX中

MOVMIN,AL;将最小的数存入MIN中

MOVAH,4CH;返回DOS状态

INT21H

CODEENDS;代码段结束

ENDSTART;汇编结束,起始地址为START

实验三:

;1-100求和并用十进制在品目上显示,程序结束返回DOS状态

DATASEGMENT ;数据段

SUMDW0;1-100的和

DNUMDB'0000',0DH,0AH,'$';存储1-100和的十进制ASCII码字符串

COUNTDW100;求和的数目100个,当需要求1-n的数字和时只

;需修改100为所需要的n即可

DATAENDS

;

SSEGSEGMENT;堆栈段

DW32DUP(?

SSEGENDS

;

CODESEGMENT ;代码段

ASSUMECS:

CODE,DS:

DATA,ES:

DATA

START:

MOVAX,DATA

MOVDS,AX ;数据段的段地址送入DS

MOVAX,SSEG

MOVSS,AX;堆栈段的段地址送入SS

CALLSUMM;求1-100的数据和,结果存入AX中

MOVSUM,AX;和存入SUM中

CALLDISP;将十六进制数转化相应的十进制A

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

当前位置:首页 > 工程科技 > 材料科学

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

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