汇编LDR MOVS BLX是什么含义,还有一下代码是个什么意思 给逐行分析一下

如题所述

第1个回答  推荐于2017-10-13
LDR 指令是RISC(精简指令集)处理器特有指令,看样子像是ARM指令集

第一条指令 BLX R3是一个跳转指令,你前面肯定有对R3赋值,R3的值为跳转函数的入口地址,BLX是带有返回的跳转,即在跳转的时候会将PC+4(+8?这个我不确定了)的指令保存到LR寄存器,在跳转函数的结尾通过LR可以返回当前位置

LDR指令就是取数的指令,这个指令分为LDR直接取数的指令,或者是伪指令,看样子你的汇编代码不是C反汇编出来的,而是自己手写的呀。。。
MOVS就是搬移指令。。。

指令太多分析起来太麻烦了。。。。ADD 的那两条指令看起来又不像ARM指令 好奇怪的样子。。。追问

多谢呀。这个BLX是不是可以理解为调用函数呀。那如果该函数有返回值,应该在哪里呀,是返回到R3吗。如果不是那应该在哪里呀

再次感谢呀,汇编看不懂,高手呀

追答

函数返回值应该在R0

本回答被提问者和网友采纳

...MOVS BLX是什么含义,还有一下代码是个什么意思 给逐行分析一下_百度...
LDR指令就是取数的指令,这个指令分为LDR直接取数的指令,或者是伪指令,看样子你的汇编代码不是C反汇编出来的,而是自己手写的呀。。。MOVS就是搬移指令。。。指令太多分析起来太麻烦了。。。ADD 的那两条指令看起来又不像ARM指令 好奇怪的样子。。。

在main之前,IAR都做了啥
__iar_data_init2还没执行完毕,就跳转到了这个__iar_zero_inti2,且看我们慢慢分析这个帮凶——__iar_zero_inti2做了什么。__iar_zero_inti2将R3寄存器清零,立即跳转到0x0800'7D80执行'LDR R2, [R0], #0x4',这句指令与刚才在__iar_data_init2见到的'LDR R1, [R0], #0x4'很类似,都为“后索引...

相似回答