您的位置 首页 资料

ARM汇编指令的条件履行及其他相关细节

ARM指令在机器中的表示格式用32位的二进制数表示例如ADDEQSR0,R1,#8表示为下表31~2827~2524~212019~1615~1211~000000010100100010000…

ARM指令在机器中的表明格局用32位的二进制数表明

例如 ADDEQS R0,R1,#8 表明为下表

31~28

27~25

24~21

20

19~16

15~12

11~0

0000

001

0100

1

0001

0000

000000001000

cond

opcode

Rn

Rd

Op2

ARM指令一般分为5个域:

第一个域便是跟条件履行相关的cond,即条件码域

第二个是指令代码域,即 opcode ,

第三个域是地址基址Rn,即第一个操作数,为寄存器

第四个域是方针或源寄存器Rd,

第五个域是地址偏移或操作寄存器、操作数区,即Op2

上述指令的5个域为 0000 0010 1001 0001 0000 0000 0000 1000

16进制代码为0291008H ,指令功用是将R1和8相加,成果放入R0中

用助记符表明的ARM指令一般格局如下

{}{S},{,} 其间{}里的是能够省掉的

如上述的指令 ADDEQS R0,R1,#8

opcode是ADD ,cond是EQ,S代表的是第20位,{S}决议指令的履行成果是否影响CPSR的值,本例为1

Rd为R0,Rn为R1,op2为8

助记符中的{S}位,即32位机器码的第20位,在助记符中一般能够取S或!或空

取S的状况现已说了,加上S影响CPSR的值

加上!后缀,指令履行后,基址寄存器中的地址将产生如下改动:

基址寄存器中的值(指令履行后)=指令履行前的值+地址偏移量

如 LDR R3,[R0,#4]! , 指令的成果将R0加4作为地址指针,把这个指针所指向的地址单元所存贮的数据读入R3,而且把R0+4的值送到R0中

运用!后缀有必要留意以下事项:

1、 !后缀有必要紧跟在地址表达式后边,而地址表达式要有清晰的地址偏移量

2、!后缀不能用于R15(PC)的后边

3、!后缀当用在单个地址寄存器后边时,有必要保证这个寄存器有隐性的偏移量,例如

STMDB R1!{R3,R5,R7} 此刻的地址基址寄存器的隐性偏移量为4

好了 最终讲正题,条件的指令履行

前面说到cond有4位, [31:28],一共有16种组合 ,跟CPSR合作决议指令是否履行

如指令ADDEQ R4,R3,#1 ,带EQ标志位

只有当CPSR中的Z置位才履行该指令

又如前面的比如 ADDEQS R0,R1,#8 ,也是只有当CPSR中的Z置位才履行该指令

条件后缀和S后缀的联系如下

1、 假如既有条件后缀又有S后缀,则书写时S排在后边 如ADDEQS R1,R0,R2

该指令在Z=1时履行,将R0+R2的值放入R1,一起改写条件标志位

2、条件后缀是要测验条件标志位,而S后缀是要改写条件标志位

3、条件后缀要测验的是履行前的标志位,而S后缀是根据指令的成果改动条件标志。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/276827.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部