ARM -A9 基础学习
1)裸机程序 VS 应用程序
(1)应用程序中,.text/.rodata/.data/.bss段的位置是固定的,而裸机程序中需要指定这些段的位置
(2)应用程序中,栈非常大,在裸机程序中,栈非常小。
(3)应用程序中,有标准的库支持,而裸机程序中,没有标准库的支持。
2)ARM指令集
CUP & 指令集
CPU ARM7 ARM9 ARM10 ARM11 cortex-A8 cortex-A9
指令集 ARMv4 ARMv4 ARMv5 ARMv6 ARMv7 ARMv7
3)条件助记符(根据条件标志位(N Z C V)来判断条件是否成立)
条件助记符 条件标志位 含义 理解
EQ Z = 1 相等 int x, y
x - y
NE Z = 0 不相等 ...
CS C = 1 无符号的数大于或等于 unsigned int x, y;
x - y
CC C = 0 无符号的数小于 ...
MI N = 1 结果为负数 ...
PL N = 0 结果为正数或0 ...
VS V = 1 结果溢出 ...
VC V = 0 结果未溢出 ...
HI C = 1且Z = 0 无符号的数大于 CS 基础上排出等于
LS C = 0或Z = 1 无符号的小于或等于 CC 基础上加上等于
GE N = V 带符号的数大于或等于 int x, y;
x - y
N = 0 且 V = 0
--------------- -----
结果为正数或0 未溢出 说明原本结果为正数或0
N = 1 且 V = 1
-------------- ------
结果为负数 溢出 说明原本的结果为正数
LT N != V 带符号的数大于或等于 int x, y;
x - y
N = 0 且 V = 1
--------------- -----
结果为正数或0 溢出 说明原本的结果为负数
N = 1 且 V = 0
--------------- -----
结果为负数 未溢出 说明原本的结果为负数
GT Z = 0 且 N = V GE 基础上排除等于
LE Z = 1 或 N != V LT 基础上加上等于
4)逻辑位运算
按位与
0001 0011 data
&0000 1001 mask
--------------
0000 0001 结果
特点: mask为1的位, 对应的数据位保留, mask为0的位,对应的数据位被清0
按位或
0001 0011 data
|0000 1001 mask
--------------
0001 1011 结果
特点: mask为1的位, 对应的数据位被置1, mask为0的位,对应的数据位不变
按位取反
~0001 0011 data
---------------
1110 1100 结果
按位异或
0001 0011 data
^0000 1001 mask
--------------
0001 1010 结果
特点: mask为1的位, 对应的数据位取反, mask为0的位,对应的数据位不变
位清除
0001 0011 data
BIC 0000 1001 mask
--------------
0001 0010 结果
特点: mask为1的位, 对应的数据位清0, mask为0的位,对应的数据位不变
5)跳转指令
(1)B:
作用: 跳转指令B使程序跳转到指定的地址执行程序(跳转范围是PC -32Mb到PC+32Mb)
指令格式: B[cond] <label>
(2)BL:带连接的跳转指令BL将下一条指令的地址拷贝到r14(即返回地址连接寄存器LR)寄存器中,然后跳转到指定地址运行程序。
指令格式: BL[cond] <label>