ARM汇编指令1 - 指令格式和寻址方式

一. ARM汇编指令介绍

        学习过C语言编译的四个阶段的都知道,C文件通过预处理和编译形成汇编文件,汇编文件就是由一条条汇编指令组成。汇编指令可以通过ARM汇编手册翻译成二进制。

        ARM寻址方式是指根据指令中操作数的信息来寻找操作数实际物理地址的方式。根据指令中操作数的不同格式,ARM支持的寻址方式有立即数寻址,寄存器寻址,寄存器间接寻址,基址变址寻址,多寄存器寻址,相对寻址和堆栈寻址。

二. ARM指令格式

1. 指令的表示方式

        32位的ARM的机器,指令的表示格式是由32位的二进制表示,CPU根据二进制的代码完成所需要的操作,如下是一条指令的示意图

         ARM指令分为五个域,第一个是条件码域,如图cond,第二个是指令代码域,如图opcode,第三个是地址基址域,如图Rn,第四个是目标或源寄存器,如图Rd,第五个是地址偏移或操作寄存器,如图op2

2. 指令格式

        <opcode>{<cond>}{S} <Rd>, <Rn> {, <op2>}

< > :表示其中内容不可缺少;{ } :表示内容可省略

<opcode> :表示操作码,例如,ADD表示算数加法。

{<cond>} :表示指令执行的条件域,例如,EQ,NE等。

{S} :决定指令执行是否会影响CPSR的值,使用该后缀则指令执行会影响CPSR的值,否则不影响。

<Rd> :表示目的寄存器。

<Rn> :表示第一个操作数,为寄存器

<op2> :表示第二个操作数,可以是立即数,寄存器或寄存器以为操作数。

示例:

        LDR R0, [R1] ; 读取R1地址上的存储单元的数据到寄存器R0

        BEQ ENDDATA ; 如果上一条指令执行条件相等,则跳转到ENDDATA

        ADDS R2, R1, #1 ; 寄存器R1的内容加1后存入寄存器R2,并影响CPSR寄存器。

三. ARM指令寻址方式

1. 立即数寻址

        当操作数是立即数的指令,对应的寻址方式成为立即数寻址

举例

        MOV R0, #15 ; #15为立即数,立即数以"#"为前缀,十六进制的立即数以0x表示,二进制的立即数以0b表示。

2. 寄存器寻址

        利用寄存器中的数值作为操作数。

举例

        ADD R0, R1, R2 ; R0 <= R1 + R2

3. 寄存器间接寻址

        以寄存器中的值作为操作数的地址,操作数本身存放在存储器中。

举例

        LDR R0, [R4] ; R0 <= [R4]

4. 寄存器以为寻址

        寄存器移寻址的操作数由寄存器中的数值做相应移位而得到。

举例

        ADD R0, R1, R2, LSL #1

        MOV R0, R1, LSL R3             

5. 基址变址寻址

        将寄存器的内容与指令中给出的地址偏移量相加,从而得到一个操作数的有效地址。

举例

        LDR R0, [R1, #4] ; R0 <= [R1+4]

        LDR R0, [R1, #4]! ; R0 <= [R1+4], R1 <= R1+4 

        LDR R0, [R1], #4 ; R0 <= [R1], R1<=R1+4

        LDR R0, [R1, R2] ; R0 <= [R1+R2]

6. 多寄存器寻址

        采用多寄存器寻址方式,一条指令可以完成多个寄存器值的传送。一次最多可以传送16个通用寄存器的值,连续的寄存器之间用"-",否则用","分隔。

举例:

        LDMIA R0!, {R0-R4} ; R1 <= [R0]

                                         ; R2 <= [R0+4]

                                         ; R3 <= [R0+8]

                                         ; R4 <= [R0+12]

7. 相对寻址

        相对寻址以程序计数器PC的当前值为基地址,指令的地址标号作为偏移量,将两者相加得到操作数的有效地址。

举例

        BL proc

proc:

        MOV R0, #1

        跳转到proc处运行

四. 总结

        32位CPU的ARM指令可以被翻译成4字节的机器码,可以被机器识别。ARM寻址方式有立即数寻址,寄存器寻址,寄存器间接寻址,寄存器移位寻址,基址变址寻址,多寄存器寻址,相对寻址。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值