计组: 第一章CPU结构与设计 笔记

第一课----从开关到电子管的变化

逻辑运算

​ &(与), |(或), ^(亦或), ~(非),

电流控制器件

真空三极管

半导体

#### 		硅----核心: 在半导体内部电流只能从N向P跑

最外层电子是四个, 硅单质之间形成一组共价键.当从外界掺杂元素时: 

​ N形掺杂 : 掺杂磷元素, 载流子是多出来的电子

​ P形掺杂: 掺杂B后, 少一个电子, 形成空穴, 可以使电流移动

​ 如果一半是N形掺杂, 一半是P形掺杂, 点在会向P形区域移动。此时P区多出电子,N区少电子,此时N区形成正电,P区形成负电, 形成电场。最终会形成一种平衡,即在P/N区域中间形成一个耗尽层。 如果从N区接负极, P区接正级, 则可正常导流。 如果反接则不可导流。

Chat_Gpt:
N形掺杂(N-type doping):
	当硅中掺入五价元素如磷(P)时,磷原子将取代硅原子的位置,由于磷有五个价电子,多出的一个电子成为自由电子,增加了导电性。这种掺杂后的硅被称为N型硅,其中的自由电子是主要的电荷载体。
P形掺杂(P-type doping):
	当硅中掺入三价元素如硼(B)时,硼原子也取代硅原子的位置。由于硼只有三个价电子,相对于硅的四个价电子来说,会形成一个电子空穴。这个空穴可以作为载体移动,从而使电流流动。这种掺杂后的硅被称为P型硅,其中的空穴是主要的电荷载体。
PN结和耗尽层:
	当N型硅和P型硅结合时,会在接触界面附近形成PN结。在这个区域,自由电子和空穴相遇会发生复合,导致这个区域内形成一个电荷载体较少的耗尽层。耗尽层内部会形成内建电场,阻止电子和空穴的随机扩散。
PN结的导电性:
	当外部电压正确极化PN结(正向偏置,即N区接负极,P区接正极)时,耗尽层减小,电子可以从N区跨越到P区,空穴也能从P区移动到N区,因此导通。若反向偏置(N区接正极,P区接负极),耗尽层加宽,阻止载流子通过,因此不导电。
	这种控制导电性的能力使得PN结成为许多半导体设备的基础,包括二极管和晶体管。您的解释非常适用于理解半导体器件的工作原理。

MOSFET工作原理在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

MOSFET

​ 在P区和绝缘层施加电场后, 电子向上移动, 使得两个N区之间形成导通层(被称为N沟道)。 此时 左上方N 叫做 源极S,绝缘层 被称为栅极G,右上方N 即被称为 漏极D 。

​ 当电压高于阈值电压 可以导通, 当电压低于阈值电压 不能导通。 这种结构被称为NMOS管。

​ 当互换上图的N/P位置,此时小电源反接, 则会形成P沟道。此时这种结构被称为PMOS管。

MOSFET

​ 箭头方向代表栅极和衬底之间的电场方向。

​ CMOS管:

MOSFET
特性
  • 电压控制
  • 高输入阻抗
  • 响应速度快
  • 能耗低
  • 有N型和P型, 工作方式相反, 组合起来工作

第二课----计算机架构

冯诺依曼架构


冯诺依曼架构组成

两个重要思想
  • 采用存储程序原理
  • 数据以二进制形式编码
明确计算机组成结构
  • 1.运算器, 控制器
  • 2.存储器
  • 3.输入设备和输出设备

冯诺依曼架构特点

  • 1.以运算单元为中心
  • 2.采用存储程序原理
  • 3.存储器是按地址访问, 线性编址的空间
  • 4.控制流由指令流产生
  • 5.指令由操作码和地址码组成
  • 6.数据以二进制编码
  • 7.能自动从存储器中取出指令, 处理后执行

第三课----现代CPU的内部架构与特点

现代CPU特点

  • 1.多核多线程
  • 2.高频率高性能
  • 3.能效优化
  • 4.高级缓存系统
  • 5.向量化和SIMD指令, 虚拟化支持
  • 6.安全性和可靠性
  • 7.集成和片上系统(SoC)

CPU执行程序

CPU执行指令流的流程

  • 运算数据来源于编译生成的可执行机器码

注: ALU是运算器, 算数逻辑单元的意思

MOSFET
; 指令格式:
Operation Address1, Address2, Address3   ; 3地址指令

三地址指令格式

​ Addr2和Addr3是元数据地址, Addr1是目的数的地址

; Registrer Transfer Language(RTL)
[8000]  = 100	; 将100 存储到8000地址
[8000] = [8000] + 1 ; 将8000地址中的数据+1
; []表示里面的值所对应的存储空间, 例如[P]代表P值所对应的存储空间
; = 或者 <- 代表赋值. 因此第一条也可写作 [8000] <- 100

两地址指令格式

Operation Address1, Address2

​ 前者是源数据地址也是目的数地址, 后者是源数据地址

