汇编语言(实现对数据的最大最小平均值计算)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验报告

课程名称微机原理与汇编语言

学院计算机工程学院

班级 11计3Z 学号 ******** 姓名王祖陆

2013年05月27日

设计一个汇编语言程序,具体内容如下:

一、功能:

(1)从键盘输入N个带符号数(N的值也从键盘输入,N<=65535);带符号数为16位二进制数范围);

(2)找出这N个数中的最大值和最小值,并且显示出来;

(3)计算这N个数的平均值,并且显示出来。

二、程序分析:

(1)需要对程序进行N的值的输入,来确定循环的次数,决定了循环的次数就可以确定数组元素的个数,为下一步数组元素的值的输入做

准备。

(2)由(1)中确定N的值来决定循环的次数,每一次的循环,指针向后移两位,因为我们定义的时候是字大小,占用2个字节的空间,

每一次的循环调用一次输入函数,以确定数组中每个元素的值。

(3)调用清屏语句将屏幕上的输入的痕迹清除,同时用循环调用输出函数,将用户之前输入的值按一定的格式输出到屏幕上。

(4)判断最大数最小数,用循环遍历数组中的每一个元素,同时与最大数最小数进行比较,如果该数比最大数大,则将其保存到最大数中,

如果该数比最小数小,则将其保存到最小数中。(注:最大数和最

小数需要开辟内存空间来保存,同时在进入循环之前应该给其一个

值,这里我给的是数组中第一个元素的值)

(5)计算平均数,同样用循环将其累加的和除以N的值即得到最终的结

三、程序相关说明:

(1)程序中,COUNT保存的是循环的次数,即数组的个数N

(2)A RRAY为定义的数组,MAXAY,MINAY分别对应的是最大数,最小数,WTEMP为临时变量

(3)M ESS系列保存的内容为输入输出时的提示信息无实际作用

(4)I NPUT子函数为输入N的值,READ函数为输入一个-32768~+32767的数,WRITE为输出函数,即将数组中某一元素的值输出,IFMAX函数为判断最小值最大值函数,MEAN函数为求平均值函数

(5)D PCRLF、NDPCRLF子函数为输出格式控制函数

四、程序流程图

主程序流程图 INPUT函数流程图

N

READ函数流程图 WRITE函数流程图

IFMAX函数流程图 MEAN函数流程图

五、源程序列表文件内容:

Microsoft (R) Macro Assembler Version 5.00 5/27/13 18:44:33

Page 1-1

0000 DSEG SEGMENT ;数据段 0000 50 6C 65 61 73 65 20 MESS1 DB 'Please input N "N<=65535":','$

'

69 6E 70 75 74 20 4E

20 22 4E 3C 3D 36 35

35 33 35 22 3A 24

001B 50 6C 65 61 73 65 20 MESS2 DB 'Please input a number:','$'

69 6E 70 75 74 20 61

20 6E 75 6D 62 65 72

3A 24

0032 59 6F 75 72 20 69 6E MESS3 DB 'Your input is as follows:',0AH

,0DH,'$'

70 75 74 20 69 73 20

61 73 20 66 6F 6C 6C

6F 77 73 3A 0A 0D 24

004E 0A 0D 4D 41 58 3A 24 MESS4 DB 0AH,0DH,'MAX:','$'

0055 0A 0D 4D 49 4E 3A 24 MESS5 DB 0AH,0DH,'MIN:','$'

005C 0A 0D 41 56 45 52 41 MESS6 DB 0AH,0DH,'AVERAGE:','$',0AH,0DH

47 45 3A 24 0A 0D

0069 03E8[ ARRAY DW 1000 DUP(0)

0000

]

0839 COUNT DW ?

083B WTEMP DW ?

083D MAXAY DW ?

083F MINAY DW ?

0841 DSEG ENDS

0000 SSEG SEGMENT STACK ;堆栈段 0000 0080[ DB 80H DUP(0)

00

]

0080 SSEG ENDS

0000 CSEG SEGMENT ;代码段ASSUME DS:DSEG,SS:SSEG,CS:CSEG

0000 B8 ---- R START: MOV AX,DSEG

0003 8E D8 MOV DS,AX

0005 BA 0000 R MOV DX,OFFSET MESS1

0008 B4 09 MOV AH,09H

000A CD 21 INT 21H

000C E8 009F R CALL INPUT ;调用INPUT函数 000F 8B 0E 0839 R MOV CX,COUNT

0013 BB 0069 R MOV BX,OFFSET ARRAY

0016 BA 001B R AGAIN1: MOV DX,OFFSET MESS2

0019 B4 09 MOV AH,9H

001B CD 21 INT 21H

001D E8 00AB R CALL READ ;调用READ函数

0020 89 07 MOV [BX],AX

Microsoft (R) Macro Assembler Version 5.00 5/27/13 18:44:33

Page 1-2

0022 83 C3 02 ADD BX,2

0025 E8 0185 R CALL DPCRLF ;循环COUNT次

0028 E2 EC LOOP AGAIN1

002A B0 03 MOV AL,3H

002C CD 10 INT 10H

002E 8B 0E 0839 R MOV CX,COUNT

0032 BB 0069 R MOV BX,OFFSET ARRAY

0035 BA 0032 R MOV DX,OFFSET MESS3

0038 B4 09 MOV AH,9H

003A CD 21 INT 21H

003C 8B 07 AGAIN2: MOV AX,[BX]

003E A3 083B R MOV WTEMP,AX

0041 E8 00EC R CALL WRITE ;调用WRITE函数 0044 83 C3 02 ADD BX,2

0047 E8 0196 R CALL NDPCRLF ;调用NDPCRLE函数 004A E2 F0 LOOP AGAIN2 ;执行COUNT次循环 004C B4 02 MOV AH,2

004E B2 0D MOV DL,0DH

0050 CD 21 INT 21H

0052 B2 0A MOV DL,0AH

0054 CD 21 INT 21H

相关文档
最新文档