汇编指令---mov解析
来源:互联网 发布:淘宝移动端优惠券链接 编辑:程序博客网 时间:2024/05/30 05:08
在使用mini2440,cpu如何从跳转到SDRAM 执行时。有句代码如下:
关闭看门狗:
mov r1, #0x53000000mov r2, #0x00str r2, [r1]</span>
mov指令等用法又是什么呢?(后面补)。
数据传送指令mov, 寄存器到寄存器,或者立即数到寄存器等 mov将一个寄存器的值赋值给另一个寄存器。
mov r1, r2 /* r1 = r2*/
mov r1, #4096 /* r1 = 4096*/ mov 指令限制了立即数的范围只能是12位
那么0x53000000是个32位的,不是超过来立即数范围来么?那立即数是如何进行计算的?
可看 原文
描述如下:
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 @ nop 指令
<span style="font-size:14px;">#define INT_CTL_BASE0x4A000000#define oINTMSK0x08#define oINTSUBMSK0x1Cmovr1, #INT_CTL_BASEmovr2, #0xffffffffstrr2, [r1, #oINTMSK]ldrr2, =0x7ffstrr2, [r1, #oINTSUBMSK]</span>
ldr r1, =0x53000008
- 汇编指令---mov解析
- 汇编总结:mov指令
- ARM汇编之MOV指令
- 汇编指令 MOV、MOVSB、MOVSW、
- 一天一个汇编指令&& mov
- 汇编lea 指令与 mov 指令
- 汇编Lea 指令与 Mov 指令
- 汇编Lea 指令与 Mov 指令
- 汇编Lea 指令与 Mov 指令区别
- 汇编Lea 指令与 Mov 指令
- 汇编 lea指令和mov指令
- 汇编Lea 指令与 Mov 指令
- 汇编指令mov的集中形式
- 第006课 汇编-MOV指令
- 比较汇编指令 LEA 和 MOV
- arm汇编—str,mov等指令
- 2 mov赋值指令与内联汇编
- 关于汇编指令中的mov的笔记
- 【EDNChina原文搬家】2014.1.1 之二
- Javascript实用代码收集
- C#_01_Hello World
- 厦大旅行之感悟2014.9.15
- HDU5011-Game(博弈)
- 汇编指令---mov解析
- 英文电子书下载站
- TCP为什么需要3次握手与4次挥手
- 大数相乘
- 跨站脚本攻击
- C#学习笔记-定义类成员
- 下拉框三角换成图、重构select、下拉框样式、select样式
- 电子基础知识:常用电子元器件和基本工具
- 详解Android中AsyncTask的使用