WIN16汇编语言中PUSH和POP总结

    技术2022-06-22  40

          最近在研究汇编,老是将这两个东东搞混淆,觉得有必要总结一下子。

          无论是push还是pop,都是对堆栈段ss的处理,ss中存放堆栈段地址,sp指针中存放偏移地址,栈操作都是以字(2字节)为单位。例如,将通用寄存器ax中的数据入栈,push ax,在16位的汇编中,ax中存放的是两个字节单元,这句话的意思中包含了两个步骤:1)让sp=sp-2,即让sp指针向上移动两个存储单元;2)将ax中两个字节数据传送入sp指向的内存单元。相反,将通用寄存器ax中的数据出栈,pop ax,其中也包含了两个步骤:1)ss:sp指向的字数据传送给ax;2)让sp=sp+2,即让sp指针向下移动两个存储单元。

          再举一个例子,push [bx],这条指令和push ds:[bx]的意思一样的,同上,分两步:1)让sp=sp-2;2)将ds:[bx]处的字数据传送给ss:sp指向的单元。同样,pop [bx],和pop ds:[bx]同样意义,分两步:1)将ss:sp指向的字数据传送给个ds:[bx]所在的字单元。


    最新回复(0)