想问一下我先mov ax,5 能后push ax,之后修改了SS段寄存器的内容,再pop ax。为何ax的内容还是5?谁能帮我解答一下。谢谢!!
------解决方案--------------------------------------------------------
------解决方案--------------------------------------------------------
刚学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 ;退出子函数