当前位置: 代码迷 >> 汇编语言 >> ss寄存器内容修改有关问题
  详细解决方案

ss寄存器内容修改有关问题

热度:810   发布时间:2013-02-26 00:00:00.0
ss寄存器内容修改问题
想问一下我先mov ax,5 能后push ax,之后修改了SS段寄存器的内容,再pop ax。为何ax的内容还是5?谁能帮我解答一下。谢谢!!


------解决方案--------------------------------------------------------
探讨
你肯定是代码有问题啊!这个是我在debug下的结果

Assembly code


AX=0000 BX=0000 CX=0011 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=14C8 ES=14C8 SS=14C8 CS=14C8 IP=0100 NV UP EI PL NZ NA PO NC
14C8:0100……

------解决方案--------------------------------------------------------
刚学80x86的汇编的时候我也是这样的理解,感觉是多余的,但是当调用一个函数的时候,参数很多,寄存器无法达到传递参数的目的的时候,bp就是必须的了,你可以看看汇编中堆栈传递参数的内容。当调用函数的时候,BP作为堆栈区中的一个基地址,用以确定在堆栈中的操作数地址。一般的函数都是如下的框架:
Assembly code
push bp  ;保存bp指针mov bp,sp ;将sp指针传给bp,此时bp指向sp的基地址。这个时候,如果该函数有参数,则[bp+4]则是该子函数的第一个参数,[bp+6]则是该子函数的第二个参数,以此类推,有多少个参数则[bp+4+2^n]。;.....;.....;函数结束时:mov sp,bp ;将原sp指针传回给sppop bp  ;恢复原bp的值。ret  ;退出子函数
  相关解决方案