小白进阶之路之汇编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为自然数>
