首页 > 编程语言 > 详细

实验4 汇编应用编程和c语言程序反汇编分析

时间:2020-12-17 20:02:53      阅读:43      评论:0      收藏:0      [点我收藏+]

实验任务1

编程:在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串‘welcome to masm!‘。
代码如下:
技术分享图片

 

 运行结果如下:

技术分享图片

实验任务2

编写子程序printStr,实现以指定颜色在屏幕上输出字符串。调用它,完成字符串输出。

使用任意文本编辑器,录入汇编源程序task2.asm。

技术分享图片

 

 

 运行如下:

技术分享图片
对源程序做如下修改:
把line3改为: str db ‘another try‘,0
把line12改为: mov al,4
再次汇编、运行程序,观察运行结果。
技术分享图片
问题1:line19-22, line36-39,这组对称使用的push、pop,这样用的目的是什么?
分析:暂存对应寄存器的内容,执行完子程序后可以进行恢复。
问题2:line30的功能是什么?
分析:将低位的字符信息和高位的颜色信息存储到显存中。

实验任务3

使用任意文本编辑器,录入汇编源程序task3.asm。
技术分享图片
阅读源代码,理解子程序num2str的汇编实现。

子任务1

对task3.asm进行汇编、链接,得到可执行程序后,在debug中使用u命令反汇编,使用g命令执行
到line15(程序退出之前),使用d命令查看数据段内容,观察是否把转换后的数字字符串‘1984‘存放
在数据段中str标号后面的单元。
技术分享图片

子任务2

对task3.asm源代码进行修改、完善,把task2.asm中用于输出以0结尾的字符串的子程序加进来,
实现对转换后的字符串进行输出。
 技术分享图片
把task3.asm源代码中,line3中整数改成0~2559之间的任意数值,运行测试,观察结果。
改成1324:
技术分享图片

实验任务4

使用任意文本编辑器,录入汇编源程序task4.asm。
技术分享图片

运行如下:

技术分享图片
问题1:line12-19实现的功能是?
分析:利用int 21h的1号子功能,判断是否为‘#’。
问题2:line21-27实现的功能是?
分析:利用int 21h的2号子功能,输出键盘输入的‘#’之前的内容。

实验任务5

在visual studio集成环境中,编写一个简单的包含有函数调用的c程序。
代码如下:
技术分享图片
设置断点并进行反汇编:

技术分享图片

技术分享图片

分析:高级语言中,参数传递和返回值在汇编语言中是通过栈,使用call指令操作,使用eax、ebp等寄存器来实现的。

(1)将函数参数入栈,第一个参数在栈顶,最后一个参数在栈底。

(2)执行call指令,调用该函数,进入函数的代码空间。

(3)函数返回到call指令的下一行,将堆栈指针加一个数值(入栈参数的总长度),恢复到步骤1之前的值。

实验4 汇编应用编程和c语言程序反汇编分析

原文:https://www.cnblogs.com/dajiaozi/p/14139860.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!