- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
汇编语言实验报告
学院:
***
班级:
***
姓名:
***
学号:
***
指导老师:
**
目 录
TOC \o 1-3 \h \z \u 实验一 斐波那契数列 3
1. 设计要求 3
2. 设计思想和实施方案论述 3
3. 课程设计中遇到的问题及解决方案 5
4. 程序流程图 6
5. 源程序及注释 6
实验二 统计学生成绩 11
1. 设计要求 11
2. 设计思想和实施方案论述 11
3. 典型程序模块及典型编程技巧分析 11
4. 课程设计中遇到的问题及解决方法 12
5. 程序流程图,程序清单和程序注释 12
6. 程序清单和注释 13
收获与体会 16
参考书籍: 16
实验一 斐波那契数列
设计要求
用递归的方法求斐波那契的第24项(N=24),并将结果用十进制显示出来
输出FIB(24)的值
设计思想和实施方案论述
FIB函数采用子程序递归调用方法,实现求斐波那契数列
先写出高级语言中的斐波那契递归函数:
Int fib(int N)
{
If(N==1||N==0) result=1;
Else result=fib(n-1)+fib(n-2);
Return result;
}
其函数为高级语言的形式,其中result=fib(n-1)+fib(n-2)隐含了几个操作可把它展开为:
N=N-1;注意到这里的N是形参(局部变量)与调用程序的实参不是同一个变量
Int a=fib(N)
N=N-1
Int b=fib(N)
Result = a+b;
由此可知几个重要实现地方:
保存现场:N在一个fib函数里面是局部变量,当系统调用子程序时需要保存这个局部变量,在返回时需要恢复:
SUBT PROC NEAR
PUSH AX
PUSH BX
…….
…….
POP BX
POP AX
SUBT ENDP; 采用保存恢复寄存器的形式
参数传递:其中的N在调用fib传参时是作为实参,在被调用函数中还需要被使用,这是参数的传递,这里采用通过数据区传递参数(同全局变量)
返回值:最后的result在高级语言中是通过将result赋给一个临时变量(调用该函数的程序)然后释放result这个局部变量,在本程序中采用寄存器直接传递的方法,所以在Fib函数中将result赋给一个寄存器,然后不保存它,让其传递到上层调用函数中去。
课程设计中遇到的问题及解决方案
遇到的问题
在编写斐波那契函数的过程中主要遇到了问题是保存现场的问题,在高级语言中,对子程序调用时,系统会自动为我们保存当前程序的现场指令地址,局部变量。而在汇编中除了现场指令地址保存外,其他的工作都必须我们自己完成,所以在对子程序调用时,怎么保存当前的局部变量,怎么传递参数到将要调用的函数中去使用,都是很难理顺思路的地方。
解决方案
第一:明确哪些是局部变量,在调用完子程序返回时要恢复的。
第二:局部变量作为实参,与被调用的子程序中的形参的区别。
第三:确保有压栈就必须对应出栈,且系统的中断指令地址的保存与我们使用的栈是同一个栈
解决方案在上面已经写过,就没有在复述了
程序流程图
………
……….
……….
N
N-1
N-2
……….
2
1
Fib(2)
Fib(1)
Fib(N-2)
Fib(N-1)
Fib(N)
源程序及注释
DATAS SEGMENT
message1 db input the number ,$
NUM=18h ;修改此处获得第N项斐波那契数列值
N dw 0 ;用于传参的N
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
Main proc far
START:
push ds
sub ax,ax
push ax
mov ax,DATAS
mov ds,ax
mov byte ptr N,NUM
call FIB ;调用Fib子程序
mov dx,ax
;call Output_CTLF
call PrintOX ;将十进制转换为十六进制输出
mov ah,1
int 21h ;等待退出屏幕
ret
Main endp
; output CTLF
Output_CTLF proc Near
push ax
push dx
mov ah,02h
mov dl,0dh
int 21h
mov dl,0ah
int 21h
pop dx
您可能关注的文档
最近下载
- 《贵州省建筑工程2016版计价》.PDF
- 2025年教师招聘考试教育学心理学试题真题答案.doc VIP
- 6. 推动形成全面对外开放新局面(精品课件)-【中职专用】高一思想政治《中国特色社会主义》同步课堂精品课件(高教版2023·基础模块).pptx VIP
- 小学英语课堂中自制教具的制作及使用的研究.pptx VIP
- 呼吸系统疾病与营养介绍.ppt VIP
- 修改密码步骤.docx VIP
- NORDICTRACK ® COMMERCIAL 1750型跑步机使用说明.pdf
- (必会)公路水运工程试验检测师《公共基础》近年考试真题题库汇总(300题).docx VIP
- 南昌市公安局2025年下半年招聘省级留置 看护辅警【320人】笔试备考试题及答案解析.docx VIP
- 2025黑龙江佳木斯市卫生健康委事业单位公开招聘编外聘用工作人员162人笔试备考试题及答案解析.docx VIP
文档评论(0)