- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
汇编实验四--子程序设计.doc
福建农林大学东方学院信息工程类实验报告
系: 计算机系 专业: 电子信息工程 年级: 10
姓名: 廖少冰 学号: 1050302103 实验课程: 汇编语言
实验室号:_______ 实验设备号: 实验时间:
指导教师签字: 成绩:
实验四 子程序设计
1.实验目的和要求
1、学习子程序的编写,主子程序的调用
2、不同模块间程序的调用和调试
2.实验用的软硬件环境
实验的硬件环境是:
IBM—PC机及其兼容机
实验的软件环境是:
操作系统:DOS 2.0以上;调试程序:DEBUG.COM;文本编程程序:EDIT.EXE、WPS.EXE;宏汇编程序:MASM.EXE(或ASM .EXE);连接装配程序:LINK .EXE;交叉引用程序:CREF.EXE(可有可无)。
3.实验内容及实验数据记录
1、数据段中的3个字符,调用子程序将其逐个显示出来。子程序的功能是显示一个字符。单步执行,观察IP的变化
DATA SEGMENT
MAG DB ‘ABC’
DATA ENDS
CODE SEGMENT
ASSUME CS: CODE, DS: DATA
START: MOV AX, DATA
MOV DS, AX
MOV SI, 0
MOV CX, 3
LL: MOV DL, MAG[SI]
CALL MADD
INC SI
LOOP LL
MOV AH, 4CH
INT 21H
MADD PROC
MOV AH, 02H
INT 21H
RET
MADD ENDP
CODE ENDS
END START
2、阅读S31.ASM和S32.ASM两个模块中的程序,并分别汇编,然后连接成一个可执行文件S31.EXE。
具体步骤如下:
MASM S31.ASM(分别汇编)
MASM S32.ASM
LINK S31 S32 (将两个文件连接成为一个文件名为S31)
S31.EXE (运行)
3、编程:利用主程序调用子程序,比较BUF1和BUF2缓冲区中不相等的字符,并将不相等的字符显示出来。(也可以将找到的不相等字符逐个显示,用INT 21H的02功能调用)
4、编程:子程序搜索指定字符缓冲区中是否有n,如果有用y替代。调用子程序将BUF1,BUF2,BUF3中的n全部用y替代
4.操作方法及实验步骤
1-1)文本编辑程序保存V1.asm,编译并连接后debug调试V1.exe。跟踪如下
u反汇编观察CALL指令所在程序段偏移量为000F而且Call到哪显而易见是0019即Mov AH,02与源程序一致而RET指令偏移量为001D但从中我们并不能得知其具体执行过程。
1-2)t单步跟踪,图为执行CALL指令前各个寄存器的状态及查看SS:IP(d0769:0000)即栈顶内容为零。BP始终都为0实际上直到目前都没用到该堆栈。
1-3)继续单步执行,此时IP指向下一条指令CALL 0019。即执行该指令,结果如下可看到SP变为了FFFE
可知执行该指令的同时堆栈处于忙碌的变更中。之后IP直接指向CALL 所指0019。
d0769:fffe查看栈顶内容如下高向低读为0012
由之前的反汇编得知0012正是INC SI指令的偏移量,而该指令位于Call指令的下一条。
1-4)由此我们推断RET指令的作用就是弹出栈顶内容至IP来使得程序接着运行执行CALL指令后的程序。同样T单步执行观察如下
很明显执行RET后IP指向了0012。SP又指向了栈底。得以证实了CALL调用子程序是通过堆栈保护了现场进入子程序,之后再通过RET恢复到了原状态
2-1)单独阅读两个程序模块似乎毫无瓜葛,只知道S32.ASM模块中是实现的是二进制数转化为十六进制数并在显示器上显示的功能。S31.ASM实现的是通过子程序TRAN的调用完成对主程序着中获取的两位非压缩BCD数的二进制转化。按题目要求分别会变S31.asm和S32.asm如下
2-2)分别编辑程序存为S31.asm和S32.asm文件。进入masm目录。汇编连接如下均正常通过。
2-3)运行程序S31.e
您可能关注的文档
最近下载
- 探究感应电流的产生条件导学案.doc VIP
- 7的乘法口诀教学设计【省一等奖】.docx
- Hasselblad哈苏相机X2D II 100C User Manual - 简体中文用户手册说明书(中文版).pdf
- 中国计量大学803传感器技术1--2011--2020年考研初试真题.pdf VIP
- 参保单位派出证明.docx VIP
- 2025届安徽省“江南十校”高三联考英语试卷(含官方答案)原卷.pdf
- DB23_T(1621.10-1621.14)-2015:黑龙江省建设工程施工操作技术规程(三).pdf VIP
- 12YJ1工程用料做法.docx VIP
- 中考冲刺励志文案【90句】.pdf VIP
- 05175税收筹划自考课程.docx VIP
文档评论(0)