ARM汇编: ldr与mov 、 b与bl
来源:互联网 发布:电力数据网 编辑:程序博客网 时间:2024/06/10 14:48
ARM是RISC结构,数据从内存到CPU之间的移动只能通过L/S指令来完成,也就是ldr/str指令。
比如想把数据从内存中某处读取到寄存器中,只能使用ldr
比如:
ldr r0, 0x12345678
就是把0x12345678这个地址中的值存放到r0中。
而mov不能干这个活,mov只能在寄存器之间移动数据,或者把立即数移动到寄存器中,这个和x86这种CISC架构的芯片区别最大的地方。
x86中没有ldr这种指令,因为x86的mov指令可以将数据从内存中移动到寄存器中。
另外还有一个就是ldr伪指令,虽然ldr伪指令和ARM的ldr指令很像,但是作用不太一样。ldr伪指令可以在立即数前加上=,以表示把一个地址写到某寄存器中,比如:
ldr r0, =0x12345678
这样,就把0x12345678这个地址写到r0中了。所以,ldr伪指令和mov是比较相似的。只不过mov指令限制了立即数的长度为8位,也就是不能超过512。而ldr伪指令没有这个限制。如果使用ldr伪指令时,后面跟的立即数没有超过8位,那么在实际汇编的时候该ldr伪指令是被转换为mov指令的。
B指令或BL指令引起处理器转移到“子程序名”处开始执行。两者的不同之处在于BL指令在转移到子程序执行之前,将其下一条指令的地址拷贝到R14(LR,链接寄存器)。由于BL指令保存了下条指令的地址,因此使用指令“MOVPC,LR”即可实现子程序的返回。而B指令则无法实现子程序的返回,只能实现单纯的跳转。用户在编程的时候,可根据具体应用选用合适的子程序调用语句。
比如想把数据从内存中某处读取到寄存器中,只能使用ldr
比如:
ldr r0, 0x12345678
就是把0x12345678这个地址中的值存放到r0中。
而mov不能干这个活,mov只能在寄存器之间移动数据,或者把立即数移动到寄存器中,这个和x86这种CISC架构的芯片区别最大的地方。
x86中没有ldr这种指令,因为x86的mov指令可以将数据从内存中移动到寄存器中。
另外还有一个就是ldr伪指令,虽然ldr伪指令和ARM的ldr指令很像,但是作用不太一样。ldr伪指令可以在立即数前加上=,以表示把一个地址写到某寄存器中,比如:
ldr r0, =0x12345678
这样,就把0x12345678这个地址写到r0中了。所以,ldr伪指令和mov是比较相似的。只不过mov指令限制了立即数的长度为8位,也就是不能超过512。而ldr伪指令没有这个限制。如果使用ldr伪指令时,后面跟的立即数没有超过8位,那么在实际汇编的时候该ldr伪指令是被转换为mov指令的。
B指令或BL指令引起处理器转移到“子程序名”处开始执行。两者的不同之处在于BL指令在转移到子程序执行之前,将其下一条指令的地址拷贝到R14(LR,链接寄存器)。由于BL指令保存了下条指令的地址,因此使用指令“MOVPC,LR”即可实现子程序的返回。而B指令则无法实现子程序的返回,只能实现单纯的跳转。用户在编程的时候,可根据具体应用选用合适的子程序调用语句。
0 0
- ARM汇编: ldr与mov 、 b与bl
- ARM汇编: ldr与mov 、 b与bl
- arm汇编ldr,str,b,bl指令
- b MAIN 和 ldr&nbs…
- b MAIN 和 ldr&nbs…
- ARM 汇编 LDR STR MOV
- ARM中MOV与LDR的区别
- ARM LDR与MOV的区别
- ARM中MOV与LDR的区别
- ARM中的MOV与LDR小结
- ARM中MOV与LDR的区别
- arm中LDR与MOV的区别
- arm v8汇编指令
- ARM与x86之4--EAGLE is Coming!
- sizeof 与 strlen 研究
- Oracle Alerts 与…
- FragmentTabHost 与 Fragment 学习
- Linux $( )与${ }的区别
- 函数指针详解
- Ubuntu14.04及之后版本重启网卡不…
- 安装使用SSH Secure She…
- ubuntu系统根目录下各个目录用途说…
- linux符号链接命令ln详解
- ARM汇编: ldr与mov 、 b与bl
- ARM平台下ldr和bl跳转的区别
- [转]关于U-BOOT中.balignl 16…
- linux中/etc/inittab文件分析
- Python2.7下安装Scrapy框架
- 关于弹出窗实例
- upper_bound无法用在结构体重
- jvm内存溢出和内存泄漏的区别
- stm32的bootloader和APP