共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 跳转至页
回复
| 有奖活动 | |
|---|---|
| 2026年“我要开发板活动”第三季,开始了! | |
| 硬核工程师专属补给计划——填盲盒 | |
| “我踩过的那些坑”主题活动——第002期 | |
| 【EEPW电子工程师创研计划】技术变现通道已开启~ | |
| 发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
| 【EEPW在线】E起听工程师的声音! | |
| 高校联络员开始招募啦!有惊喜!! | |
| 【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
我要赚赏金打赏帖 |
|
|---|---|
| PTC与NTC功能常规对比被打赏¥14元 | |
| 【分享开发笔记,赚取电动螺丝刀】关于3pin锂电池接口的介绍/使用被打赏¥16元 | |
| 以启明云端ESP32P4开发板实现TF卡读写功能被打赏¥28元 | |
| 【分享开发笔记,赚取电动螺丝刀】树莓派5串口UART0配置被打赏¥25元 | |
| 【STM32F103ZET6】17:分享在Rtos项目中断管理的使用经验被打赏¥23元 | |
| 【STM32F103ZET6】16:分享在中断中恢复串口任务,遇到的问题被打赏¥31元 | |
| 在FireBeetle2ESP32-C5上实现温度大气压检测及显示被打赏¥21元 | |
| 【分享开发笔记,赚取电动螺丝刀】SAME51双串口收发配置被打赏¥27元 | |
| Chaos-nano操作系统在手持式VOC检测设备上的应用被打赏¥37元 | |
| 【分享开发笔记,赚取电动螺丝刀】关于在导入第三方库lib时,wchart类型冲突的原因及解决方案被打赏¥30元 | |
我要赚赏金
