ARM汇编语言
1)简单的寄存器操作
ADD r0,r1,r2; 加法,r0 =r1 + r2;
ADC r0,r1,r2; 带进位的加法,r0 = r1+r2+C
SUB r0,r1,r2; 减法,r0 = r1 -r2;
SBC r0,r1,r2; 带进位的减法,r0 = r1 -r2 +C -1
RSB r0,r1,r2; 反向减法,r0 = r2 - r1
RSC r0,r1,r2; 带进位的反向减法,r0 = r2-r1+C-1
AND/ORR/EOR/BIC r0,r1,r2; 按位逻辑操作,and/or/xor/and not
MOV r0,r2; r0 = r2
MVN r0,r2; r0 = not r2
CMP/CMN/TST/TEQ r1,r2;比较/取反比较/位(and)测试/相等(xor)测试
2)立即数操作
ADD r3,r3,#1; r3 = r3 + 1
AND r8,r7,#& ff; r8 = r7[7:0]
3)寄存器移位操作
ADD r3,r2,r1,LSL #3; r3 = r2 + 8 x r1
LSL:逻辑左移0~31位,空出的最低bit用0填充
LSR:逻辑右移0~32位,空出的最高bit用0填充
ASL:算术左移0~31位,空出的最低bit用0填充
ASR:算术右移0~32位,源操作数为正数,空出的最高bit用0填充;负数,用1填充;
ROR:循环右移0~32位,移出的最低有效位依次填入空出的最高有效位
RRX:扩展1位的循环右移,操作数右移1位,第31位用原来标志位C填充,共33bit循环操作;
4)乘法
MUL r4,r3,r2; r4 = (r3 x r2)[31:0]
MLA r4,r3,r2,r1; r4 = (r3 x r2 + r1)[31:0]
5)寄存器间接寻址
LDR r0,[r1]; r0 = mem[r1]
STR r0,[r1]; mem[r1] = r0
6)基址偏移寻址
LDR r0,[r1,#4]; 前变址,r0 = mem[r1 + 4]
LDR r0,[r1,#4]!; 带自动变址的前变址,r0 = mem[r1 + 4],r1 = r1 +4
LDR r0,[r1],#4; 后变址,r0 = mem[r1],r1 = r1+ 4
7)多寄存器数据传送
LDMIA r1,{r0,r2,r5}; r0 = mem[r1],r2 = mem[r1 + 4],r5 = mem[r1 + 8]
8)堆栈寻址/块拷贝寻址等
略
9)转移指令
B LABEL
......
LABLE ......
10)条件指令
MOV r0,#0; 计数器初始化
LOOP ......
ADD r0,r0,#1; 循环计数器加1
CMP r0,#10; 与循环的限制比较
BNE LOOP; 如果不相等,则返回,否则循环中止;

11)条件执行

新的指令比原来的短小而快速。条件执行不仅应用于转移指令, 也应用于所有
ARM指令,注意实际编码时的用法。
12)转移和链接指令
注意程序或寄存器的保存和恢复;
13)子程序返回指令
压栈出栈等;
本文详细介绍了ARM汇编语言的基本操作,包括寄存器运算、立即数操作、移位操作、乘法、寄存器间接寻址、堆栈操作、转移指令、条件指令和子程序返回等,展示了其在程序设计中的应用。
7659

被折叠的 条评论
为什么被折叠?



