• ARM汇编语言


    ARM 汇编语言

    ARM基本指令

    1. 分支指令
    指令功能功能
    B label {f,b}移动到label, label后面的选项f、b是位于下、上侧的labelb call_kernel
    BL label {f,b}和B相同,但lr中记录bl下一条指令的地址bl cache_on
    BX label {f,b}带状态切换的无条件跳转
    BLX label {f,b}带链接和状态切换的无条件跳转
    1. 算数运算指令
    指令功能功能
    ADD X Y ZX中保存Y与Z之和add r12, r12, #4*5
    SUB X Y ZX中保存Y减Z之差sub pc, lr, r0
    1. 逻辑运算符
    指令功能功能
    BIC X Y Z在Y中解除Z中设置的位并保存到X X=Y&~Zbic r3, r3, #0x3f00
    EOR X Y Z将Y和Z执行exclusive or运算并保存到X X=Y^Zeor r1, r1, r6
    ORR X Y ZRd=Rn1Norr r0, r0, #0x002d
    ANDX Y Z将Y和Z执行and运算的结果值保存到Xorr r0, r0, #0x002d
    1. 比较运算指令
    指令功能功能
    CMP X Y比较X和Y并更新状态标签cmp r1,r2
    TEQ X Y检查X和Y的值是否一致teq r6, ip
    TST X Y检查Y中设置的位是否全部设置到Xtst r1, r1
    1. 数据传输指令
    指令功能功能
    LDR X Y Z将Y+Z的地址中保存的值加载到Xldr r1, [r6, #0]
    LDM X{!} Rx-Ry从Rd中保存的地址依次取值并读入rx~ry的寄存器,每次都更新地址,后面有!时x的值会更新ldmfd sp!, {r4-r7, r9, pc }
    STM X{!} Rx-Ry将x指向的地址的值依次写入寄存器列表Rx-Ry,后面有!时x的值不会更新stmfd sp!, {r4, r5, r6, r7}
    1. 状态寄存器指令
    指令功能功能
    MRS X CPSR将CPSR的值读入Xmsr r2,cpsr
    MSR CPSR X检查X和Y的值是否一致mrs cpsr, r2
    1. 其他指令
    指令功能功能
    ADR X label将label的地址保存到Xadr r12, proc_types
    MOV X Y将Y的值保存到Xmov r0, r1
    1. 执行条件运算符
    后缀标签含义
    eqz=1相等
    nez=0不相等/标志
    hic=1,z=0无符号数大于
    cs/hsc=1无符号数大于或等于
    cc/loc=0无符号数小于
    lsc=0,z=1无符号数小于或等于
    gtz=0,n=v有符号数大于
    gen=v有符号数大于或等于
    ltn!=v有符号数小于
    lez=1,n!=v有符号数小于或等于
    min=1负数
    pln=0整数或0
    vsv=1溢出
    vc没有溢出
  • 相关阅读:
    Android---touch 事件分发
    服务的动态配置-Config
    大数据培训教程Shuffle机制
    SpringBoot集成Redis实战——步骤、坑点、解决方案
    牛客小白赛60(F.被抓住的小竹)&61(E.排队)(数学+推公式)
    WuThreat身份安全云-TVD每日漏洞情报-2022-12-07
    IDEA提高工作效率的实用技巧
    JAVA 抽象类和接口——万字理解
    scratch绘制红蓝线条 电子学会图形化编程scratch等级考试四级真题和答案解析2022年9月
    在线教育项目用户登录和注册
  • 原文地址:https://blog.csdn.net/wangxiandou/article/details/126683612