这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 通讯及无线技术 » 请教一个函数调用与返回的问题(很奇怪)

共1条 1/1 1 跳转至

请教一个函数调用与返回的问题(很奇怪)

菜鸟
2005-09-27 15:31:19     打赏
我用C和汇编混合编写了一段代码 主函数是用C写的,其中还嵌套了汇编语句,还调用了汇编函数 如下: void main() { int i; asm(" stm #1fffh,sp"); asm(" ssbx intm"); init_54(); · asm(" rsbx intm"); ----1 · yanshi(); ----2 while(1){ · if(i==0)i=1000; ----3 …… …… 其中函数init_54和yanshi是用汇编下的 在反汇编窗口中可以看到编译后为 0000:83CD main 0000:83CD EEFF FRAME -1 0000:83CE 7718 STM 1fffh,FL4 0000:83D0 F7BB SSBX INTM 0000:83D1 F074 CALL init_54 0000:83D3 F6BB RSBX INTM 0000:83D4 F074 CALL yanshi 0000:83D6 L1 0000:83D6 1000 LD 0h,A …… …… yanshi函数: _yanshi: ld #10,a kk: sub #1,a bc kk,AGT nop nop ret init_54函数的结尾返回语句: …… NOP NOP RET 在调用init_54函数时每次都可以正确的返回 但是在调用yanshi()函数时就出现了问题 我在上面1,2,3个语句的前面加上断点 每次执行完yanshi函数调用后,返回并不是继续往下走,而是 又回到上面一句(语句1),我观察堆栈里面的数据 在刚开始调用yanshi时,堆栈里面存的83D6,这是正确的 但是在返回时又变成了83D3,造成函数返回到上一步, 如果我在进行yanshi函数调用时用单步操作的话,并没有看到那里造成了 堆栈里面的数据83D6变成了83D3,单步操作后,可以正确的返回 并执行下一步,语句3。 为什么会造成我的调用不能正确返回呢? 为什么上面的init_54没有问题可以正确返回呢? 深感奇怪,望高手能解答,有遇到类似的问题的同志可以讨论一下吗



关键词: 请教     一个     函数     调用     返回     问题     奇怪    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]