栈是一种具有先进后出的访问方式的存储空间,他提供push和pop指令来操作栈段的数据,在8086中push和pop操作的数据都是2个字节的。
栈顶的元素的地址比栈底的元素地址要小,当空栈的时候堆栈指针指向栈底元素的下一个单元也就是栈空间最高地址的牺牲一个单元,当在8086中push一个16位元素2个字节入栈之后sp将上移2单位,sp = sp-2。而pop执行与push刚好相反。
栈的空间是有限的当我们不断的执行push或者pop操作的时候,可能会发生栈满或者空栈的情况,栈空间的顶部或者底部可能会有其他的数据存在,如果发生栈满或者空栈的情况下继续执行push或者pop操作可能会覆盖其他数据造成一连串的错误。
push 寄存器 ;将寄存器中的数据入栈
pop 寄存器 ;用一个寄存器接收出栈的数据
push 段寄存器 ;将段寄存器中的数据入栈
pop 段寄存器 ;用段寄存器接收出栈的数据
push 内存单元 ;将内存字单元出的字入栈(1 word = 2 byte)
pop 内存单元 ;用内存字单元出的字接收出栈的数据(1 word = 2 byte)
mov ax, 1000H
mov ds, ax ;内存单元的段地址要放在ds中(必须通过寄存器中转 mov ds,1000H 语法错误)
push [0] ;将1000H:0的字入栈
pop [2] ;将出栈的数据放到数据段1000H:2中
8086汇编的相关笔记来自 小码哥 MJ iOS底层视频 以及 王爽《汇编语言(第三版)》
网友评论