文档库 最新最全的文档下载
当前位置:文档库 › 汇编报告三

汇编报告三

昆明理工大学信息工程与自动化学院学生实验报告

(2011 —2012 学年第一学期)

课程名称:汇编语言程序设计开课实验室:信自楼445 2011年 11月 25日

年级、专业、班计科092 学号200910405213 姓名王益荣成绩

实验项目名称子程序设计

指导教

万小容教

评语教师签名:

年月日

注:报告内容按实验须知中七点要求进行。

一、实验目的

1、掌握子程序的设计方法;

2、输入并汇编求N!程序;

3、观察并记录运行结果。

二、实验原理及基本技术路线图(方框原理图)

初始化区间上下限。然后把要找的数与边界元素(表中最小数和最大数)比较,若匹配则表示找到,显示查找0次。若不是边界元素,则在表中折半查找该值,若未找到则显示NO FOUND信息。若找到,在屏幕上显示找到的字符,并显示查找次数。所显示的第一位是输入的字符,第二位是找到的字符,第三和第四位是查找次数。

FACT 子程序

保存BP 内容,建立帧首地址

保存寄存器内容

取结果地址

取N

N=0?

恢复寄存器内容

N !存入结果单元

N !=N*(N-1)!

取(N-1)!

调用FCAT ,求(N-1)

(N-1)入栈

结果地址入栈

返回

N !=1

Y

N

主程序

结果地址入栈

结果地址入栈

结果地址入栈

返回

三、所用仪器、材料(设备名称、型号、规格等)计算机一台、先建立一个txt文件写好源程序代码。

四、实验方法、步骤

1、建立obj文件

2、链接obj文件且建立exe文件

3、u命令

4、d命令

5、r命令

6、g命令

7、t命令查看每一步运行结果

将AX的地址值124A赋给DS:

把BUF的值5赋给AX:

调用FACT的函数,并把MOV RESU,DX的偏移地址入栈:

将AX的值5和1比较:

结果大于1,跳转到NEXT处执行:

将AX的值5入栈,再将AX的值减1:

AX的值减1后变为4,从新调用FACT函数,并将POP AX的偏移地址入栈:

继续执行AX的值与1比较,大于则将AX的值入栈,并将AX的值减1后调用FACT,再将POP AX的偏移地址入栈的操作,直到AX的值变为1:

AX的值等于1后,执行MOV DX,1:

RET返回到最后一次入栈的POP AX处:

将AX的值2出栈后与1相乘,结果存在DX中:

返回到倒数第二次入栈的POP AX的偏移地址出,取出AX的与DL相乘后存入DX,直到入栈的所有AX的值出栈:

所有AX的出栈后,RET返回到第一次入栈的MOV RESU,DX的偏移地址处执行,存入最后的DX的值78H,程序结束:

一、实验过程原始记录(数据、图表、计算等)

STAG SEGMENT STACK 'S'

DW 64 DUP('ST')

STAG ENDS

DATA SEGMENT

BUF DW 5

RESU DW ?

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE, DS:DATA,SS:STAG

START: MOV AX,DATA

MOV DS,AX

MOV AX,BUF ;取出数值N送AX

CALL FACT ;调用子程序

MOV RESU,DX ;存储结果

MOV AH,4CH ;返回DOS

INT 21H

FACT PROC NEAR ;子程序定义开始

CMP AX,1 ;AX的值(N)和1比较

JA NEXT ;大于1,转NEXT

MOV DX,1 ;等于1,则其阶乘值为1

RET ;返回

NEXT: PUSH AX ;AX的值(N)压栈

DEC AX ;AX的值减1

CALL FACT

;递归调用子程序求(N?1)!送DX POP AX ;弹出值(N)送AX

MUL DL ;AX=AL*DL,即N!=N(N?1)!

MOV DX,AX ;存入DX

RET ;返回

FACT ENDP

;子程序定义结束

CODE ENDS

END START

一、实验结果、分析和结论(误差分析与数据处理、成果总结等。其中,绘制曲线

图时必须用计算纸)

结果出来了,虽然基本读懂程序但还是不太懂,希望在以后的学习中在掌握。

七、教师必须按照上述各项内容严格要求,认真批改和评定学生成绩。

相关文档