Num: Value Size Type Bind Vis Ndx Name
0: 00000000 0 NOTYPE LOCAL DEFAULT UND
1: 50008000 0 SECTION LOCAL DEFAULT 1
2: 50010004 0 SECTION LOCAL DEFAULT 2
3: 00000000 0 SECTION LOCAL DEFAULT 3
4: 00000000 0 SECTION LOCAL DEFAULT 4
5: 00000000 0 SECTION LOCAL DEFAULT 5
6: 00000000 0 SECTION LOCAL DEFAULT 6
7: 00000000 0 SECTION LOCAL DEFAULT 7
8: 50010004 0 NOTYPE LOCAL DEFAULT 2 hello
9: 50010011 0 NOTYPE LOCAL DEFAULT 2 bh
10: 50010011 0 NOTYPE LOCAL DEFAULT 2 $d
11: 50010012 0 NOTYPE LOCAL DEFAULT 2 ADD
12: 50008000 0 NOTYPE LOCAL DEFAULT 1 $a
13: 50008004 0 NOTYPE GLOBAL DEFAULT ABS __exidx_end
14: 50010016 0 NOTYPE GLOBAL DEFAULT ABS _bss_end__
15: 50010016 0 NOTYPE GLOBAL DEFAULT ABS __bss_start__
16: 50008004 0 NOTYPE GLOBAL DEFAULT ABS __exidx_start
17: 50010016 0 NOTYPE GLOBAL DEFAULT ABS __bss_end__
18: 50008000 0 NOTYPE GLOBAL DEFAULT 1 _start
19: 50010016 0 NOTYPE GLOBAL DEFAULT ABS __bss_start
20: 50010018 0 NOTYPE GLOBAL DEFAULT ABS __end__
21: 50010016 0 NOTYPE GLOBAL DEFAULT ABS _edata
22: 50010018 0 NOTYPE GLOBAL DEFAULT ABS _end
23: 50010004 0 NOTYPE GLOBAL DEFAULT 2 __data_start
No version information found in this file.
Attribute Section: aeabi
File Attributes
Tag_CPU_arch: v4
Tag_ARM_ISA_use: Yes
(3) equ 伪指令
equ 伪指令介绍 :
-- 伪指令作用 : 该指定作用是定义常量;
-- 代码示例 :
.text .global _start _start: @定义一个宏变量 .equ DA, 0x68 @将 DA 值赋值给 r0 寄存器 mov r0, #DA
(4) align 伪指令
align 伪指令介绍 :
-- 伪指令作用 : 标明数据对齐;
对齐代码示例 :
-- 含有对齐的代码 :
.data @定义数据变量 hello: @标明变量地址, 字符串变量 .ascii 'Hello World !' bh: @标明变量地址, byte 变量 .byte 0x1 ADD: @标明变量地址, word 变量 .word 0xff .text .global _start _start: @定义一个宏变量 .equ DA, 0x68 @将 DA 值赋值给 r0 寄存器 mov r0, #DA
-- 不含对齐的代码 :
.data @定义数据变量 hello: @标明变量地址, 字符串变量 .ascii 'Hello World !' .align 4 bh: @标明变量地址, byte 变量 .byte 0x1 ADD: @标明变量地址, word 变量 .word 0xff .text .global _start _start: @定义一个宏变量 .equ DA, 0x68 @将 DA 值赋值给 r0 寄存器 mov r0, #DA
代码 elf 内容对比 : 这里省略大部分, 只给出内存对应地址, 查看对齐内容;
-- 没有对齐的代码 : 0x50010011 明显不能被 4 整除;
-- 对齐的代码 : 0x50010020 可以被4整除, 此时已经进行了对齐;
3. 操作类伪指令
(1) ldr 伪指令
机器码 shifter_operand 段解析 :
-- 段解析 : 其中 4 位存放位移值, 8 位存放数值, 因此 立即数不能超过 8位, 最大 0xFF;
-- 缺陷 : 无法使用 大的数字;
-- 示例 :
.text .global _start _start: mov r0, #0xFFF
-- 编译错误 :
octopus@octopus:~/arm/demo$ make arm-linux-gcc -g -o start.o -c start.S start.S: Assembler messages: start.S:5: Error: invalid constant (fff) after fixup make: *** [start.o] 错误 1
ldr 伪指令 :
-- 作用 : 可以 向寄存器中赋值 大立即数;
-- 语法格式 : 'ldr r0, =0xFFF', 注意 不使用 # , 使用 = 后面加上立即数;
-- 代码示例 : 此时能编译成功, 0xfff 被赋值给 r0 寄存器;
.text .global _start _start: ldr r0, =0xFFF
-- 反汇编 elf 代码 :
octopus@octopus:~/arm/demo$ arm-linux-objdump -S -D start.elf
start.elf: file format elf32-littlearm
Disassembly of section .text:
50008000 <_start>:
.text
.global _start
_start:
ldr r0, =0xFFF
50008000: e51f0004 ldr r0, [pc, #-4] ; 50008004 <_start+0x4>
50008004: 00000fff .word 0x00000fff
Disassembly of section .debug_aranges:
... ...
-- 分析反汇编代码 : '50008000: e51f0004 ldr r0, [pc, #-4] ; 50008004 <_start+0x4>' 代码表明 ldr r0, =0xFFF 是使用 ldr 读取内存指令, 从 pc - 4 地址上读取该地址存储的值, '50008004: 00000fff .word 0x00000fff' 表明 系统将 0xFFF 定义在了 pc -4 内存地址中;
(2) nop 伪指令
nop 伪指令 :
-- 作用 : 进行延时, 在一些对时序要求较高的程序中, 使用该指令进行一个时钟的延时;
-- 代码示例 :
.text .global _start _start: nop
-- 反汇编 : nop 伪指令执行了 'mov r0, r0' 这个无意义的操作;
octopus@octopus:~/arm/demo$ arm-linux-objdump -S -D start.elf start.elf: file format elf32-littlearm Disassembly of section .text: 50008000 <_start>: .text .global _start _start: nop 50008000: e1a00000 nop (mov r0,r0) Disassembly of section .debug_aranges: ... ...
三. 协处理器访问指令
1. 协处理器简介
协处理器简介 :
-- 作用 : 执行特定处理任务, 减轻处理器负担;
-- 数学协处理器 : 主要进行数字处理;
-- 协处理器支持 : ARM 芯片最多支持 16 个协处理器, 最重要的协处理器 是 CP15;
CP15 协处理器作用 : CP15 是系统控制寄存器, 通过这些寄存器, 配置与控制 缓存, MMU, 保护系统, 时钟模式 和 其它系统参数;
-- 如何访问 CP15 : 通过访问 CP15 中的寄存器控制上面的参数, CP15 提供了 16 组寄存器;
-- 文档 :
2. 协处理器访问指令
mcr 指令解析 : 详情见 ARM11 文档, P145, 3.2;
-- 作用 : 将本地寄存器中的数据 赋值给 CP15 的寄存器;
-- 语法格式 : 'MCR{cond} P15, -- 语法解析 : CRn 表示 CP15 寄存器属于哪一组, CRm 也是组名; -- 代码示例 : -- 文档截图 : -- CP15 寄存器访问 : 如果读取 MainID 寄存器, 就取前面的哪些 CRn Op1 CRm Op2 等参数;.text
.global _start
_start:
@'MCR{cond} P15,
上一篇:基于WINCE6.0+S3C2443的camera驱动
下一篇:【嵌入式开发】ARM 芯片简介 (ARM芯片类型 | ARM处理器工作模式 | ARM 寄存器 | ARM 寻址)
推荐阅读最新更新时间:2024-11-13 16:48