码迷,mamicode.com
首页 > 其他好文 > 详细

汇编实验五

时间:2018-11-24 16:41:08      阅读:212      评论:0      收藏:0      [点我收藏+]

标签:实验   模式   吐槽   汇编   star   怎么   解答   字节   重复执行   

汇编实验五

实验任务(1)

实验代码如下

技术分享图片

编译连接过程如下(后续实验便不再展示编译连接过程):

技术分享图片

技术分享图片

技术分享图片

对该查询执行反汇编操作

技术分享图片

技术分享图片

由u命令可知该程序最后执行与001d的位置,故要查看程序返回前data段中的数据应该用g命令定位到001d的位置,得出程序执行前的cs,ss,ds的值。

再通过d命令可以得知data段中的数据。

技术分享图片

书上习题如下:

技术分享图片

实验任务(2)

 代码如下:

技术分享图片

将其编译连接后进行反汇编。

技术分享图片

由此可知程序执行前cs,ss,ds的值。

再同一可知data的值。

技术分享图片

书上习题如下所示

技术分享图片

实验任务(3)

 实验代码如下

技术分享图片

对其执行编译连接。在无误的情况下进行反汇编。

技术分享图片

可知未进行返回前cs,ss,ds的地址。

再运用d命令可知data段中的数据如下。

技术分享图片

书上内容如下

技术分享图片

实验任务(4)

 对(1)(2)(3)的代码执行操作如图所示。

技术分享图片

技术分享图片

技术分享图片

对这三个代码重新编译连接。

技术分享图片

编译连接没有任何问题。

然后再对该代码执行反汇编来确认其是否能正常运行。

程序一

技术分享图片

程序二

技术分享图片

程序三

技术分享图片

由上图可知只有三顺利运行了,而其他两个代码却在一直重复执行add操作

首先,end start的作用是指明程序的入口,而end的作用是标志整个程序段的结束。故我认为代码一代码二之所以会不能运行是因为无法找到程序的入口,而三能运行的原因多半是其不需要一个具体的程序入口。代码一二三中都含有start部分。但代码三第一个代码为机器码,而一二不是。故可知其不需要入口的原因。也可得知在不指明入口的情况下程序从第一个机器码开始执行。

实验任务(5)

 代码如图所示

技术分享图片

在debug模式调试下的逻辑段c的8个字节

技术分享图片

由图可知该代码正确的实现了数据相加,故该代码正确。

不过在调试过程中我一开执行d命令的地址是具体的ds地址:0.然后运行时却引起了dosbox的崩溃,不知道为什么。难道是bug?

实验任务(6)

实验任务六代码如图所示

技术分享图片

对其进行编译连接。

技术分享图片

没有问题目前

执行前和执行后b的八个子单元信息如图所示

技术分享图片

不知道怎么回事但是总感觉自己弄错了什么。希望老师和大佬解答。代码完全无法像大佬敲的那样干净整洁是真的心塞,重点是也不对。。。

实验结论:这次实验任务是真的多(小声吐槽)。难度系数也不小。主旨是让我们理解和掌握多段汇编源程序对目标执行时内存的分配方式。前面还好,还能在翻书的情况下解决。但是最后一个是真的不行了。果然基础还是不够扎实。大概是自己对于逆序存放等操作还不够娴熟吧。(真的有一丢丢看不懂)

 

汇编实验五

标签:实验   模式   吐槽   汇编   star   怎么   解答   字节   重复执行   

原文地址:https://www.cnblogs.com/heyha/p/10011042.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!