共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 跳转至页
回复
我要赚赏金打赏帖 |
|
|---|---|
| 28BYJ-48机械臂实现人脸跟随被打赏¥24元 | |
| 基于RK3506B的片温识读功能的实现被打赏¥25元 | |
| 【瑞萨RA8D1测评】基于FreeRTOS的lvgl移植教程被打赏¥29元 | |
| 电子价签墨水屏开发被打赏¥35元 | |
| 【Ozone】RTT 打印终端使用被打赏¥29元 | |
| BMS保护板绝缘检测功能-不平衡电桥技术绝缘电阻检测设计与实现被打赏¥34元 | |
| 给28BYJ-48三自由度机械臂加一个网页控制台被打赏¥32元 | |
| 用28BYJ-48电机从零搭一台三自由度机械臂被打赏¥33元 | |
| 【英飞凌开发经验】ModusToolbox配置EdgeTalk外设被打赏¥27元 | |
| 基于BQ76952PFBR的BMS保护板热插拔损坏的原因和处理措施被打赏¥32元 | |
我要赚赏金
