电子电路->机器语言与指令集架构/CPU软核/CPU硬核->汇编语言与与编译器

1. 1 电子

元件是电子中的基本零件;而器件常由几个元件组成,有时也指较大的元件。

元件主要包括电阻、电容、电感;器件种类更多,有双极性晶体三极管、场效应晶体管、可控硅、半导体电阻电容等。

元件对电压、电流无控制和变换作用;而器件对电压、电流有控制、变换作用(放大、开关、整流、检波、振荡和调制等)。

参考:http://m.elecfans.com/article/589969.html 元件和器件的区别

1.2 电路

模拟电路:

处理模拟信号的电路,如一交流电压经运算放大器放大后输出一个较大的交流电压,处理的信号是连续变化的,如交流电流是连续的正弦波。模拟电路有运算放大器,调制和解调电路,震荡电路等。

门电路:实现基本逻辑运算(有与门、或门、非门、与非门、或非门、与或非门、异或门等几种)的单元电路。

数字电路:

处理数字信号的电路,电路处理的信号不是0就是1,0代表低电平,1代表高电平,基本组成原件就是门电路。由于它具有逻辑运算和逻辑处理功能,所以又数字逻辑电路

数字电路根据逻辑功能的不同特点,可以分成两大类:

一类叫组合逻辑电路(简称组合电路),另一类叫做时序逻辑电路(简称时序电路)。

组合电路在逻辑功能上的特点是任意时刻的输出仅仅取决于该时刻的输入,与电路原来的状态无关。

时序电路是任意时刻的输出不仅取决于当时的输入信号,而且还取决于电路原来的状态,或者说,还与以前的输入有关。有触发器、计数器、寄存器等。

2.机器语言与译码器

机器语言是用二进制代码表示,计算机能执行,机器指令的集合;

机器语言与译码器

指令(指令寄存器)=操作码(译码器将操作码翻译交给操作控制器)+地址码(送到地址寄存器);

参考:http://m.elecfans.com/article/666558.html 一文读懂处理器,内核,芯片三个概念的区别

参考:http://www.360doc.com/content/15/0929/22/1564981_502326554.shtml  寄存器和内存的关系

参考:https://blog.csdn.net/alianada/article/details/82142379  计算机底层是什么东西?

参考:https://www.eefocus.com/mcu-dsp/402521/r0同样采用ARM架构,苹果处理器凭啥比别的强?

参考:https://www.cnblogs.com/voidobject/p/3975552.html(转)处理器架构、指令集和汇编语言,三者有何关系?

参考:https://blog.csdn.net/p312011150/article/details/79612379汇编指令与机器码的相互转换

参考:https://blog.csdn.net/dark_tone/article/details/52426886指令到底是什么?机器码又是什么?

3.指令集架构/微架构

3.1 Intel指令集

Intel有x86,SSE,AVX指令集结构,AMD有x86,x86-64,3D-Now!指令集。

x86泛指一系列基于Intel 8086且向后兼容的指令集

1971年,Intel发明了世界上第一个商用微处理器—4004,只有45条指令,每秒执行5万条指令,运行速度只有108KHz,甚至比不上1946年世界第一台计算机ENIAC,但集成度却要高很多,集成晶体管2300只,重量还不到一盅司。

在Pentium 4 CPU中,SSE2指令一共144条,

SSE3又新增加了13条新指令,一条用于视频解码,两条用于线程同步,其余用于复杂的数学运算

SSE4又新增加了50条有助于编译、媒体、字符/文本处理和程序指向加速指令。

参考:http://www.360doc.com/content/15/0411/07/21966267_462329844.shtmlIntel CPU 发展简史

参考:https://baike.baidu.com/item/指令集/238130指令集

3.2 ARM指令集

ARM有共三种指令集:ARM指令集,Thumb指令集和Thumb-2指令集。其具体使用了什么指令集,芯片采用ARM V?

参考:https://www.cnblogs.com/voidobject/p/3975552.html

操作系统位数/CPU架构位数/指令集位数/向上兼容

操作系统的位数是说其所依赖的指令集的位数。

32位CPU:数据总线(DataBus)有32根,ALU能处理的数据位数。

向下(前)兼容

CPU向前兼容,64位CPU兼容32位指令集,所以64位CPU可以跑32位操作系统。

32位CPU兼容16位指令集,所以32位CPU可以跑16位操作系统。

如何实现向下兼容?

64位cpu是从16位发展过来的,依然是x86结构,原理和基本指令都是一样的。

bits 16                     ; 为16 位代码而编译  

mov eax, 1  ; 机器码是:66 b8 01 00 00 00 

16位编程使用了32位寄存器,编译器会自动加上default operand-size override prefix(默认操作数大小覆盖前缀)。

