shuiyu 发表于 2017-6-27 21:17:32

《零基础入门学习汇编语言》第十六讲

本帖最后由 shuiyu 于 2017-6-29 22:07 编辑

小白刚学,不对的请各位大佬指正,谢谢{:10_254:}

一、栈
(1)先进后出:可以想象成一个装羽毛球的羽毛球筒,只有一个出口,先放进去的肯定在最下面喽{:10_254:}
(2)栈有两个基本的操作:入栈和出栈。
入栈:将一个新的元素放到栈顶;
出栈:从栈顶取出一个元素。
(3)现今的CPU中都有栈的设计。8086CPU提供相关的指令来以栈的方式访问内存空间。这意味着,我们在基于8086CPU编程的时候,可以将一段内存当作栈来使用。
(4)8086CPU提供入栈和出栈指令:PUSH(入栈)       POP(出栈)
push ax:将寄存器ax中的数据送入栈中;
pop ax :从栈顶取出数据送入ax。
8086CPU的入栈和出栈操作都是以字为单位进行的。
(5)栈里面的信息用PUSH,POP只是复制出去了而已,本身还是在里面的;我们在存东西进去的时候,只是把以前的覆盖掉。比如:我们平时的格式化硬盘,只是把一个硬盘的索引改了;里面的东西并没有删除,我们再存东西进去只是覆盖掉以前的内存而已(PS:不然那些专业人才怎么恢复硬盘数据呢{:10_256:} )


二、两个疑问引出的思考
(1)8086CPU中,有两个寄存器:
段寄存器SS 存放栈顶的段地址
寄存器SP    存放栈顶的偏移地址
任意时刻,SS:SP指向栈顶元素。
(2)CPU如何知道一段内存空间被当作栈使用?:任意时刻,SS:SP指向栈顶元素。指向这里了,肯定就是要用到栈了。
(3)执行push和pop的时候,如何知道哪个单元是栈顶单元?:任意时刻,SS:SP指向栈顶元素。{:10_312:}
(4)PUSH、POP指令的执行过程:字型数据用两个单元存放,高地址单元放高 8 位,低地址单元放低8 位。
在PUSH过程中:SP=SP-2
在POP过程中:SP=SP+2
(5)当栈中只有一个元素的时候,SS = 1000H,SP=000EH(即指向栈顶)为空时,SS=1000H,SP=0010H(即指向栈的最底部单元下面的单元)
(6)当栈为空的时候,栈中没有元素,也就不存在栈顶元素所以SS:SP 只能指向栈的最底部单元下面的单元,该单元的偏移地址为栈最底部的字单元的偏移地址+2,栈最底部字单元的地址为1000:000E,所以栈空时,SP=0010H。






谢谢小甲鱼带来的视频教程,感谢!! {:10_303:}


   
本节结束,多谢览阅!
小白刚学,不对的请各位大佬指正,谢谢{:10_254:}
页: [1]
查看完整版本: 《零基础入门学习汇编语言》第十六讲