子程序设计报告.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
子程序设计报告

实验三 子程序设计 实验目的:理解堆栈的工作原理,熟练掌握子程序的设计方法,熟悉子程序相关指令的使用方法。 实验要求:按照要求编写程序,调试运行。 实验内容: 上机调试下面的代码,单步执行,观察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

文档评论(0)

kakaxi + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档