zoukankan      html  css  js  c++  java
  • 汇编指令及其特点

    基础知识

    指令与伪指令

    汇编指令:CPU机器指令的助记符,编译后得到1和0组成的机器码,由CPU读取执行

    伪指令:本质上不是指令,由编译环境提供,目的在于指导编译过程,最终不会生成机器码

    不同的ARM风格

    ARM官方汇编风格:指令一般大写,windows IDE开发环境常用。(譬如:LDR、STR)

    GNU风格的ARM汇编:指令一般小写,linux中常用。(譬如:ldr、str)

    ARM汇编的特点

    ARM汇编特点1:LDR和STR架构

    ARM采用RISC架构,CPU不能直接读取内存,需要将内存内容加载到CPU通用寄存器才能被CPU处理。

    ldr(load register):将内存内容加载到通用寄存器    

    str(store register):将指令存取通用寄存器

    用ldr和str组合就能很好实现数据交换

    ARM汇编特点2:八种寻址方式

    寄存器寻址 mov r1, r2             //把r2存入r1
    立即寻址 mov r0, #0xFF00           //把后面的数字存入r0
    寄存器移位寻址 mov r0, r1, lsl #3      //把r1左移3位后存入r1
    寄存器间接寻址 ldr r1, [r2]        //把r2这个内存地址所对应的值赋值给r1
    基址变址寻址 ldr r1, [r2, #4]       //把r2+4后的内存地址多对应的值存入r1
    多寄存器寻址 ldmia r1!, {r2-r7, r12}   //把r1到r7以及r12依次存在r1,r2,r3,r4,r5,r6,r7,r12
    堆栈寻址 stmfd sp!, {r2-r7, lr}      //把堆栈SP中的内容依次存在r2,r3,r4,r5,r6,r7,lr中
    相对寻址   beq flag           //跳转到标号flag
         flag:     

    ARM汇编特点3:指令后缀

    同一指令经常附带不同后缀,变成不同的指令。

    经常使用的后缀有:

    B(byte)功能不变,操作长度变为8位

    H(half word)功能不变,长度变为16位      //由于我们在32位系统中,依次操作32位的效率是最高的,所以一般用ldr

    S(signed)功能不变,操作数变为有符号 如 ldr ldrb ldrh ldrsb ldrsh   

    S(S标志)功能不变,影响CPSR标志位 如 mov和movs movs r0, #0

    ARM汇编特点4:条件执行后缀

    无后缀:mov r0, r1

    有后缀:moveq r0, r1    //如果eq后缀成立则执行mov r0, r1,如果不成立则本句代码作废

    注意:(1)条件执行后缀是否成立,不是取决于本句代码,而是取决于之前代码执行的结果

       (2)条件后缀决定了本句代码是否执行,而不会影响上一句和下一句代码是否被执行

    常用的一般就是EQ(equal)、NE(not equal)、GT(great than)、LT(less than)

    ARM汇编特点5:多级指令流水线

     

    为了让CPU处理起来更加的具有效率,CPU往往是一边执行指令的同时就在提前读取下面的指令了,对于三级流水线,以ARM为例子,在32位系统中,一条指令刚好4个字节。

    举例分析:假设有三条指令地址为:0xd002_0040、0xd002_0044、0xd002_0048

    当前已经执行到0xd002_0040,为了保证运行流畅高效,实际上CPU指令指针PC已经指向0xd002_0048了,开始做准备工作了。所以对应的,他们的地址分别为:PC-8和PC。

  • 相关阅读:
    (转载)C#控件缩写规范
    ToString()格式和用法大全,C#实现保留两位小数的方法
    C#数字前面如何补0
    (转载)C#语言开发规范
    (转载)C#:Enum、Int和String的互相转换,枚举转换
    [踩坑系列]URLEncode 中对 空格的编码有 “+”和“%20”两种
    [IDEA]IDEA设置注释模板
    [Mybatis]Mybatis 常用标签及功能整理
    [设计模式]静态代理
    记一次java电话面试
  • 原文地址:https://www.cnblogs.com/jxjl/p/6971323.html
Copyright © 2011-2022 走看看