Advertisement

小白进阶之路之汇编1

阅读量:
复制代码
    title 汇编语言知识总结
    tages:汇编

介绍

汇编也是一门编程语言,与Java,c++,python等高级语言无异,汇编更加接近硬件,代码执行效率高;汇编语言语法只是一套公共协议,目的是方便程序员进行程序开发(开发效率低的,执行效率高)

执行效率:二进制>汇编>c>java

常见的CPU架构

不同的CPU对应的语法指令不同(x86为主,ARM为辅)

  • x86架构:PC端主流 高性能高功耗(c盘 program file(x86))
  • ARM架构:移动端主流 体积小低功耗(iPhone、安卓手机)
  • MIPS架构:龙芯3号 国产CPU

架构:一套规则(CPU不等于架构);不同架构使用的指令集不一样(汇编语法大致相同),所写关键字不一样,x86使用了CISC复杂指令集;ARM采用了RISC精简指令集(RISC是CISC简化后的精华部分)

寄存器

(借助寄存器操控CPU和内存<通过更改寄存器当中的数据间接操控>)<汇编的基石>

寄生在CPU上存放数据的容器,计算机上存放数据的容器(不止一个)还有内存条(能够装下无限),硬盘等

  • 寄存器只是临时数据的存储,硬盘就是一直存储着数据
  • 寄存器靠近CPU,读写数据速度远大于内存(速度非常快)<由寄存器本身的性质决定>

缓存

寄存器不等于缓存,由于CPU执行速度太快,而内存读写数据远远跟不上(速度相差悬殊),这时需要借助缓存进行数据缓存缓冲,相当于是寄存器和内存之间的中间桥梁,这样CPU在执行指令的时候能够有源源不断的数据供给。(使系统不会卡顿)

寄存器的数量

在高级语言中如果要对两个变量进行数据交换,通常用temp临时变量

复制代码
    int a=1;
    int b=2;
    int temp;//数据交换,相当于三个容器(寄存器)
    temp=a;
    a=b;
    b=temp;

寄存器越多越方便数据交换,自然运算效率越高

每种CPU都有相应的寄存器

寄存器的分类

  • 通用寄存器(通用):用于存放临时数据,可以简单的理解为高级语言中的临时变量(每个架构中都有,存放一般性的通用的临时数据,来者不拒)
    例:在8086CPU(x86架构)中,通用寄存器有好几个,如ax,bx,cx,dx(存放临时数据,任意存放)

  • 段寄存器(特有):内存分段管理x86架构中分为数据段、代码段和线段 ARM架构中没有段寄存器

  • 浮点寄存器(特有):专用于浮点数的运算

  • 向量寄存器(特有):专用于向量运算、图形运算<特有的某些架构专属>

  • 标志寄存器

  • 状态寄存器

通用寄存器的命名

在x86架构中,一共有四个通用寄存器;以16位x86为例,分别取名为ax,bx,cx,dx,最大只能装16位的数据

在ARM架构中,一共有31个通用寄存器,以64位arm为例,从x0到x30

在MIPS架构中,一共有32个通用寄存器,从 $0到dollor31(数量不变)

复制代码
    在x86架构中,不同精度的CPU通用寄存器名称有所区分
    0x1122334455667788
      ================rax(64 bits);字母r(registers)开头表示64位寄存器
          ========eax(32 bits);e开头表示32位寄存器 e(extand扩展)<在64位库中发现是表示寄存器中的低32位>
              ====ax(16 bits);默认ax表示16位寄存器
              ==  ah(8 bits)
                ==al(8 bits)<向下兼容>

386以前,CPU寄存器的19位,用AX,BX等表示;386及以后,寄存器是32位的

复制代码
    在ARM架构中,不同精度CPU通用寄存器名称有所区分
    0x1122334455667788
      ================xN(64 bits);x开头表示64位寄存器 从x0到x30
          ========wN(64 bits);wN表示64位寄存器中的低32位 64位CPU中才有32位中无
          ========RN(32 bits);字母R开头表示32位寄存器(RN或rN)<N为自然数>
汇编代码转换工具

工具:https://godbolt.org/(把高级语言代码转换成汇编语言)

全部评论 (0)

还没有任何评论哟~