zoukankan      html  css  js  c++  java
  • arm笔记之MOV

    呃,这几天学习ARM,实在感受到很多不同的东西,功能相当是强大,但相比于学51PIC时的配置麻烦了很多,呵。

    开始最困惑的自然是ldrmov这两条指令的区别,还有mov的详细用法,看了半天的数据手册,才终于理解了。

    首先看下mov的指令编码形式


    再看几个例子,

    mov r0,#100 ;right

    mov r0,#300;wrong

    mov r0,#0x56000000;right

    mov r0,#0x56000010;wrong

    mov r0,r1;//r1=0x56000010,right

    mov r0,r1,LSR#4

    好了,现在逐个解释例子,并与上图联系起来,

    第一、二个例子:

           mov的目的操作数对应于上图的Rd[12..15],而第二个操作数由Operand2[0..11]指定,既可以是寄存器,也可以立即数,L(bit[25])决定,图中已有解释。

           Operand2bit[0..7]表示立即数,也就是说正常情况下,立即数的最大值不能大于255,否则出错,因此第一个例子正确,而第二个例子错误。

    第三个例子的立即数远大于255,为什么可以?

           这里就由Operand2Rotate[8..11]发挥作用了,Rotate4个,表示将先将Imm进行0扩展到32位,再右移2*Rotate的位置,在第三个例子中就Rotate就等于4,Imm等于0x56,从这里也可以看中例4为什么错了,因为不论怎样移位也得不到该立即数,这里总结一下,只要立即数是4的倍数且该数在尽可能移位后的数字小于256,就能直接使用mov.

    至于第56个例子,使用了寄存器,Rm[0..3](Rm不能为15)指定,而Shift[4..11]可以对Rm有更精确的控制,主要有

    ASR n :算术右移n (1<=n<=32)

    LSL n :逻辑左移n (1<=n<=31)

    LSR n :逻辑右移n (1<=n<=32)

    ROR n :循环右移n (1<=n<=31)

    RRX :循环右移1 位,带扩展

    写这些应该够了,学ARM还不久,有错误、疏漏之处还请务必指出,这样也可以多学到一点,呵。

     

  • 相关阅读:
    js技巧收集(200多个)
    我的博客开张了,欢迎大家前来做客
    认识ASP.NET配置文件Web.config
    C#纯数学方法递归实现货币数字转换中文
    Asp.Net细节性问题技巧精萃(转载)
    ASP.NET2.0+SQL Server2005构建多层应用
    ASP.NET页面间的传值的几种方法(转载)
    介绍几种 ADO.net 中的数据库连接方式
    hdu 1401
    poj 1338 丑数
  • 原文地址:https://www.cnblogs.com/pheye/p/1588793.html
Copyright © 2011-2022 走看看