ARM汇编编程基础之三-基本寻址方式与基本指令
时间:11-27
来源:互联网
点击:
需要说明的问题:
指令CMP r1,r2,其作用细节是:执行r1-r2的操作,如果结果为负数,则置位CPSR的N位,清零Z位;结果为0,则清零CPSR的N位,置位Z位;结果为正,则清零CPSR的N位,清零Z位。但r1-r2的结果并不保存。CMP指令通常用于分支跳转。例如,如下的C程序
int i,j;
if (i == j) {
i++;
} else {
j++;
}
如果使用汇编语句改写的话,就应该写为:
使用ldr指令将变量i的值放入r0
使用ldr指令将变量j的值放入r1
cmp r0, r1
addeq r0, r0, #1
使用streq指令将r0的值放入变量i中
beq label
add r1, r1, #1
使用str指令将r1的值放入变量j中
label
……
其中addeq, streq, beq这几条指令,是add, str, b指令的条件执行版本。讲到这里就不得不讲解一下什么是条件执行了。ARM指令集的所有指令均支持条件执行,条件执行指的是,指令可以根据执行时的情况(CPSR的条件代码标志位)决定自身是否被执行。eq表示如果CPSR的Z位为1(对于本程序,实际上就是r0的值与r1的值相等,因为cmp会根据r0与r1的值设置Z位)的情况下,该指令要执行,否则不执行。
其它条件助记符如下:
条件助记符 | 标志 | 含义 |
EQ | Z=1 | 相等 |
NE | Z=0 | 不相等 |
CS/HS | C=1 | 无符号数大于或等于 |
CC/LO | C=0 | 无符号数小于 |
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 | 任何 | 无条件执行 (指令默认条件) |
NV | 任何 | 从不执行(不要使用) |
ARM汇编编程寻址方式基本指 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)