实验二

实验前应了解的是d命令的一些格式
1)

-r ds
:1000
-d ds:0   //查看从1000:0开始的内存区间中的内容

2)

-r ds
:1000
-d ds:10 18//查看1000:10-1000:18中的内容
-d cs:0  //查看当前代码段中的指令代码
-d ss:0    //查看当前栈段中的内容

实验任务:
1)



代码含义:

mov ax,ffff
mov ds,ax

将ds指向了ffff段内存,即数据段数ffffH:00开始的内存单元

mov ax,2200
mov ss,ax
mov sp,0100

建立栈结构,ss指向2200H段内存,初始化栈顶指针是100H

mov ax,[0]            //;ax=C0EA
add,ax,[2]             //;ax=C0FC
mov bx,[4]            //;bx=30F0
add bx,[6]             //;bx=6021

参看电脑上显示出来的ds段内存可得到以上答案

push ax   //将ax压栈
push bx   //将bx压栈
pop ax     //栈顶元素弹出送入ax
pop bx     //栈顶元素弹出送入bx
push [4]
push [6]

将内存单元【4】【6】压栈

2)分析:在2000H的内存段创建了一个栈,ss:sp指向了栈顶2000:10H,给ax赋值3123后压入栈中,再给ax赋值3366后压入栈中。
刚开始没有执行代码时d命令观察2000:00内存时都是00,执行t命令后这段内存就多了一些数据,我个人认为应该是因为t命令是单步跟踪,每一步之间中断时会产生一些寄存器变量,cpu将这些变量自动压入了栈中导致的(毕竟sp的值是正确的,所以应该是这个原因啦)

posted @ 2018-10-25 22:23  雪卿狂  阅读(169)  评论(1编辑  收藏  举报