- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验5 子程序设计
实验目的:理解堆栈的工作原理,熟练掌握子程序的设计方法,熟悉子程序相关指令的使用方法。
实验要求:按照要求编写程序,调试运行。
实验内容:
上机调试下面的代码,单步执行,观察ESP寄存器和EIP寄存器内容的变化情况。观察esp指示的内存单元的内容。画出堆栈的变化过程,标注ESP寄存器的变化情况。
.386 ;必须是第一条非注释语句,说明这是一个32位应用程序
.model flat, stdcall ;定义程序的存储模式(32位应用程序中必须采用flat)
.code ;定义代码段
start: ;程序起始点
push 100
call subproc;程序代码
pop eax
ret ;程序结束点,返回WINDOWS
subproc proc
ret
subproc endp
end start ;汇编结束
2、编写完整的32位应用程序:设计子程序完成下面的功能, 在主程序中先调用ReadUDec输入数据,然后调用自己编写的子程序,将输入的数据转换为对应的可显示字符串的形式,最后调用WriteString显示转换后的字符串。要求完成的子程序可以在(1)-(4)中任选一题,(5)-(8)中任选一题。
(1)编写子程序将EAX的内容转换为二进制字符串
(2)编写子程序将双字补码转换为十六进制字符串
(3)编写子程序将EAX的内容转换为无符号十进制字符串
(4)编写子程序将双字补码转换为有符号十进制字符串,负数字符串以“-“引导。
(5)编写子程序将二进制字符串表示的数据存入EAX寄存器
(6)编写子程序将十六进制字符串表示的数据存入EAX寄存器
(7)编写子程序将十进制字符串表示的无符号数据存入EAX寄存器
(8)编写子程序将十进制字符串表示的有符号数据存入EAX寄存器
程序代码如下:
.386
.model flat,stdcall
include \masm32\include\io32.inc
.stack
.data
string dword ?
.code
start:
ReadUDecDword string
mov eax,string
call sub1proc
call sub2proc
ret
sub1proc proc
WriteBinDword eax
WriteCrlf
sub1proc endp
sub2proc proc
mov eax,string
WriteUDecDword eax
sub2proc endp
end start
运行结果:
3、利用多模块设计方法实现上面程序的功能,建立子程序库,并编写主程序调用子程序库中的函数。
提示: (1) 编写子程序模块完成上题中的子程序功能,汇编生成目标文件。
将子程序目标文件组成库文件:\masm32\bin\lib 目标文件名 /out:库文件名
或者\masm32\bin\link -lib 目标文件名 /out:库文件名
编写主程序模块: 用extern声明外部子程序,用includelib包含前面生成的库文件,在主程序中先调用ReadUDec输入数据,然后调用自己编写的子程序,将输入的数据转换为对应的可显示字符串的形式,最后调用WriteString显示转换后的字符串。汇编连接生成可执行文件。
三个文件如下:
.386
.model flat, stdcall
include \masm32\include\io32.inc
includelib subc2.lib
Subproc1 proto stdcall
Subproc2 proto stdcall
.data
promp1 byte Result of subproc1: ,0
promp2 byte Result of subproc2: ,0
.code
start:
WriteString promp1
invoke Subproc1
WriteCrlf
WriteString promp2
invoke Subproc2
ret
end start
.386
.model flat, stdcall
include \masm32\include\io32.inc
public Subproc1
.data
string byte 32 dup(?),0
.code
Subproc1 proc
mov ecx,32
mov ebx,offset string
again: shl eax,1
jc next1
mov byte ptr [ebx],0
jmp next
next1: mov byte ptr [ebx],1
next: inc ebx
dec ecx
jnz again
wr
您可能关注的文档
最近下载
- 2025年初二政治培优补差工作计划(通用9篇).pdf VIP
- 2023年最新资料员考试题库附参考答案【精练】.docx
- 国内长视频行业市场分析.pdf VIP
- 中国医科大学《护理研究(本科)》在线作业.docx VIP
- 2025高校辅导员素质能力大赛模拟试卷附答案.docx VIP
- 2010款捷达全车电路图.pdf VIP
- 家用新能源汽车充电桩安装施工方案.pdf VIP
- 5eDnD_凡戴尔的失落矿坑_模组_中译(二校).pdf VIP
- 2025至2030中国长视频行业市场深度调研及发展趋势和投资前景预测报告.docx VIP
- 政府车队公务车辆定点维修采购项目招标文件参考修改模板范本.doc VIP
原创力文档


文档评论(0)