共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 跳转至页
回复
打赏帖 | |
---|---|
汽车+汽车地线之间连接处理被打赏20分 | |
【Zephyr】使用Zephyr外设初始化过程解析被打赏30分 | |
【S32K146】S32DS watchdog 配置使用被打赏20分 | |
【Zephyr】使用 IAR 调试 Zephyr 镜像被打赏20分 | |
赚取电动螺丝刀+电源电路理论知识分享1被打赏5分 | |
我想要一部加热台+分享常见运算放大器电路的应用被打赏5分 | |
【Zephyr】MCXN947 Zephyr 开发入门适配shell被打赏20分 | |
我想要一部加热台+常见的MOS管驱动电路被打赏5分 | |
【我要开发板】6.联合MATLAB记录数据被打赏50分 | |
【换取手持数字示波器】MicrochipMPLABHarmony框架下串口调试printf输出记录被打赏29分 |