ARM 相关概念2

一、汇编中三种符号(汇编指令、伪指令、伪操作)

ARM 相关概念2_第1张图片

二、汇编基本格式

ARM 相关概念2_第2张图片

三、数据操作指令

ARM 相关概念2_第3张图片

3.1 数据搬移指令mov/mvn

ARM 相关概念2_第4张图片

① 示例

ARM 相关概念2_第5张图片

ARM 相关概念2_第6张图片

② 立即数

ARM 相关概念2_第7张图片

ARM 相关概念2_第8张图片

ARM 相关概念2_第9张图片

0xff000000 =====>判断的数
1111 1111 0000 0000 0000 0000 0000 0000   =====>判断的数
0000 0000 0000 0000 0000 0000 1111 1111  =====>找到0xff这个数 =====> 循环右移8位

0xf0000000 =====>判断的数
1111 0000 0000 0000 0000 0000 0000 0000   =====>判断的数
0000 0000 0000 0000 0000 0000 0000 1111  =====>找到0xf这个数 =====> 循环右移4位

0xf000000f =====>判断的数
1111 0000 0000 0000 0000 0000 0000 1111   =====>判断的数
0000 0000 0000 0000 0000 0000 1111 1111  =====>找到0xff这个数 =====> 循环右移4位

0x1FE00000=====>判断的数
0001 1111 1110 0000 0000 0000 0000 0000   =====>判断的数
0000 0000 0000 0000 0000 0000 1111 1111  =====>找到0xff这个数 =====> 循环右移11位

0x1F800000=====>判断的数
0001 1111 1000 0000 0000 0000 0000 0000   =====>判断的数
0000 0000 0000 0000 0000 0000 0111 1110  =====>找到0x7E这个数 =====> 循环右移10位

3.2 移位操作指令lsl/lsr/asr/ror

ARM 相关概念2_第10张图片

示例

    mov r0,#0xff
    
    @ 1.将r0寄存器中的值,逻辑左移4位,赋值给目标寄存器r1,值  
    lsl r1,r0,#0x4 @ r1 = r0 << 4 = 0xff0
    @ 0000 0000 0000 0000 0000 0000 1111 1111
    @ 0000 0000 0000 0000 0000 1111 1111 0000 
    
    @ 2.将r1寄存器中的值,逻辑右移4位,赋值给目标寄存器r2,值  r2 = r1 >> 4
    lsr r2,r1,#0x4  @ r2 = r1 >> 4 = 0xff
    @ 0000 0000 0000 0000 0000 1111 1111 0000 
    @ 0000 0000 0000 0000 0000 0000 1111 1111  
    
    @ 3.将r2寄存器中的值,循环右移4位,赋值给目标寄存器r3,值 
    ror r3,r2,#0x4 @ r3 = 0xf000000f
    @ 0000 0000 0000 0000 0000 0000 1111 1111 
    @ 1111 0000 0000 0000 0000 0000 0000 1111  
    
    ldr r4,=0x800000ff
    @ 4.将r4寄存器中的值,算数右移4位,赋值给目标寄存器r5,值
    asr r5,r4,#0x4  @ r5 = 0xf800000f
    @ 1000 0000 0000 0000 0000 0000 1111 1111 
    @ 1111 1000 0000 0000 0000 0000 0000 1111

3.3 位运算操作指令and/orr/eor/bic

ARM 相关概念2_第11张图片

① 示例1

ARM 相关概念2_第12张图片

② 示例2

ARM 相关概念2_第13张图片

3.4 算数运算操作指令add/adc/sub/sbc/mul

ARM 相关概念2_第14张图片

① 实现两个64位数相加

@第一个64位数:高32位用r0表示0x3   低32位用r1表示0xffffffff
@第二个64位数:高32位用r2表示0x4   低32位用r3表示0x1
@实现两个64位数相加:高32位相加r4,低32位相加r5    
    ldr r0,=0x3
    ldr r1,=0xffffffff
    ldr r2,=0x4
    ldr r3,=0x1
    adds r5,r1,r3 @ r5 = r1 + r3 = 0xffffffff + 0x1 = 0x0 ===> add 影响CPSR寄存器的C位
    adc r4,r0,r2 @ r4 = r0 + r2 = 0x3 + 0x4 + C  = 0x8 ===> adc    

② 实现两个64位数相减

    @第一个64位数:高32位用r0表示0x7   低32位用r1表示0x4
    @第二个64位数:高32位用r2表示0x4   低32位用r3表示0x5
    @实现两个64位数相减法:高32位相加r4,低32位相加r5
      
    ldr r0,=0x7
    ldr r1,=0x4
    ldr r2,=0x4
    ldr r3,=0x5
    subs r5,r1,r3 @ r5 = r1 - r3 = 0x4 - 0x5 = 0xffffffff ===> sub 影响CPSR寄存器的C位
    sbc r4,r0,r2  @ r4 = r0 - r2 = 0x7 - 0x4 - !C  = 0x2 ===> sbc 

③ 乘法指令

ARM 相关概念2_第15张图片

3.5 比较指令cmp

ARM 相关概念2_第16张图片

① 条件指令

ARM 相关概念2_第17张图片

② 示例

ARM 相关概念2_第18张图片

四、跳转指令

ARM 相关概念2_第19张图片

① 练习

ARM 相关概念2_第20张图片

五、特殊功能寄存器操作指令

ARM 相关概念2_第21张图片

你可能感兴趣的:(ARM,arm开发)