ARM7ldr指令与ldr伪指令
ldr伪指令的第二个操作数之前有个=,意思是第一个操作书 = 第二个操作数,相当明了
核心就在于对于用.word指令在.text段里另外定义一段内存,用ldr r0,[pc + x(可以算出.text段里的内存地址)]这种基于PC的偏移量方式加载内存里的内容到寄存器
看下源代码和反汇编的结果就清楚了
伪指令用于大的常数:
源代码:
top:
ldr r0,=
add r1,r2,r3
eor r1,r2,r3
eor r1,r2,r3
bottom:
b top
反汇编:
prebuilts/gcc/linux-x86/arm/arm-eabi-./bin$ ./arm-eabi-objdump -d test.o test.o: file format elf32-littlearm Disassembly of section .text: <top>:
: e59f000c ldr r0, [pc, #] ; 14 <bottom+0x4>
: e0821003 add r1, r2, r3
: e0221003 eor r1, r2, r3
c: e0221003 eor r1, r2, r3 <bottom>:
: eafffffa b <top>
: 00bc614e .word 0x00bc614e
伪指令用于标签:
源代码:
top:
ldr r0,=bottom
add r1,r2,r3
eor r1,r2,r3
eor r1,r2,r3
bottom:
b top
反汇编:
prebuilts/gcc/linux-x86/arm/arm-eabi-./bin$ ./arm-eabi-objdump -d test.o test.o: file format elf32-littlearm Disassembly of section .text: <top>:
: e59f000c ldr r0, [pc, #] ; 14 <bottom+0x4>
: e0821003 add r1, r2, r3
: e0221003 eor r1, r2, r3
c: e0221003 eor r1, r2, r3 <bottom>:
: eafffffa b <top>
: .word 0x00000010
ldr指令用于常数:
源代码:
top:
ldr r0,[r0]
add r1,r2,r3
eor r1,r2,r3
eor r1,r2,r3
bottom:
b top
反汇编:
prebuilts/gcc/linux-x86/arm/arm-eabi-./bin$ ./arm-eabi-objdump -d test.o test.o: file format elf32-littlearm Disassembly of section .text: <top>:
: e5900000 ldr r0, [r0]
: e0821003 add r1, r2, r3
: e0221003 eor r1, r2, r3
c: e0221003 eor r1, r2, r3 <bottom>:
: eafffffa b <top>
ldr指令用于标签:
源代码:
top:
ldr r0,bottom
add r1,r2,r3
eor r1,r2,r3
eor r1,r2,r3
bottom:
b top
反汇编:
prebuilts/gcc/linux-x86/arm/arm-eabi-./bin$ ./arm-eabi-objdump -d test.o test.o: file format elf32-littlearm Disassembly of section .text: <top>:
: e59f0008 ldr r0, [pc, #] ; 10 <bottom>
: e0821003 add r1, r2, r3
: e0221003 eor r1, r2, r3
c: e0221003 eor r1, r2, r3 <bottom>:
: eafffffa b <top>
ARM7ldr指令与ldr伪指令的更多相关文章
- ARM中LDR伪指令与LDR加载指令
ARM指令集中,LDR通常都是作加载指令的,但是它也可以作伪指令. LDR伪指令的形式是“LDR Rn,=expr”.下面举一个例子来说明它的用法. COUNT EQU 0x4000310 ...
- ARM汇编中ldr伪指令和ldr指令(转载)
转自:http://blog.csdn.net/ce123_zhouwei/article/details/7182756 ARM是RISC结构,数据从内存到CPU之间的移动只能通过L/S指令来完成, ...
- ARM LDR伪指令使用方法具体解释
LDR伪指令 10.45 LDR pseudo-instruction 功能:把一个32位马上数或一个32位的内存地址载入到一个寄存器中. 注意:这里描写叙述的是LDR伪指令,而不是LDR指令 ...
- 转 -- ARM 中 LDR伪指令
我们知道ARM CPU中有一条被广泛使用的指令LDR,它主要是用来从存储器(确切地说是地址空间)中装载数据到通用寄存器.但不论是ARMASM还是GNU ARM AS,都提供了一条与之同名的伪指令LDR ...
- 8.adr与ldr伪指令的区别
ldr和adr都是伪指令,区别是ldr是长加载.adr是短加载. 重点:adr指令加载符号地址,加载的是运行时地址: ldr指令加载符号地址时,加载的是链接地址.
- LDR伪指令与ADR伪指令的区别
测试代码 ldr r0, _start adr r0, _start ldr r0, =_start nop mov pc, lr _start: nop 设置代码的起始地址为 0x0c008000, ...
- 汇编指令:ldr和str,ldm和stm的区别
(1)LDR:L表示LOAD,LOAD的含义应该理解为:Load from memory into register.下面这条语句就说明的很清楚: LDR R1, [R2] R1<— ...
- arm汇编指令--str ldr
STR :把寄存器中的字保存到存储器(寄存器到存储器) 示例: STR R0,[R1],#8 :将R0中的字数据写入以R1为地址的存储器中,并将新地址R1+8写入R1.STR ...
- LDR详解
ARM指令集中,LDR通常都是作加载指令的,但是它也可以作伪指令. LDR伪指令的形式是"LDR Rn,=expr".下面举一个例子来说明它的用法. COUNT EQU ...
随机推荐
- DEDECMS中,获取面包屑导航
获取面包屑导航 {dede:field name='position'/} {dede:field.position/}
- 【基于spark IM 的二次开发笔记】第一天 各种配置
[基于spark IM 的二次开发笔记]第一天 各种配置 http://juforg.iteye.com/blog/1870487 http://www.igniterealtime.org/down ...
- 在Windows下设置环境变量 运行mysql程序变得更容易
在Windows下设置环境变量,点开始菜单,右键单击我的电脑--属性--高级--环境变量 可以看到PATH的变量是这样的: C:\WINDOWS;C:\WINDOWS\COMMAND 为了让运行m ...
- asp.net webform download excel
private void exportBinaryToExcel(byte[] bytes, string filename) { Response.AddHeader("Content-D ...
- php入门变量之数字
在介绍变量时,我明确指出PHP具有整型和浮点型(小数)数字类型.但是,依据我的经验,这两种类型都可以归类到一般的数字之下(在极大程度上是这样的). 下面列举下PHP中有效的数字类型的变量: 8 3.1 ...
- 解决 windows2012 下无法安装 sql2008R2
Press the Windows logo key, type control panel, and then click the Control Panel icon. Note If you a ...
- ARM-Linux S5PV210 UART驱动(4)----串口驱动初始化过程
对于S5PV210 UART驱动来说,主要关心的就是drivers/serial下的samsung.c和s5pv210.c连个文件. 由drivers/serial/Kconfig: config S ...
- Ducci Sequence
Description A Ducci sequence is a sequence of n-tuples of integers. Given an n-tuple of integers ( ...
- PHP内置函数
1 变量函数 a.is_xxx函数用来判断变量类型 is_int.is_integer.is_long,判断变量是否是整型 is_float.is_double.is_real ...
- html 页面 ajax 方法显示遮罩
showLoading.css 样式: ;;list-style-type:none;} a,img{;} .overlay{;;;;;width:100%;height:100%;_padding: ...