实验二

学号:20171308150 姓名:江漪雯 班级:17计科4班

实验结论

(1)使用Debug,将下面的程序段写入内存,逐条执行,根据指令执行后的实际运行情况填空。

使用e命令将内存单元0021:0 ~0021:7连续8个字节数据修改为30H, 31H, 32H, 33H,34H,35H,36H,37H使用d命令查看。

然后执行a命令将下列代码写入内存

最后执行T命令对每一条指令执行逐步调试

 

 

MOV AX[0000]往后看。

 

 

Ax=3130

Ax=6462

Bx=3534

Bx=6C6A

如此下去圈出每一个SSSP的值,SS:SP代表修改的内存单元地址。

Sp=00FE ,内存地址:220000FE  内容:6462

Sp=00FC,内存地址220000FC,内容:6C6A

Sp=00FE , ax=6C6A

Sp=0100 , bx=6462

Sp=00FE,内存地址:2200:00FE,内容:3534

Sp=00FC,内存地址2200:00FC,内容:3736

 如下为我推算的过程结果:

与结果一致。

(2)仔细观察如下图中的实验过程,然后分析:为什么2000:0~2000:f中的内容会发生改变?

第一条指令执行的是将2000H送到AX寄存器中,AX变为2000,第二条指令执行的是将AX寄存器送给段寄存器SS中,这两步执行的操作就是将2000H送给段寄存器SS,即SS变为2000。

值得注意的是,在用T命令单步执行mov ss,ax前,ss=0BD2,sp=FFEE,而执行MOV SS,AX后,SS=2000为正常值,可SP变成了0010是怎么回事?能够将SP变成0010的只有MOV SP,10 这条指令。看来MOV SP,10一定得到了执行,而且这条指令一定是在MOV SS,AX之后执行的。

总结起来就是:在用T命令执行MOV SS,AX的指令后,它的下一条指令 MOV SP,10也紧接着执行了。一般情况下,用T命令只能执行一条指令并显示出CPU各个寄存器的状态和下一条要执行的指令,但用T命令执行 MOV SS,AX的时候,没有做到这一点。

这一现象是我们会在以后课程中要深入研究的内容:中断机制。现在我们只需知道:Debug 的T命令在执行修改寄存器SS的指令时,下一条指令也紧接着被执行。

总结与体会

本实验需要运用以前的基础知识,如-e,-d,-a,-t,-r,MOV,ADD 命令,这些都需要在之前熟练掌握。除此之外还需要运用新知识,即栈的概念,字数据在内存中的存储。

1.栈

(1)栈是一个逻辑概念。可以将一段内存空间当作栈来使用。

(2)栈顶的物理地址:SS:SP

          1)SS:栈段段寄存器,存放栈段的段地址。

          2)SP:栈指针寄存器,存放栈顶的偏移地址。

  物理地址:(SS)×16+SP 

(3)push和pop:

         1)入栈和出栈均以字为单元

         2)操作对象不能是常数

         3)pop段寄存器中,段寄存器不能是CS和SS。

入栈PUSH (寄存器)时 SP-2;出栈POP (寄存器)时 SP+2;

2.字数据在内存中的存储

(1)内存以字节为单位划分为若干个单元。

(2)字在储存时要用两个地址连续的内存单元来存放。

(3)字数据的存-取原则:高-高,低-低。即小端法,低位字节存放在低地址内存单元,高位字节存放在高地址内存单元,并且取低地址内存单元地址作为字数据地址。

(4)在内存和寄存器之间传送字型数据时,高地址单元和高8位寄存器、低地址单元和低8为寄存器相对应。

除此之外,就需要留意的一点:Debug 的T命令在执行修改寄存器SS的指令时,下一条指令也紧接着被执行。

 

 

 

 

 

 

posted @ 2018-11-16 16:49  江小雯  阅读(230)  评论(1编辑  收藏  举报