Learning assembly language notes: stack
栈
术语:栈顶标记 入栈 出栈
数据的长度:栈操作的数据是 字型数据。
例:
push AL、BL、……错误!8位寄存器,字节型数据。
push AX、BX、……16位寄存器,字型数据,正确。
入栈:push
出栈:pop
push:将16位寄存器,或者内存中的字型数据,放到栈顶标记的上面。
pop:将栈顶标记的 字型 数据放到16位寄存器或者内存中。
入栈和出栈都要不断地修改栈顶标记!
在8086CPU中,在任意时刻,将段地址寄存器 SS 和偏移地址寄存器 SP 所组合出来的内存地址当作 栈顶标记!
栈的越界:非常危险!并且8086CPU没有保护措施,因此在编程时要小心栈的操作。
栈顶标记在箱子最上的物品的位置,比如SP为0,那么就是一个65536字节大小的栈,push ax,则ax内容将到FFFE,SP - 2。
栈的作用:
临时性保存数据(push寄存器临时保存到栈中,用的时候又将它取回);
用栈进行数据交换(push ax;push bx;pop ax;pop bx)(内存中的数值也是一样的);
栈是一种非常重要的机制。广泛应用并需要深入掌握。
内存存放自己定义的数据:数据段
存放自己定义的指令:指令段(代码段)
也可以定义成栈空间:因为要临时存放 栈段
数据段:ds 段地址寄存器 [X] mov add sub 指令访问这些内存单元
代码段:cs ip 执行代码段中的指令。
栈段:ss sp 决定栈顶标记在哪里。栈的操作:push pop 进行临时性的数据存放或者取出。
操作系统分配给程序的内存空间都是安全的。