微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > ARM汇编编程基础之三-基本寻址方式与基本指令

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位)的情况下,该指令要执行,否则不执行。

其它条件助记符如下:

条件助记符标志含义
EQZ=1相等
NEZ=0不相等
CS/HSC=1无符号数大于或等于
CC/LOC=0无符号数小于
MIN=1负数
PLN=0正数或零
VSV=1溢出
VCV=0没有溢出
HIC=1,Z=0无符号数大于
LSC=0,Z=1无符号数小于或等于
GEN=V有符号数大于或等于
LTN!=V有符号数小于
GTZ=0,N=V有符号数大于
LEZ=1,N!=V有符号数小于或等于
AL任何无条件执行 (指令默认条件)
NV任何从不执行(不要使用)

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top