• GBA平台ARM学习手记 第二天

    2009-02-25

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://www.blogbus.com/liuyanghejerry-logs/35725326.html

    第二天

    基本命令的基本用法:

     

    LDR

    例:ldr r1,=0x0FF

    ldr命令有2个参数,
    r1是寄存器,0x0FF被称为立即数.
    ldr命令把立即数装入寄存器.

     

    STR *有疑问

    例:str r1,[r2]
    str命令有2个参数,
    第一个数是寄存器,第二个则是内存单元.
    str命令把前面的寄存器的内容拷贝给内存单元.
    (这里有一点迷惑,教程里这样说:"是将r1寄存器的内容放进r2寄存器所指向的内存单元",那么[r2]究竟是r2么?内存单元是什么?)

     

    MOV

    例:mov r0,r1
    mov命令有2个参数,
    二者都是寄存器.
    mov命令把后一个寄存器中的值(其实也可以是一个立即数)复制给前面那个寄存器.
    (教程里特别强调了当r1的位置是立即数时,该立即数只能是8位,也就是一个字节,LDR则可以是32位,4字节;但另一个ARM速查文档中却没有提到)

     

    CMP

    例:CMP r0, r4
    CMP有2个基本参数(CMP有拓展用法)
    两个参数分别可以是内存单元、寄存器、立即数中的任意一个.
    CMP将用第一个参数的值减去第二个参数的值,然后判断结果.CMP的减法结果不会被保存.
    CMP将会产生以下几种结果:
                  EQ :EQual(相等)
                 NE :Not Equal(不相等)
                 VS :oVerflow Set(溢出设置)
                 VC :oVerflow Clear(溢出清除)
                 HI :HIgher(高,大)
                 LS :Lower or the Same(低或相等)
                 PL :PLus(加)
                 MI :MInus(减)
                 CS :Carry Set(进位设置)
                 CC :Carry Clear(进位清除)
                 GE :Greater than or Equal(比较起来大或相等)
                 GT :Greater Than(比较起来大)
                 LE :Less than or Equal(比较起来小或相等)
                 LT :Less Than(比较起来小)
                 Z  :is Zero(零)
                 NZ :is Not Zero(非零)
               
    这些结果会被储存在r15这个标志位寄存器中留给后面的语句使用.(标志位也被叫做S位,二者是一个意思么?)


    B
    例:b label1
    B命令只有一个参数,它是标签名.
    B命令相当于VB中的GOTO,把程序的焦点转移到目标标签,这时的B是无条件跳转.B没有执行完标签返回的功能.

    B命令也可以用在CMP之类的命令后,作为有条件的跳转:
    CMP r0, r4
    BEQ label34;我们可以把BEQ假想为"B to label34 if EQ".label34只是个标签

     

     

    分享到: