阿西吧 发表于 2017-7-2 09:36:41

汇编语言上天之路16-19课(栈)

第十六课到第十九课(栈)
        栈是FILO(先进后出)的一个结构
        栈的指令:PUSH(压栈),POP(出栈)
        8086CPU的PUSH,POP只能操作字型数据(AX,BX,CX,DX,DS,CS,,。。。字型数据)
        现在的CPU栈能操作双字的数据(dword),PUSH EAX,POP EAX..
        PUSH时候是高地址到低地址
        SS指向栈段,SP相当于偏移地址
        每次PUSH时候SP先-2,SS不变,再写入数据
        每次POP时候先读取数据,再SP+2,SS不变
        PUSH POP用的是SP,所以栈的范围为0~FFFFH,因为SP是16位,也就是4个十六进制,最大就是FFFFH

        栈越界问题:CPU不提供栈越界的检测,只能我们自己注意
        PUSH,POP之后原地址上的内容不会变化,只是SP改变

        如果要清空一个寄存器,可以用sub ax,ax这样比mov ax,0少一个字节的机器码(sub 是2字节,mov 是3字节)
        也可以XOR ax,ax(一样为0,不一样为1)
页: [1]
查看完整版本: 汇编语言上天之路16-19课(栈)