共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 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
与电子爱好者谈读图四被打赏50分 | |
与电子爱好者谈读图二被打赏50分 | |
【FRDM-MCXN947评测】Core1适配运行FreeRtos被打赏50分 | |
【FRDM-MCXN947评测】双核调试被打赏50分 | |
【CPKCORRA8D1B评测】---移植CoreMark被打赏50分 | |
【CPKCORRA8D1B评测】---打开硬件定时器被打赏50分 | |
【FRDM-MCXA156评测】4、CAN loopback模式测试被打赏50分 | |
【CPKcorRA8D1评测】--搭建初始环境被打赏50分 | |
【FRDM-MCXA156评测】3、使用FlexIO模拟UART被打赏50分 | |
【FRDM-MCXA156评测】2、rt-thread MCXA156 BSP制作被打赏50分 |