ARM中的MOV指令 立即数合法性
来源:互联网 发布:家庭网络需要交换机吗 编辑:程序博客网 时间:2024/04/30 05:35
转载http://blog.csdn.net/tracing/article/details/6325308
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语言里的逻辑右移,把循环右移和逻辑右移混淆了。
- ARM中的MOV指令 立即数合法性
- ARM立即数 合法性
- ARM汇编立即数合法性
- 判断ARM立即数合法性
- ARM中的MOV指令
- ARM中的MOV指令
- ARM数据处理指令中的立即数问题
- ARM中当立即数作为第二个操作数(源操作数)时如何使用MOV指令
- ARM中的立即数
- ARM指令-合法立即数
- ARM指令中的"8位图"立即数格式
- ARM立即数,LDR和MOV的区别
- ARM立即数,LDR和MOV的区别 (转)
- ARM立即数,LDR和MOV的区别
- ARM立即数,LDR和MOV的区别
- ARM立即数讲解--LDR和MOV的区别
- ARM立即数讲解--LDR和MOV的区别
- ARM 汇编的mov操作立即数的疑问
- visio使用小技巧
- Windows Phone开发(5):室内装修
- 为什么要使用拉电阻
- PHP学习笔记:会话处理
- Windows Phone开发(6):处理屏幕方向的改变
- ARM中的MOV指令 立即数合法性
- Linux添加系统服务
- codeforces 243A
- css中background url不显示图片
- Windows Phone开发(7):当好总舵主
- Vistual C++ 中的C运行时库浅析
- Windows Phone开发(8):关于导航的小技巧
- Windows Phone开发(9):关于页面状态
- 如何区分pci设备