• ARM架构芯片中,所有的运算都是再CPU内部进行的,有哪些数据运算的指令呢?

      所有的数据都是在**CPU**内部处理的

    • 可以参考《DEN0013D_cortex_a_series_PG.pdf》P70、《ARM Cortex-M3与Cortex-M4权威指南.pdf》第5章获取数据处理指令的相关资料;《DEN0013D_cortex_a_series_PG》是cortex-A7的手册

    • image.png
    • 数据处理指令非常多,UAL格式为:
      • image.png
      • 并不需要掌握全部的指令,掌握若干条就足够了
    • image.png
    • 掌握MOV/ADD/SUB/AND/BIC/ORR/CMP等指令即可

      1.加法指令ADD:

      1. ADD R1, R2, R3 ; R1 = R2 + R3
    1. ADD R1, R2, #0x12 ; R1 = R2 + 0x12

    2.减法指令SUB:

    1. SUB R1, R2, R3 ; R1 = R2 - R3
    2. SUB R1, R2, #0x12 ; R1 = R2 - 0x12

    3.位操作:

    1. ; VisUAL里不支持(1<<4)这样的写法,写成:0x10
    2. **AND **R1, R2, #(1<<4) ; 位与,R1 = R2 & (1<<4)
    3. AND R1, R2, R3 ; 位与,R1 = R2 & R3
    4. **BIC **R1, R2, #(1<<4) ; 清除某位,R1 = R2 & ~(1<<4)
    5. BIC R1, R2, R3 ; 清除某位,R1 = R2 & ~R3
    6. **ORR **R1, R2, R3 ; 或操作, R1 = R2 | R3

    4.比较:

    1. **CMP** R0, R1 ; 比较R0-R1的结果
    2. CMP R0, #0x12 ; 比较R0-0x12的结果
    3. **TST **R0, R1 ; 测试R0 & R1的结果
    4. TST R0, #(1<<4) ; 测试R0 & (1<<4)的结果

    比较的结果会影响到程序状态寄存器

    • 程序状态寄存器中会被运算影响的bit:
      • image.png
      • N/Z/C/V