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

实验五

时间:2018-11-24 14:37:34      阅读:241      评论:0      收藏:0      [点我收藏+]

标签:代码   就是   存储   art   空间   程序   汇编   png   stack   

实验1:

一:将代码输入在6.txt中,将其保存在masm文件夹下,并改后缀为asm

技术分享图片

二:使用dosbox编译,调试该文件,连接完成后使用debug中的r命令查看寄存器中的值

技术分享图片

从中我发现,cs的值为076c,再使用u命令反汇编实验代码,用g命令运行,再用d命令查看data段中的值

技术分享图片

从中我发现,在CPU和程序执行前,data中的值保持不变,并且cs=076c,ss=0769,ds=075A。最重要的是,设程序加载后,code段的段地址为X,则data段的段地址为:X-2,stack的段地址为:X-1

实验2:

一:将代码输入在7.txt中,将其保存在masm文件夹下,并改后缀为asm

技术分享图片

二:在dosbox的debug环境下调试t1.exe,并用r查看各寄存器的值,u命令进行反汇编,g命令执行

技术分享图片

三:从中我发现,CPU执行程序,程序返回前,data段中的数据不变,且对于定义的段,如果段中的数据占N个字节,则程序加载后,这段实际占有的空间为:若N不满16个或为16字节则为一段,N满16但不满32也分配32字节,即 a=Nmod16,若a=0,则空间为 (N\16)*16,若a≠0,则空间为 (N\16+1)*16

实验3:

一:将代码输入在8.txt中,将其保存在masm文件夹下,并改后缀为asm

技术分享图片

二:在dosbox的debug环境下调试8.exe,用r命令查看各寄存器的值,u命令反汇编,g命令执行

技术分享图片

三:从中发现,CPU执行程序,程序返回前,data段中的数据不变,CPU执行程序,程序返回前,cs=076a,ss=076e,ds=076d。设程序加载后,code段的段地址为X,则data段的段地址为:X+3,stack的段地址为:X+4

实验4:如果将(1),(2),(3)题中的最后一条伪指令“end start”改为“end”(也就是说,不指明程序的入口个),则哪个程序仍然可以正确执行?请说明原因。

由实验结果可知:(1)和(2)不能正确执行,反汇编出来的代码并不是我们之前输入的,所以执行失败。而(3)的data和stack都在code之后,所以ip本来就为0,可以正确执行。

实验5:

一:将代码补全然后输入到1.asm中

技术分享图片

二:使用dosbox中的debug进行汇编并查看是否实现了数据的相加

技术分享图片

实验6:

一:将数据存入2.asm中

技术分享图片

二:在debug中使用d命令调试程序

技术分享图片

可是在程序运行前后并没有实现数据的相加和存储,问题目前还不清楚。

实验总结:

通过这次的实验,我学会了多个程序的运用和执行,了解到了汇编语言中的嵌套使用。在cpu执行前后,ds与ax的值是有一定的关联的。在实验中我也遇到了许多问题,希望在以后的学习中得到解决。

实验五

标签:代码   就是   存储   art   空间   程序   汇编   png   stack   

原文地址:https://www.cnblogs.com/daiyang/p/10011523.html

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