to 23楼 用 call 来函数调用函数是必须压堆栈的。发生函数调用的时候,先将PC压进去堆栈,然后将函数的入口地址装载进去PC 指针,从而跳转函数入口地方执行。 从而ret指令返回的时候能正确的装载PC,回到原来调用函数之前的地方。当然,你也可以用JMP指令代替call指令来执行子程序,JMP回来原先的地方就可以了,哈哈。 中断跟这个原理是一样的,PC指针也是必须压入堆栈的,这个跟 psw , acc 等手动 push 进去堆栈是不同的,PC指针是单片机自己压进去的,不用干预。 另外,正是因为PC指针被压进去堆栈,操作系统的多任务切换才能成为可能,嘿嘿~~~ 51用RAM 作为堆栈区,所以多一个少一个堆栈没有啥问题的,如果以后有基会用用PIC 的话,就知道堆栈资源多么的宝贵了 ... orz 学习C语言的同时学学汇编还是有好处di |