汇编实验五

汇编实验五

实验任务(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的八个子单元信息如图所示

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

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

 

posted on 2018-11-24 15:26  宠溺  阅读(119)  评论(0编辑  收藏  举报

导航