1. 汇编指令格式
1.1 基本格式
<OPCODE>{COND}{S} {Rd},{Rn}{,operand2}
<>内的项是必须的,{}内的项是可选的
OPCODE:指令操作码,如LDR、STR等。是必需的。CODE:指令执行的条件码,如EQ、NE等。是可选的。S:是否影响CPSR寄存器的值,有则影响,否则不影响。Rd:目标寄存器。Rn:第2个操作数,该操作数可以是立即数,或寄存器或寄存器移位。
1.2 第二个操作数(operand2)
- 8b位图
operand2可以是8b位图:由一个8b的无符号数,在前面填充24个0后形成32位数,循环移位偶数位得到的32位数。
举例:
MOV R0,#1 ;R0=1
AND R1,R2,#0X0F ;R2进行0x0F逻辑与运算,结果保存在R1
LDR R0,[R1],#-4 ;读取R1地址中存储器单元内容到R0,且R1=R1-4
- Rm
operand2为寄存器时,操作数为寄存器中的数值。
举例:
SUB R1,R1,R2 ;R1-R2->R1
LDR R0,[R1],-R2 ;读取R1地址中存储器单元的内容存入R0,且R1=R1-R2
- Rm,Shift
operand2为寄存器移位,操作数为寄存器的移位结果,担Rm的值不变。移位方式如下:
LSL #n 逻辑左移n位(0<=n<=31)
LSR #n 逻辑右移n位(1<=n<=32)
ASR #n 算术右移n位(1<=n<=32)
ROR #n 循环右移n位(1<=n<=31)
RRX 带进位的循环右移一位
偏移量可为立即数或寄存器,举例:
ADD R1,R1,R1,LSL #3 ;R1=R1x9
MOV PC,R0 ;R2进行0x0F逻辑与运算,结果保存在R1
SUB R1,R1,R2,LSR R3 ;R1减去R2逻辑右移R3位,然后存入R1
1.3 条件码(cond)
ARM条件码
| 条件码助记符 | 标志 | 含义 |
|---|---|---|
| EQ | Z=1 | 相等 |
| NE | Z=0 | 不相等 |
| CS/HS | C=1 | 无符号数大于或等于 |
| CC/LO | C=- | 无符号数小于 |
| MI | N=1 | 负数 |
| PL | N=0 | 正数或零 |
| VS | V=1 | 溢出 |
| VC | V=0 | 没有溢出 |
| HI | C=1,Z=0 | 无符号数大于 |
| LS | C=0,Z=1 | 无符号数小于或等于 |
| GE | N=V | 带符号数大于或等于 |
| LT | N!=V | 带符号数小于 |
| GT | Z=0,N=V | 带符号数大于 |
| LE | Z=1或N!=V | 带符号数小于或等于 |
| AL | 任何 | 无条件执行 |

3413

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



