浅述ARM汇编的立即数
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
浅述ARM汇编的立即数
大多数的数据处理指令和部分状态寄存器访问指令用到立即数,在ARM
中不是所有数都能用作立即数;
一条典型的ARM 汇编语法格式:
{cond}{S} ,,其中opcode: 指令助记符,如ADD、SUB、MOV 等;cond: 条
件码助记符,如EQ(0000)、NE(0001)、AL(1110)等;S:如果指令有S 后缀,
则该指令的操作会影响CPSR 的值;Rd:目标寄存器;Rn: 包含第一个源操作
数的寄存器;shifter_operand: 表示第二个源操作数,可以为立即数。
一条典型的ARM 汇编编码格式:
操作数的语法格式:#其中,=immed_8 循环右移(2*rotate_imm)
immediate: 立即数immed_8 : 8 位的常数rotate_imm: 4 位的循环右移值
意思是每个立即数都是由一个8 位的常循环右移偶数位得到。
ROR 循环右移:即将操作数循环按指定的数量向右循环移位,左边用右边
移出的位来填充;
例如:有效的立即数:0x104、0xff0immediate : 0x104// 0001 0000 0100 immed_8 : 0x81// 0100 0001 左边补0: 0x00000081// 0000 0000 0000 0000 0000 0000 1000 0001rotate_imm: 15 // 循环右移(2*15)位// 0000 0000 0000 0000 0000 0001 0000 0100// 0x0000 0104
immediate : 0xff0 // 1111 1111 0000 immed_8: 0xff// 1111 1111 左边补0: 0x000000ff// 0000 0000 0000 0000 0000 0000 1111 1111rotate_imm: 14// 循环右移(2*14)位// 0000 0000 0000 0000 0000 1111 1111 0000 // 0x0000 0ff0
无效的立即数不能通过上面的构造方法得到: