第2-2章 ARM处理器的指令格式

ARM处理器的指令集

  • 跳转指令
  • 数据处理指令
  • 程序状态寄存器(PSR)传输指令
  • 加载/存储指令
  • 协处理器指令
  • 异常产生指令

ARM处理器的指令格式

一般指令格式:

{}{S} , {, }
格式 含义
Opcode 指令助记符
Cond 指令执行的条件码
S 决定指令的操作是否影响CPSR的值,选择时影响CPSR值
Rd 目标寄存器
Rn 包含第1个操作数的寄存器
Operand2 表示第2个操作数

ARM指令寻址方式

  • 数据处理指令的操作数寻址方式

    • 立即数方式

    每个立即数由一个8位的常数右移偶数位得到,其中循环右移的位数由一个4位二进制的两倍表示

    • 寄存器方式

    操作数即为寄存器的数值

    • 寄存器移位方式

      • LSL(Logical Shift Left, 逻辑左移):低位用零来填充
      • LSR(Logical Shift Right, 逻辑右移):左端用零来填充
      • ASR(Arithmetic Shift Right, 算术右移):左端用第31位的值来填充
      • ROR(Rotate Right, 循环右移):左端用右端移出的位来填充
  • 字及无符号字节的Load/Store指令的寻址方式

    Load指令用于从内存中读取数据放入寄存器中,Store指令用于将寄存器中的数据保存到内存中

    ldr|str{}{B}{T} , 
    • 偏移量方法。基址寄存器中的数值和地址偏移量作加或减运算,生成操作数的地址
      • ldr r0, [r1, #4] ;(r1 + 4)单元中的内容读取到r0寄存器中
      • ldr r0, [r1, -r2] ;(r1 - r2)单元中的内容读取到r0寄存器中
      • ldr r0, [r1, r2, LSL #2] ;(r1 + 4 * r2)单元中的内容读取到r0寄存器中
    • 事先更新方法。基址寄存器中的数值和地址偏移量作加或减运算,生成操作数的地址。指令执行后,生成的操作数地址被写入到基址寄存器
      • ldr r0, [r1, #4]! ;(r1 + 4)单元中的内容读取到r0寄存器中,同时r1 += 4
      • ldr r0, [r1, -r2]! ;(r1 - r2)单元中的内容读取到r0寄存器中,同时r1 -= r2
      • ldr r0, [r1, r2, LSL #2]! ;(r1 + 4 * r2)单元的内容读取到r0寄存器中,同时r1 += 4 * r2
    • 事后更新方法。指令将基址寄存器的数值作为操作数的地址执行内存访问。基址寄存器的值和地址偏移量作加减运算,生成操作数的地址。指令执行后,这个生成的操作数地址被写入基址寄存器
      • ldr r0, [r1], #4 ;r1单元中的内容读取到r0寄存器中,同时r1 += 4
      • ldr r0, [r1], -r2 ;r1单元中的内容读取到r0寄存器中,同时r1 -= r2
      • ldr r0, [r1], r2, LSL #2 ;r1单元中的内容读取到r0寄存器中,同时r1 += 4 * r2
  • 杂类Load/Store指令的寻址方式

    ldr|str{}H|SH|SB|D , 
  • 批量Load/Store指令的寻址方式

    批量Load/Store指令用于实现在一组寄存器和一块连续的内存单元之间传输数据

    ldm|stm{}  {!}, {^}

    其中可以有4种寻址方式

    • IA(Increment After, 事后递增方式)
    • IB(Increment Before, 事先递增方式)
    • DA(Decrement After, 事后递减方式)
    • DB(Decrement Before, 事先递减方式)

    当堆栈指针指向最后压入堆栈的数据时,称为满堆栈(Full Stack)

    当堆栈指针指向下一个将要放入数据的空位置时,称为空堆栈(Empty Stack)

    • FA(Full Ascending, 满递增堆栈):堆栈指针指向最后压入的数据,且由低地址向高地址生成
    • FD(Full Decending, 满递减堆栈):堆栈指针指向最后压入的数据,且由高地址向低地址生成
    • EA(Empty Ascending, 空递增堆栈):堆栈指针指向下一个将要放入数据的空位置,由低地址向高地址生成
    • ED(Empty Decending, 空递减堆栈):堆栈指针指向下一个将要放入数据的空位置,由高地址向低地址生成
  • 协处理器Load/Store指令的寻址方式

通常寻址方式 数据栈寻址方式
ldmda ldmfa
ldmia ldmfd
ldmdb ldmea
ldmib ldmed
stmda stmed
stmia stmea
stmdb stmfd
stmib stmfa

你可能感兴趣的:(第2-2章 ARM处理器的指令格式)