共1条
1/1 1 跳转至页
请教一个函数调用与返回的问题(很奇怪)

我用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 跳转至页
回复
打赏帖 | |
---|---|
汽车电子中巡航控制系统的使用被打赏10分 | |
分享汽车电子中巡航控制系统知识被打赏10分 | |
分享安全气囊系统的检修注意事项被打赏10分 | |
分享电子控制安全气囊计算机知识点被打赏10分 | |
【分享开发笔记,赚取电动螺丝刀】【OZONE】使用方法总结被打赏20分 | |
【分享开发笔记,赚取电动螺丝刀】【S32K314】芯片启动流程分析被打赏40分 | |
【分享开发笔记,赚取电动螺丝刀】【S32K146】S32DS RTD 驱动环境搭建被打赏12分 | |
【分享开发笔记,赚取电动螺丝刀】【IAR】libc标注库time相关库函数使用被打赏23分 | |
LP‑MSPM0L1306开发版试用结果被打赏10分 | |
【分享开发笔记,赚取电动螺丝刀】【LP-MSPM0L1306】适配 RT-Thread Nano被打赏23分 |