您的位置 首页 硬件

第11章 栈(X86汇编教程)

栈,是什么呢?其实啊,栈,就是一种数据放进内存和从内存读取出来的方法用栈来操作数据,几乎无需自己操心数据会被保存在内存的什么地方(

,是什么呢?其实啊,栈,便是一种数据放进内存和从内存读取出来的办法.用栈来操作数据,简直无需自己操心数据会被保存在内存的什么当地(不出意外的话…..)

栈操作内存的办法是写入的时分把数据一个一个推动去,写一次推一个数据.而提取数据当然也是一个一个提取出来.留意:提取过的数据就会消失(实际上没有消失,能够再次提取,但….那还不如直接用正常办法操作内存呢..).不像一般内存操作能够重复读取.栈供给了一种”后进先出”的数据操作办法.把最终放进内存的数据最早拿出来.这种内存操作办法在某些方面会有巨大的用处.

运用栈来操作内存,先在内存中界说一个方位,作为”栈顶”,这个界说的办法也没啥,直接把你要作为栈顶的内存地址写进SS:SP寄存器即可.这2个寄存器便是”栈顶指针寄存器组合” (一般体系会主动界说栈顶,无需自己操作,所以这步能够越过,知道SS:SP寄存器的效果即可.)

咱们用仓库往内存里边推入数据之后,栈顶就会移动(主动的哟!).所以不必忧虑会把从前推动仓库的数据掩盖(当然,你可别由于这样就拼命往仓库里边压数据…内存会爆掉的[=_=0])

CPU用仓库操作内存的过程:

数据入栈:

1:往内存的[SS:SP]写入数据

2:新的SP寄存器值=SP寄存器值-入栈数据的长度(单位:字节,一般是字形数据.也便是2个字节)

数据出栈:

1:SP寄存器值+出栈数据的长度(同上个括号)

2:在[SS:SP]读取数据

然后,用栈操作指令就能把数据推动栈里,或从栈里把数据弄出来….


指令名 :PUSH
操作数数量:1
操作数名 :数据
指令用处 :把一个数据推动栈里,能够是直接数,也能够是寄存器或内存地址(内存地址的话需求指定推动仓库里的数据长度)



指令名 :POP
操作数数量:1
操作数名 :寄存数据的当地
指令用处 :把一个数据从仓库里提取出来.能够放到寄存器或内存地址里.(此处内容同上面那个括号)


实例:
PUSH AX;把AX里边的数据推动仓库里
POP BX;把最终推动仓库的数据读取出来放进BX
内存地址实例:
PUSH WORD [DS:0];那个WORD便是用来指定数据长度的,字形(WORD)为2个字节
POP DWORD [DS:0];4个字节出栈
本章就到这儿,作业:把4个通用寄存器[AX BX CX DX]都压栈再取回吧!

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/yingjian/317279.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部