您的位置 首页 被动

ARM中的MOV指令

ARM中的MOV指令格式是这样的op2是占了12位,其中bit11-bit8是移位数(rotate),bit7-0是一个8位的立即数(imm),MOVRn,op2,执行之…

ARM中MOV指令格局是这样的

op2是占了12位,其间bit11-bit8是移位数(rotate),bit7-0是一个8位的当即数(imm),MOV Rn, op2,碑文之后,Rn=op2 >> (rotate * 2),这儿的移位是循环右移,这就决议了MOV指令不是一切的当即数都能一共的,以下是几个比如:

1、mov r3, #0x56000000

尽管0x56000000是一个32位的数,可是能够找到这么一个8位当即数,经过右移得到,看下机器码e3a03456,展开成二进制,对照下格局

1110 0011 1010 0000 0011 0100 0101 0110

cond[31:28]=1110

[27:26]=00

L[25]=1,代表op2是一个当即数

OpCode[24:21]=1101

S[20]=0

Rn[19:16]=0000

Rd[15:12]=0011,R3

Op2[11:8]=0100,右移4 * 2位

Op2[7:0]=0101 0110,8位当即数,0x56

首要要将0x56扩展成32位的无符号数,0x00000056,然后循环右移8位,就得到了0x56000000

2、mov r3, #0x56000014

0x56000014是无法经过移位来得到的,这时编译器会报错,C言语编写的程序,编译器会这样来处理:

mov r3, #0x56000000

add r3, r3, #0x14

替代mov的别的一条指令便是ldr,或许会更便利点。

看了2440的datasheet,最令人费解的便是rotate了,习惯了C言语里的逻辑右移,把循环右移和逻辑右移混杂了。

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

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

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

微信扫一扫关注我们

返回顶部