子程序设计

2018-12-08 19:29

计算机与信息工程学院实验报告

计算机与信息工程学院实验报告

姓 名 班 级 同 组 实验者 课 程微机与接口 名 称 主 讲 教 师 实验心得: 学 号 联 系 电 话 实验室 名 称 实 验 实验三 序 号 辅 导 教 师 专 业 Email 实 验 日 期 实 验子程序设计 项 目 查表程序设计 指 导 教 师 学生签名: 2011 年 11月 20 日 成绩评定及教师评语: 成绩: 教师签名: 年 月 日

·1·

计算机与信息工程学院实验报告

2.7 子程序设计实验

一、 实验内容

80X86指令系统提供子程序的基本指令,编写程序实现循环并运行程序,观察结果。 二、 实验目的及要求

1. 学习子程序的定义和调用方法。

2. 掌握子程序、子程序的嵌套、递归子程序的结构。 3. 掌握子程序的程序设计及调试方法。

三、 实验环境

PC机一台,TD-PITE实验装置或TD-PITC实验装置一套。 四、 实验方法过程(步骤)

.1、80X86指令系统提供了实现子程序的基本指令,编写程序。 2、加载程序并编译程序。

3、调试通过后全速运行并观察实验结果。 4、编写实验报告。 五、 算法描述

1. 求无符号字节序列中的最大值和最小值

设有一字节序列,其存储首地址为3000H,字节数为 08H。利用子程序的方法编程求出该序列中的最大值和最小值。

图1.求和

·2·

计算机与信息工程学院实验报告

图1.求无符号字节序列中的最大值和最小值

2. 求N!

利用子程序的嵌套和子程序的递归调用,实现N!的运算。

定义两个变量N及RESULT,RESULT中存放N!的计算结果,N在00H~08H之间取值。

六、 源程序清单

1. 求无符号字节序列中的最大值和最小值 SSTACK SEGMENT STACK DW 64 DUP(?) SSTACK ENDS CODE SEGMENT ASSUME CS:CODE START: MOV AX, 0000H MOV DS, AX

MOV SI, 3000H ; 数据区首址 MOV CX, 0008H

CALL BRANCH ; 调用子程序 HERE: JMP HERE

BRANCH PROC NEAR ; 子程序,返回参数在AX中 JCXZ A4 PUSH SI PUSH CX PUSH BX MOV BH, [SI] MOV BL, BH CLD A1: LODSB CMP AL, BH JBE A2 MOV BH, AL JMP A3 A2: CMP AL, BL JAE A3 MOV BL, AL A3: LOOP A1 MOV AX, BX POP BX

·3·

计算机与信息工程学院实验报告

POP CX POP SI A4: RET BRANCH ENDP CODE ENDS

END START 2. 求N!

SSTACK SEGMENT STACK DW 64 DUP(?) SSTACK ENDS

PUBLIC N, RESULT ;设置全局变量 DATA SEGMENT

N DB ? ;N的范围在1~8之间 RESULT DW ? ;N!的结果存于该变量中 DATA ENDS CODE SEGMENT

ASSUME CS:CODE, DS:DATA START:MOV AX, DATA MOV DS, AX

MOV AX, OFFSET RESULT PUSH AX MOV AL, N MOV AH, 00H PUSH AX MOV DI, 0000H CALL branch

JMP START ;在此处设置断点,观察变量 ;===子程序=== branch: PUSH BP MOV BP,SP PUSH BX PUSH AX

MOV BX,[BP+DI+06H] MOV AX,[BP+DI+04H] CMP AX,0000H JZ A1 PUSH BX DEC AX PUSH AX ·4·

计算机与信息工程学院实验报告

CALL branch ;递归调用 MOV BX,[BP+DI+06H] MOV AX,[BX] PUSH BX

MOV BX,[BP+DI+04H] MUL BX POP BX JMP A2 A1: MOV AX, 0001H

A2: MOV RESULT, AX ;结果存入RESULT中 POP AX POP BX POP BP RET 0004H CODE ENDS END START

七、 运行结果及分析

1. 求无符号字节序列中的最大值和最小值

结果AX为F904,其中AH 中为最大值,AL 中为最小值。 调试窗口里输入E 0000:3000命令,然后输入 3000=D9(数据个数) 3001=07 3002=8B 3003=C5 3004=EB 3005=04 3006=90 3007=F9

运行程序运行程序,由程序代码可知结果在解析式的值存入AX中,运行后直接在寄存器查看窗口就可以查看AX的值. 程序使用BH和BL暂存最大值和最小值,开始时初始化成首字节的内容,然后进入循环操作,从字节序列中逐个取出一个字节的内容与BH和BL相比较,若取出的字节内容比BH的内容大或比BL的内容小,则修改它们。当循环操作结束时,将BH送AH,将BL送AL,作为返回值,同时恢复BX原先的内容。

2. 求N!

修改N 值,N 在00~08H 之间取值,当N从00~08H变化时,可得阶乘表。

程序中N的阶乘,用一递归子程序来实现,每次递归调用时将调用参数减1,即求(N-1)的阶乘,并且当调用参数为0时停止递归调用,且0!=1,最后将每次调用的参数相乘得到最后结果。因每次递归调用时参数都送入堆栈,当N为0而程序开始返回时,按嵌套的方式逐层取出相应的调用参数。

根据实验要求,改变变量N的值,运行程序,观察RESULT的值。

·5·


子程序设计.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:机关办公室工作失误案例

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: