ARM立即数问题
来源:互联网 发布:淘宝童装店铺名 编辑:程序博客网 时间:2024/05/22 12:00
最近学习汇编,遇到一个问题,我把截图贴在下面
上面可以看出,相信应该有人感到郁闷吧,为啥oxffffffff可以识别,而ox1ff却不行,网上查了好多资料,所以总结一下,
<immediate>=immed_8循环右移(2*rotate_imm)
immediate : 立即数
immed_8 : 8位的常数
rotate_imm : 4位的循环右移值(用来存放移位的次数)
简单的说一个立即数可以由一个8位的常数循环移位偶数位得到,ARM的一条指令是32位,其中只能用指令机器码32位中的低12位来表示要操作的常数。ARM处理器是按32位来处理数据的,ARM处理器处理的数据是32位,如果简单的用这12位来表示,显然范围太小了,为了扩展到32位,因此使用了构造的方法,在12位中用8位表示基本数据值,用4位表示位移值,通过用8位基本数据值往右循环移动4位位移值*2次,来表示要操作的常数。这里要强调最终的循环次数是4位位移值乘以2得到的,所以得到的最终循环次数肯定是一个偶数,为什么要乘以2呢,实质还是因为范围不够,4位表示位移次数,最大才15次,加上8位数据还是不够32位,这样只能通过ALU的内部结构设计将4位位移次数乘以2,这样就能用12位表示32位常数了。
立即数的判断?
0x1FC(0000 0000 0000 0000 0000 0001 1111 1100) 1的位数小于8,满足要求
而 0x1FF(0000 0000 0000 0000 0000 0001 1111 1111)是非法的
而0xffffffff虽然不满足立即数的条件,但它满足有效数条件。对于有效数,它的反码满足立即数的条件,编译器会自动的把它变换为mvn r1, #0,所以一个数是立即数或者一个数的反码是立即数的都可以满足条件。
当然也可以使用伪指令满足我们的要求,当然了,这样做是有弊端的,
LDR R1, =count
LDR R1, =0X1FF
阅读全文
0 0
- ARM立即数问题
- ARM数据处理指令中的立即数问题
- ARM立即数
- ARM中的立即数
- ARM 的立即数
- ARM立即数 合法性
- arm立即数
- ARM汇编立即数合法性
- 判断ARM立即数合法性
- 1194: ARM立即数寻址
- ARM指令-合法立即数
- arm立即数判断技巧
- ARM---判断合法立即数
- 浅述ARM汇编的立即数
- ARM中的MOV指令 立即数合法性
- ARM 汇编中的立即数前缀
- ARM中判断立即数是否有效
- 关于ARM立即数的理解
- 【Python语法笔记】集合
- ubuntu配置主从数据库
- 正则表达式
- 插入排序&希尔排序
- Burp Suite基础教学 之 安装及环境(Java)的配置
- ARM立即数问题
- Mysql事务级别详解
- poj1061青蛙的约会
- java框架 作业1
- JavaScript常见算法面试题
- android学习---活动的生命周期
- Find a Position in a Genome Minimizing the Skew
- Entity Framework Core 使用HiLo生成主键
- 使用Microsoft.AspNetCore.TestHost进行完整的功能测试