bits 32                     ; 为32位代码而编译  

mov eax, 1  ; 机器码是: b8 01 00 00 00 

这段代码的汇编语句是完全一样的,只不过是为32位代码而编译,它们的机器码就是不一样的。

操作64位寄存器的低32位,高32位会清0,例如mov eax, 0FFFFFFFCH,则整个寄存器为00000000FFFFFFFCH,高32位会被清0。

参考:https://zhidao.baidu.com/question/329146909.html寄存器如何向下兼容?

参考:http://book.51cto.com/art/201210/359658.htm通用寄存器

参考:https://zhidao.baidu.com/question/2011537345660325628.htmlCPU位数,操作系统位数

指令集是CPU选择的语言,而微架构是具体的实现。

3.3  微架构

电脑语言的「指令集架构」 vs. 执行语言载具的「处理器核心微架构」

指令集无法决定架构,x86指令集也可以用ARM架构。

指令集版本微架构用途

ARM V1ARM1

ARM V2ARM2, ARM3

ARM V3ARM6, ARM7

ARM V4StrongARM, ARM7TDMI, ARM9TDMI

ARM V5ARM7EJ, ARM9E, ARM10E, XScale

ARM V6ARM11, ARM Cortex-M

ARM V7ARM Cortex-A, ARM Cortex-M, ARM Cortex-R

ARM V8

ARM V9

ARM推出的通用的架构,缓存(cache)就是在内核中的,这些内核又名公版架构。

寒武纪自行开发的指令集DianNaoYu(电脑语),看似俗得不得了的名称,却真正是属于国产的芯片指令集。计算机这个行业指令集不值钱,却掌握着这个行业的话语权,intel开发的X86指令集霸占了桌面电脑话语权数十年,AMD不得不向其获取授权。

https://new.qq.com/omn/20191113/20191113A0II1A00 这么多号称国产芯片的公司,为什么寒武纪第一个成为独角兽公司?


3.4  ARM授权模式

     ARM提供三类CPU授权:

参考:https://blog.csdn.net/weixin_34146805/article/details/85779161 ARM介绍2:授权模式

3.4.1 指令集架构授权

ARM提供指令集以及设计规范。

2016年,三星发布了Exynos8 Octa 8890(Octa代表8核),这是三星第一款拥有自研架构的ARM芯片

自研架构=自研微架构≈cortex-A53,A73(公版微架构)

高通,基于ARM v7深度开发自己的处理器微架构。

苹果,基于ARMv7开发Swift微架构。

3.4.2软核授权

ARM提供CPU设计源代码,不允许更改,且不能剽窃。

多数厂商选择直接购买ARM CPU内核设计方案,然后与其它组件(比如GPU、多媒体处理、调制解调器等等)整合,制造出完整的SoC片上系统。

参考:

https://blog.csdn.net/baidu_35679960/article/details/77606930指令集架构、arm内核、SoC、处理器、CPU、GPU等的关系

https://blog.csdn.net/zzx1045917067/article/details/78575259ARM 指令集版本和ARM 版本

3.4.3硬核授权

ARM公司不提供设计源代码,提供类似于二进制代码的网表。

4.汇编语言与编译器

汇编语言:用助记符代替机器指令的操作码,用地址符号或标号代替指令或操作数的地址。

汇编语言和机器语言指令集是一一对应的,不同平台之间不可直接移植。

指令集架构(ISA):规定了处理器如何识别这些汇编指令,以及如何与上层交互,区分软件和硬件的界限。芯片的软件部分。指令集中的每一条指令对应着一条汇编指令和固定的实现电路,程序设计最小语言单位。

如add r1, r2, r3,

在XX指令集,1010代表add,所以这条指令的指令码部分就是1010,

但XX指令集,0000代表add,所以同样的二进制串在不同的指令集下有不同的解读。

在不同的汇编语言里它有不同的意思,有可能是代表r1=r2+r3 , 也有可能是代表r3=r2+r1。

参考:https://www.cnblogs.com/voidobject/p/3975552.html

参考:https://blog.csdn.net/qq_34322603/article/details/75276415

参考:https://blog.csdn.net/yangtalent1206/article/details/6247607?utm_source=jiancool

汇编语言和机器语言机器移植性差,因为针对特定指令系统,不同的CPU汇编语言和机器语言不能通用。

汇编语言和机器语言程序结构性差,不便于模块化设计,也造成可移植性差。

指令集架构是专利,不是版权。

ARM有ARM V1~V8指令集结构,(V8是指指令集版本号,ARM architecture)。

你可能感兴趣的:(电子电路->机器语言与指令集架构/CPU软核/CPU硬核->汇编语言与与编译器)