从零开始学汇编

从零开始学汇编

5 (96人评价)
  • 课时:(62)

  • 学员:(2518)

  • 浏览:(147959)

  • 加入课程

第三章 寄存器(内存访问)05的笔记

相关课时: 笔记详情:

POP AX

1.将SS:SP指向的内存单元处的数据送入AX中;2.SP=Sp+2, SS:SP指向当前栈顶下面的单元,以当前栈顶下面的单元为新的栈顶。

注意:指针往下指了,当数据还是在那个字单元里面的,只是复制到AX寄存器里而已。

 

栈顶越界的问题:

SS和SP只记录了栈顶的地址,依靠SS和SP可以保证在入栈和出栈的找到栈顶。

可是,如何能够保证在入栈。出栈时,栈顶不会超出栈空间呢?

当栈满的时候再使用PUSH指令入栈,栈空的时候再使用POP指令出栈,都将发生栈顶超界的问题。

栈顶超界是危险的:因为我们既然将一段空间安排为栈,那么在栈空间之外的空间里很可能存放了具有其他用途的数据,代码等。这些数据,代码可能是我们自己的程序中的,也可能是别的程序中的。(毕竟一个计算机系统并不是只有我们自己的程序在运行)

 

8086CPU的工作原理:只考虑当前的情况:1.当前栈顶在何处

2.当前要执行的指令是哪一条

结论:我们在编程的时候要自己操心栈顶超界的问题,要根据可能用到的最大栈空间,来安排栈的大小,防止入栈的数据太多而导致的超界;

执行出栈操作的时候也要注意,以防栈空的时候继续出栈而导致的超界。

PUSH和POP指令是可以在寄存器和内存之间传送数据的 栈与内存:栈空间当然也是内存空间的一部分,它只是一段可以以一种特殊的方式进行访问的内存空间。 (1)就是前面的PUSH和POP与通用寄存器进行交互 (2)PUSH和POP与段寄存器进行交互 PUSH 段寄存器:将一个段寄存器中的数据入栈。 POP段寄存器:出栈,用一个段寄存器接受出栈的数据 (3)PUSH和POP与内存单元进行交互 PUSH内存单元:将一个内存单元处的字入栈(栈操作的都是以字为单位) POP内存单元:出栈,用一个内存字单元接受出栈的数据 例如:PUSH [0] POP [2] 指令执行时,CPU要知道内存单元的地址,可以在PUSH.POP指令中给出内存单元的偏移地址,段地址在指令执行时,CPU从DS中取得
0 0