简单的汇编实例注释
来源:互联网 发布:js table 高度 编辑:程序博客网 时间:2024/06/06 02:12
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指令的。
ldr伪指令和ldr指令不是一个同东西。
.text.global _start_start: @ ldr r0, 0x12345678 表示把地址0x12345678中的值放到r0中, LDR是内存数据放到寄存器,即装载,是读 @ ldr r0, =0x53000000 把0x53000000这个地址写到r0中了 这时ldr是一个伪指令ldr r0, =0x53000000 @ WATCHDOG寄存器地址@ mov的第二个参数的值,必须是8位立即数或能通过移位得到的8位立即数 @ mov只能在寄存器之间移动数据,或者把立即数移动到寄存器中,这个和x86这种CISC架构的芯片区别最大的地方 mov r1, #0x0 @ STR(条件) 源寄存器,<存储器地址>@ STR是寄存器数据到内存,即存储,是写 str r1, [r0] @ 写入0,禁止WATCHDOG,否则CPU会不断重启 ldr sp, =1024*4 @ 设置堆栈,注意:不能大于4k, 因为现在可用的内存只有4K @ nand flash中的代码在复位后会移到内部ram中,此ram只有4K bl main @ 调用C程序中的main函数,在跳转之前把跳转之前的下一地址存储在lr中halt_loop: b halt_loop
1 0
- 简单的汇编实例注释
- Spring:使用JdbcTemplate的简单实例-基于注释
- Spring+Hibernate:使用注释和OSCache整合的简单实例
- Netty实例-简单的服务端-客户端实现,注释详细
- 汇编注释
- 简单的汇编题
- 汇编简单的输入输出
- GCC内嵌汇编简单实例
- Linux 汇编语法和简单实例
- 汇编求两个数的和---注释
- 带注释的汇编指令大全
- TestNG基本注释一:简单实例
- Doxygen 的简单注释
- 简单的注释转换
- C#使用汇编的实例
- qqCPUID 的一个汇编实例
- 简单的内联汇编 __asm
- 一个简单的汇编窗口
- layoutSubviews何时调用的问题
- Spring的IoC和AOP
- SQL: 视图和表的区别
- CF237 E 404E - Maze 1D(二分)
- 在Django 1.5 中 Django Step by Step (九)教程分页实现方法的修正
- 简单的汇编实例注释
- TWiki架设
- 数组中出现次数超过一半的数字
- 实现三年前的誓言
- 覆写JAVA中的CompareTo()方法与toString()方法的实现
- (intermediate) UVA 最短路 10968 - KuPellaKeS
- JPEG 原理详细实例分析及其在嵌入式 Linux 中的应用
- ubuntu 中安装 hadoop 记录
- Xen虚拟机修改root密码