文章

计组学习

鉴于计算机组成的抽象性,特开一帖对平时的学习进行补充

计算机的运算方法

  • 有关计算机内的浮点数:
    【CSAPP-深入理解计算机系统】2-4.浮点数(上)

  • 定点机的比例因子:

    当定点数计算完成后,如果需要将结果传递给外界或其他系统,并且外界或其他系统需要得到实际的物理量或计算结果,就需要将定点表示的结果除以比例因子,以还原为实际的物理量或计算结果。

    可以看出,比例因子本身只是为了方便计算而已(比如你做小数除法时,会被除数、除数同时乘以一个数以去掉小数点简便计算)。

    传感器测量:在传感器测量中,比例因子用于将传感器的输出转换为实际的物理量。例如,将光传感器的输出值乘以一个适当的比例因子,以转换为光强度的单位,如勒克斯(lux)。

    信号处理:在数字信号处理中,比例因子用于将信号的幅度调整到合适的范围内。例如,在音频处理中,将音频信号乘以一个比例因子以调整音量。

  • 实际生活中的定点机&浮点机:

    当提及电脑型号时,一般不会明确指出是定点机还是浮点机,因为这通常是针对计算机内部的硬件设计和实现的技术细节。且现代的通用处理器(如Intel、AMD、ARM等)通常都同时支持浮点和定点运算,它们会在硬件层面上自动处理这两种类型的运算。

    然而,可以提供一些在特定领域或应用中常用的定点或浮点处理器型号的示例:

    • 定点机:通常用于需要较低精度、较小范围且对性能要求高的应用,如信号处理、嵌入式系统等

      定点机型号:

      1. Microchip PIC32:这是Microchip推出的一款嵌入式微控制器系列,主要用于低功耗、嵌入式系统的应用,通常采用定点运算。

      2. ARM Cortex-M系列处理器:ARM Cortex-M系列处理器广泛用于嵌入式系统,包括传感器控制、嵌入式实时操作系统等,这些应用通常使用定点运算以提高性能和节省资源。

      3. Raspberry Pi Zero:Raspberry Pi Zero是一款低成本、高集成度的微型计算机,通常用于嵌入式系统和物联网应用,其处理器采用定点计算。

    • 浮点机:常用于需要高精度、广泛范围以及对计算准确性要求较高的应用,如科学计算、图形处理、金融建模等

      浮点机型号:

      1. Intel Core i7-1185G7:这是一款搭载了Intel Tiger Lake架构的移动处理器,具有集成的浮点计算单元,适用于高性能的通用计算任务和图形处理。

      2. NVIDIA GeForce RTX 3090:这是一款高性能的图形处理器(GPU),内置了大量的浮点计算单元,用于图形渲染、深度学习等需要大规模并行浮点计算的应用。

      3. AMD Ryzen 9 5950X:这是一款桌面级别的多核处理器,具有较高的浮点计算性能,适用于多线程应用、科学计算等需求。

  • 程序计数器(program counter, PC)

    什么是程序计数器(PC)?

    它是一个特殊寄存器,用于跟踪程序中要执行的下一条指令的内存地址。

    每次获取指令时,程序计数器都会递增,因此它始终指向内存中下一条指令的地址。取指后,程序计数器被更新为后续指令的地址,从而允许中央处理单元(CPU)继续执行程序。分支指令可以更改程序计数器,以将执行流程重定向到程序的不同部分。

指令系统

  • 数据在存储器中的存放方式

    • Q: 为什么一般的计算机存储字长为32位,存储器的基本单元区间为4字节?

      A: 因为——1字节(1 byte) == 8位(8 bit/8 比特)。于是4*8 = 32!

    • 在看存储器“边界对齐(struct alignment)”时,由于课本上单拉出32位存储器来介绍,导致我错以为常见的存储器都是32位。
      然后就开始疑惑:为啥偏偏是32位,就不能是16位、64位,甚至更长吗??

      直到我被ChatGPT告知:其实现在的存储器,大部分都迁移到了64位。。。

      (比如你手头的笔记本电脑,打开系统设置就能检查了~)

      是这样的呢!(恍然大悟)
      课本用32位做例子,只是为了方便解释、同时不会过于简单罢了 ( / ω \ ) 。

  • Q: 指令寻址中,一个地址对应的一个操作数,那寻址范围不应该由二者中比较小的一个来决定吗,为啥**间接寻址能扩大寻址范围**

    A: 指针寻址(即间接寻址)能够扩大操作数的寻址范围的原因之一,就是指针允许进行一些计算,以动态地确定操作数的实际地址

    间接寻址并没有直接增加寻址范围,而是通过允许指令在运行时动态确定操作数的位置来间接实现了扩大寻址范围的效果。指令可以在运行时使用寄存器中的值来计算操作数的地址,而不是将操作数的地址硬编码在指令中。因此,间接寻址允许操作数的地址不受限于指令本身的位数,而是可以根据寄存器中的地址动态计算

    因为涉及指针 and 地址间的计算转换,因此就需要用到算术逻辑单元ALU了!

    (个人观点就是类似函数映射啦~其实间接寻址包括了:基址寻址、变址寻址 and 相对寻址。结合这几个就好理解了~书上把这几个之间分割开来,简直有毒,害我绕了好半天)

  • 一个关于间接寻址中指针套娃的搞笑故事(建议直接读英文版,非常搞笑):
    What is indirect addressing and why is it useful?

  • 存储器长什么样?(有点鸡肋,就当长个见识)
    基于上个世纪50年代存储器原理,为Arduino自制的一个32位的存储器

存储器

  • 随机存取存储器(RAM):

Q: 书上介绍的RAM板块太抽象,看不懂,怎么解??

A: 墙裂推荐此视频,生动形象,干货很多(部分属于拓展知识点),爷爷奶奶看了都说好
DRAM 工作原理 - bilibili(youtobe转载)
同一系列更多视频请转战油管:kissing_heart:~~

本文由作者按照 CC BY 4.0 进行授权