uboot 指令大全
来源:互联网 发布:在盘古网络上班稳定吗 编辑:程序博客网 时间:2024/05/21 09:51
1. adr和ldr指令
adr是小范围的地址读取伪指令,ldr是大范围的读取地址伪指令。实际上adr是将基于PC相对偏移的地址值或基于寄存器相对地址值读取的为指令,而ldr用于加载32位立即数或一个地址到指定的寄存器中。如果在程序中想加载某个函数或者某个在联接时候指定的地址时请使用adr,例如在lds中需要重新定位的地址。当加载32为的立即数或外部地址时请用ldr。
举例,有如下代码:
ldr r0,_startadr r0,_startldr r0,=_start _start: nop编译,生成目标文件,反汇编:
arm-linux-as adr.s -o adr.o
arm-linux-ld adr.o -o adr
arm-linux-objdump -d adr
结果如下所示:
注意:由于arm采用流水线基址,当正确读取了PC的值时,该值为当前指令地址值加上8个字节,也就是PC指向当前指令的下两条指令的地址;
2.ldr指令说明
3.多寄存器寻址指令ldmia/ldmib
多寄存器和堆栈寻址的用法:多寄存器寻址:LDMIA,LDMIB,STMIA,STMIB,LDMDA,LDMDB,STMDA,STMDB;
堆栈寻址:LDMFA,LDMFD,STMFA,STMFD,LDMEA,LDMED,STMEA,STMED;
弄清堆栈寻址的SP的变化:LDMFA,LDMFD,STMFA,STMFD,LDMEA,LDMED,STMEA,STMED;
DB: 每次传送前地址减4; FD: 满递减堆栈; ED: 空递减堆栈;
FA: 满递增堆栈; EA: 空递增堆栈。
1、多寄存器寻址:
LDMIA R0!,{R1-R4}
;R1<----[R0]
;R2<----[R0+4]
;R3<----[R0+8]
;R4<----[R0+12]
例如:
所有的示例指令执行前:
mem32[0x1000C] = 0x04
mem32[0x10008] = 0x03
mem32[0x10004] = 0x02
mem32[0x10000] = 0x01
r0 = 0x00010010
r1 = 0x00000000
r3 = 0x00000000
r4 = 0x00000000
1) ldmia r0!, {r1-r3} 2) ldmib r0!, {r1-r3}
执行后: 执行后:
r0 = 0x0010001C r0 = 0x0010001C
r1 = 0x01 r1 = 0x02
r2 = 0x02 r2 = 0x03
r3 = 0x03 r3 = 0x04
2、堆栈寻址:
STMFD入栈指令,相当于STMDB
STMFD SP!,{R2-R4} ;[SP-4]<---R4
;[SP-8]<---R3
;[SP-12]<---R2
LDMFD出栈指令,相当于LDMIA
LDMFD SP!,{R6-R8} ;R6<----[SP]
;R7<----[SP+4]
;R8<----[SP+8]
- uboot 指令大全
- UBOOT操作指令例子
- Uboot 常用指令
- uboot 常用指令集
- 指令大全
- uboot命令大全
- uboot命令大全
- uboot命令大全
- Uboot 命令参数大全
- uboot下NAND操作指令
- eTerm指令、民航指令大全、黑屏指令
- eTerm指令、民航指令大全、黑屏指令
- Linux 指令大全
- Linux 指令大全
- Linux指令大全(2)
- Linux指令大全(3)
- linux指令大全(二)
- linux指令大全
- 【Unity-提高效率】我的白痴记录
- QT调用C#开发的ArcEngine的.net组件(1)
- Hibernate连接8种常见的数据库配置方式
- 无线Wifi密码之PIN破解篇(WPA)
- 工程师原创:人人都看得懂的电磁场理论
- uboot 指令大全
- Linux上如何通过 OpenVPN 建立安全的远程连接【上】
- C笔记之基础知识
- 使用Fireworks轻松制作相片框
- java环境变量 linux
- HTML & XML里的“&”等 转义字符怎么写
- Struts2插件 Config Browser Plugin
- Java常用类
- 【图像分割学习1】概述