单地址指令

Operation Address1

常见于测试指令, 跳转指令


计算机的六大类指令

MOV A, B	
; 将B的值赋给A(一般来说是直接赋值到寄存器去. MOV R1, #10  这句话意思是直接将整数10赋值给R1寄存器)
LOAD A, B	
; 从B地址取出一个数据将其装在到A寄存器
STORE A, B 
; 把A寄存器中的内容存储到B地址(内存)
ADD A, B, C # ADD A, B
; 将B,C中的数据取出, 运算后放入A
TEST A
; 测试分支
BEQ Z
; 函数调用

在线编译器: https://godbolt.org

“PC”通常指的是“程序计数器”(Program Counter),它是计算机中的一个特殊的寄存器,用于存储即将被执行的指令在内存中的地址。程序计数器的功能和重要性可以从以下几个方面来理解:

  1. 指令定位: 程序计数器存储着当前正在执行的指令的位置或下一条指令的位置。当一条指令执行完成后,PC会更新为下一条指令的地址,这样CPU就可以知道接下来要从哪里获取指令。
  2. 指令顺序控制: 程序计数器帮助确保指令按正确的顺序执行。在大多数情况下,PC的值会递增,指向下一条连续的指令。但在执行跳转(例如条件分支或循环)等控制流指令时,PC的值会改变到一个非连续的地址。
  3. 支持循环和分支: 通过修改程序计数器的值,CPU可以实现代码中的循环和条件分支操作。例如,在一个条件语句或循环语句中,程序计数器可以根据条件的评估结果跳转到不同的代码段。
  4. 中断和异常处理: 在中断或异常发生时,程序计数器的当前值通常会被保存在特定的寄存器或内存位置。这允许处理器暂停当前程序的执行,转而处理中断或异常事件,事件处理完成后再恢复程序的执行。

总的来说,程序计数器是确保程序正确执行的关键组件,它连续地追踪指令执行的顺序和位置。在计算机架构的学习中,理解和掌握程序计数器的工作原理是非常重要的。

总结

  • 1.CPU只能执行机器码
  • 2.高级语言程序需要编译生成机器码才能执行
  • 3.CPU所执行指令全部来自存储器
  • 4.指令中包含操作和数据
  • 5.执行过程需要借助CPU内的寄存器
  • 6.CPU内部的PC寄存器的特殊作用

条件判断指令处理(ARM汇编指令和标签不区分大小写)

★ARM内核中典型的寄存器

ARM内核中典型的寄存器

后五行都是专用寄存器。

​ R13是sp栈寄存器, 其中存储的内容是栈空间栈的地址.

​ R14就是lr返回寄存器(链接寄存器)

​ R15 就是PC(program count)寄存器, CPSR状态寄存器,用于保存当前指令执行完毕后的状态。SPSR状态寄存器,用于保存当前程序状态, 常用于异常处理中的状态恢复

CPSR寄存器

1.条件标志位(Flags):

  • N(Negative): 当结果为负时置位
  • Z(Zero): 当结果为0时复位
  • C(Carry): 算数运算中, 如果最后一次操作产生了进位或错位, 则置位
  • V(overflow): 当发生有符号数运算溢出时置位

CPU循环处理

ARM内核中的可用条件语句

ARM内核中典型的寄存器

影响循环处理的部分因素

  • 1.数据依赖性
  • 2.分支预测
  • 3.寄存器分配

回顾

  • 1.跳转指令其实就是改变PC寄存器(R15)
  • 2.如果要带条件就看CPSR寄存器的NZCV
  • 3.条件执行的区域取决于CPSR的条件变化
  • 4.指令的条件码根据不同的数据的比较选择

函数调用的底层处理

没有参数的返回和调用

  • 1.bl指令同时影响两个寄存器pc(r15)和lr(r14)
  • 2.mov r15,r14指令将把lr里保存的指令地址恢复到PC中, 实现函数的返回
START  
       mov     r0, #8
       mov     r1, #6
       bl      GCD
       mov     r0, #118
       mov     r1, #223
       bl      GCD
       b       START

GCD    
       cmp     r0, r1
       moveq   pc, lr
       subgt   r0, r0, r1
       suble   r1, r1, r0
       b       GCD
STOP   

函数参数传递

  • 1.少于等于三个参数时, 直接使用r0,r1,r2存放第一第二第三个参数
  • 2.再多的参数通过保存到栈空间, 使用时从栈空间取出。

函数返回数据的处理

  • 1.有返回值,通过r0寄存器传递

寄存器中的数据保存

  • 1.为了避免影响, 在函数内使用的寄存器, 使用前要先保存, 使用后返回前要恢复
  • 2.如果函数内还要调用函数, 要先对lr进行保存, 然后再进行bl跳转, 第二级调用返回后先恢复lr, 再进行第一季调用的返回
START   
        mov     r0, #8
        mov     r1, #6
        mov     r2, #10
        mov     r3, #15
        bl      ADD_GCD
        b       STOP
ADD_GCD 
        mov     r6, lr ;保存程序入口, 因为在ADD_GCD函数中调用其他函数会引起lr被覆盖
        bl      MYADD
        mov     r7, r0 ;将返回值保存在r7
        mov     r0, r2
        mov     r1, r3
        bl      MYADD
        mov     r1, r0
        mov     r0, r7
        bl      GCD
        mov     lr, r6 ;装载程序入口
        mov     pc, lr

MYADD   ;       ADD函数
        add     r0, r0, r1
        mov     pc, lr

GCD     
        cmp     r0, r1
        moveq   pc, lr
        subgt   r0, r0, r1
        suble   r1, r1, r0
        b       GCD
STOP    

数据保存到内存

  • 1.先要知道保存到内存的位置(即地址) ---- sp中的栈地址必须是4的整数倍
  • 2.使用str可以把寄存器中的数据保存到指定内存
  • 3.使用ldr可以将指定内存中的数据读取到寄存器中
  • 4.注意:2, 3 条必须对寄存器和内存操作, 不能直接把一个常数保存到内存中

总结

  • 1.使用bl指令在跳转的同时会保存跳转前将要执行的下一条指令
  • 2.函数返回, 其实就是将bl跳转时保存的地址给PC
  • 3.如果要在函数中使用寄存器, 需要先保存原来的值, 并在返回前恢复这些值
  • 4.一般情况下, 在处理C语言函数的返回值时, 默认使用r0保存返回值。

CPU如何使用内存空间

函数内常规操作流程

  • 1.如果需要, 保存必要的寄存器内容

  • 2.操作sp, 分配需要的内容空间

  • 3.运行函数相关功能

  • 4.释放分配的空间

  • 5.恢复保存过的寄存器的值, 并使程序返回

START  
       mov     sp, #1000
       bl      MAIN
       b       START

MAIN   
       sub     sp, sp, #4 ; 栈空间降低
       str     lr, [sp]
       mov     r0, #10

       bl      FUNCA
       mov     r0,#20
       mov     r1,#30
       bl      FUNCB
       ldr     pc,[sp] ;这一句相当于C语言中的main函数的return 0;
       ;mov    pc, lr

FUNCA  
       sub     sp, sp, #4
       str     r0 , [sp]
       add     r0, r0, r0
       str     r0,[sp]
       add     r0, r0, r0
       str     r0,[sp]
       sub     sp, sp, #12
       mov     r1,#100
       str     r1,[sp,#8]
       add     r1, r1, #10
       str     r1, [sp,#4]
       add     r1,r1,#10
       str     r1, [sp]
       add     sp,sp, #16
       mov     pc, lr
FUNCB  
       sub     sp,sp,#8
       str     r0, [sp, #4]
       str     r1, [sp]
       add     r0, r0, r1
       add     sp, sp, #8
       mov     pc, lr

STOP   

栈所分配的空间局部有效

  • 1.不可以在退出函数后继续使用, 对应的存储空间会有别的函数使用

全局变量

  • 1.全局变量的定义DCD或DCB
  • 2.全局变量的内容会一直存在
  • 3.全局变量所有函数都可以访问
  • 4.全局变量太多了不方便管理
START  
       mov     sp, #1000
       mov     r0, #G_X
       ldr     r1, [r0]
       mov     r2, #123
       str     r2, [r0]
       mov     r0,#G_Y
       str     r2,[r0,#8]
       ldr     r1, [r0, #12]
       b       START

STOP   

G_X    DCD     1
G_Y    DCD     2,3,4,5 ; DCD定义, 每个单元都是4个字节
G_Z    DCB     100,0,0,0 ; DCB定义4个字节, 对于每个字节进行赋值, 这种方式定义的全局变量实际值与大端系统或者小端系统有关

总结

  • 1.函数内对存储空间的使用都是通过sp进行减操作,返回时用加恢复到原来的值。
  • 2.也可以把sp保存在寄存器当中, 在函数返回前从对应的寄存器中恢复。
  • 3.进入函数时的sp和退出时需保持一致。
  • 4.函数内的局部变量,退出后无法再使用。
  • 5.全局变量对应的地址空间的可见性是整个程序

第一章全部内容总结

  • 1.计算机的核心处理单元处理都是由晶体管构建的门电路组合而成。
  • 2.现在计算机整体结构接近冯诺依曼提出的存储型计算机,包括五部分组成:运算器、控制器、存储器、输入设备、输出设备。
  • 3.CPU内在通用寄存器, 也有专用寄存器,要掌握这些寄存器的典型用途,NZCV条件码可以控制指令有条件进行。
  • 4.CPU主要运行过程是通过读取PC指向的指令后进行译码和执行,PC自动指向下一条指令,或者有指令强制跳转,如果是函数调用,要记得能正常返回。
  • 5.在函数内使用内存主要依赖sp的动态变化。
  • 6.全局变量,在程序运行前就会分配好地址,只要能拿到这个地址,就可以访问
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值