汇编实验二
实验二的实验内容有两个,一个是跟踪程序的运行,了解栈的使用;另一个是通过实验了解栈在设置的时候会有保存当前寄存器一系列值的操作。
第一个实验:将一段程序写入内存,逐条执行,根据指令执行后的结果填空。如图。
话不多说,直接敲代码,如图。(在写程序之前先把,0021:0~0021:7的数据改改,改成30H, 31H, 32H, 33H,34H,35H,36H,37H)
然后我们单步执行它。
从图中可以得到所有的答案,我把它填在之前图中。如图所示。
从中可以看出,ss 代表的就是栈的首地址,sp 代表的就是当前栈顶的位置。区间应该是 [ ss:0 ~ ss:sp+1 ]。(因为栈以字(两个字节)为单位,建议令栈的容量为偶数个字节。)
第二个实验是修改一块内存的内容,在一段程序中将其用作栈段,查看这块内存的内容,思考为什么。如图。(因为我把2000:0 ~ 2000:0 用作栈段,所以写完程序将其清零,以便后续观察。)
接下来,开始单步运行,每运行一次,查看一次内存。
发现有变化了。对比一下,能够找出7 8位置存的是 ax 寄存器的值,而sp 以后(图中 sp 为10),将存储 ip(图中为0130),cs(图中为073f)的值,至于01A3我并没有找到与之对应的,总之,在设置栈段的时候,会自动把当前 cs,ip 等的值保存起来,以便后续使用。
总结与体会:
通过这次实验,加深了我对栈的理解和使用,对栈段的设置有了更清楚的了解。