【汇编语言】1-基础硬件知识


公粽号「专注Linux」,专注Linux内核开发

本系列将讲解《汇编语言》一书,本节讲解第1章—基础硬件知识

本节速览
1.机器语言和汇编语言
2.汇编语言的组成
3.指令和数据
4.存储单元
5.CPU对存储器的读写(三线)
6.地址、数据、控制信息的传递——总线
7.地址总线
8.数据总线
9.控制总线
10.内存地址空间(引出)
11.主板
12.接口卡
13.各类存储芯片
14.内存寻址空间(详解)

1.机器语言和汇编语言

机器语言CPU可以直接执行的机器码
汇编语言和机器码一一对应的助记符形式
编译器将汇编语言转化为机器码的程序

电子计算机的机器指令是一列二进制数字。计算机将之转变为一列高低电平,以使计算机的电子器件受到驱动,进行运算。注意不同的CPU架构有不同的机器码,也就有不同的汇编指令集。

我们程序只能在CPU里面以机器码的形式执行,所以汇编语言需要转化为机器码,这就要用到编译程序,也称为编译器


2.汇编语言的组成

类别说明有无对应机器码执行主体
汇编指令(核心)机器码的助记符计算机(对应机器码执行 )
伪指令无实际对应机器码逻辑,辅助编译流程编译器
其他符号(如+、-、*、/ 等)用于表达运算等逻辑,参与编译阶段处理编译器

3.指令和数据

我们的一切程序都是在CPU中运行,想要让CPU工作,就必须要为之提供数据和指令
数据和指令在存储器中存放,也就是我们平时说的内存

在磁盘和内存中,数据和指令没有任何区别,都是二进制信息,只是CPU在工作时,根据需要将其解释为数据或者信息。

这就像围棋盘上的棋子,在棋盒中的本质上都是一样的,但是在对弈时有了不同的解释。

例如,内存中的二进制信息1000100111011000有以下解释:

解释类型原二进制信息实际解释
数据100010011101100089D8H
指令1000100111011000mov ax,bx

4.存储单元

存储器被划分成若干个存储单元,每个存储单元从0开始顺序编号,例如一个存储器有128个存储单元,编号从0~127,这些编号可以看作存储单元在存储器中的地址。就像一条街,每个房子都有门牌号码。如图所示:

5.CPU对存储器的读写(三线)

CPU要从内存读数据,首先要指定存储单元地址(即上述的存储单元的编号)。也就是说它要先确定它要读取哪一个存储单元中的数据。就像在一条街上找人,先要确定他住在哪个房子里。

可见,CPU要想和外界进行数据读写,需要以下三类信息:

所需信息解释
地址信息存储单元的地址(地址信息)
数据信息读或写的数据(数据信息)
控制信息器件的选择,读或写的命令(控制信息)

6.地址、数据、控制信息的传递——总线

通过上述得知,CPU需要获得三类信息才可以与外界进行数据读写,那么是如何将这三类信息传到存储器芯片中的呢?

显然,电子计算机中的都是用电信号,那当然使用的是导线传送。在计算机中有专门连接CPU和其他芯片的导线,称之为**“总线”**。

总线的看待视觉:

总线的看待角度解释
物理上一根根导线的集合
逻辑上地址总线、控制总线、数据总线

各个总线的作用:

总线功能
地址总线地址总线的宽度决定了CPU的理论寻址能力
数据总线数据总线的宽度决定了CPU与其他器件进行数据传送时的一次数据传送量
控制总线控制总线的宽度决定了CPU对系统中其他器件的控制能力

实际演示如图:

对应过程:

(1) CPU 通过地址线地址信息 3 发出。

(2) CPU 通过控制线发出内存读命令,选中存储器芯片,并通知它,将要从中读取数据。

(3) 存储器将 3 号单元中的数据 8 通过数据线送入 CPU。

7.地址总线

地址总线相关
目的CPU通过地址总线来选择指定的存储单元
寻址范围CPU能通过地址总线选择到多少存储单元,就是多大的寻址范围

例如,一个地址总线大小为N,则寻址范围显然为0~2^N-1,因为每条线有2种变化。

再如,具有10根的地址总线的CPU寻址内存地址为11的过程示意图如下:

8.数据总线

CPU通过地址总线选定了地址后,开始进行数据的传送。CPU与内存或者其他器件之间的数据传送是通过数据总线来进行的。数据总线的宽度决定了CPU与外界的数据传送速率。例如,8根数据总线一次可以传送8为二进制信息(即1字节)。

假设传送数据89D8H,以下展示了8位和16位的数据总线下,数据的传统情况:

8位数据总线,分两次传送2字节数据

16位数据总线,一次就传送了2字节数据

9.控制总线

CPU 对外部器件的控制是通过控制总线来进行的。在这里控制总线是个总称,控制总线是一些不同控制线的集合。有多少根控制总线,就意味着CPU提供了对外部器件的多少种控制。所以,控制总线的宽度决定了CPU对外部器件的控制能力

前面所讲的内存读或写命令是由几根控制线综合发出的,其中有一根称为“读信号输出”的控制线负责由CPU向外传送读信号,CPU向该控制线上输出低电平表示将要读取数据;有一根称为“写信号输出”控制线则负责传送写信号


10.内存地址空间(引出)

什么是内存地址空间呢?

内存地址空间分类解释
理论内存地址空间=2^N(N为地址总线条数)
实际内存地址空间min
{
理论内存地址空间,
实际硬件存储器都成的存储空间
}

举例来讲,一个CPU的地址总线宽度为10,那么理论上可以寻址1024个内存单元,这1024个可寻到的内存单元就构成这个CPU的理论内存地址空间。但是实际内存寻址空间是由不同的硬件寻址构成的。下面进行深入讨论。首先需要介绍两部分基本知识,主板接口卡

11.主板

在每一台PC机中,都有一个主板,主板上有核心器件和一些主要器件,这些器件通过总线(地址总线数据总线控制总线)相连。这些器件有CPU存储器外围芯片组扩展插槽等。扩展插槽上一般插有RAM内存条各类接口卡

12.接口卡

计算机系统中,所有可用程序控制其工作的设备,必须受到CPU的控制。CPU对外部设备都不能直接控制,如显示器、音箱、打印机等。直接控制这些设备进行工作的是插在扩展插槽上的接口卡扩展插槽通过总线和CPU相连,所以接口卡也通过总线同CPU相连。CPU可以直接控制这些接口卡,从而实现CPU对外设的间接控制。

简单地讲,就是CPU控制接口卡,接口卡控制外设。

13.各类存储芯片

一台PC机中,装有多个存储器芯片,这些存储器芯片从物理连接上看是独立的、不同的器件。从读写属性上看分为两类:

存储器按照读写属性分类解释
随机存储器(RAM)随机存储器可读可写,但必须带电存储,关机后存储的内容丢失
只读存储器(ROM)只读存储器只能读取不能写入,关机后其中的内容不丢失

这些存储器从功能和连接上又可分为以下几类:

存储器按功能分类
随机存储器用于存放供 CPU 使用的绝大部分程序和数据,主随机存储器一般由装在主板上的 RAM 以及插在扩展插槽上的 RAM 这两个位置的 RAM 组成 。
装有 BIOS的 ROMBIOS 是主板和各类接口卡(如显卡、网卡等)厂商提供的软件系统,借助它可利用对应硬件设备进行最基本的输入输出。在主板和某些接口卡上插有存储相应 BIOS 的 ROM 。举例:主板上 ROM 存主板 BIOS(常称系统 BIOS ),显卡上ROM 存显卡 BIOS,网卡若有 ROM ,可存网卡 BIOS
接口卡上的 RAM部分接口卡因需对大批量输入、输出数据暂时存储,会装有 RAM 。典型如显示卡上的 RAM(即显存),显示卡随时把显存数据输出到显示器,向显存写入需显示内容,就会呈现在显示器上 。

如下图连接逻辑:

14.内存寻址空间(详解)

上述的那些存储器, 在物理上是独立的器件,但是在以下两点上相同。

1.都和 CPU的总线相连。
2.CPU 对它们进行读或写的时候都通过控制线发出内存读写命令。

这也就是说,CPU 在操控它们的时候,把它们都当作内存来对待,把它们总的看作一个由若干存储单元组成的 逻辑存储器,这个逻辑存储器就是我们所说的内存地址空间。也即我们本节课需要面对的内存地址空间

最终运行程序的是CPU,我们用汇编语言编程的时候,必须要从CPU的角度考虑问题。

即本课的目标:

目的深入理解机器工作基本原理

培养底层编程意识和思想

结尾

好了,本节我们讲述了汇编语言学习前必备的计算机架构的基础知识,让我们再来回顾回顾:

汇编语言学习前必备的计算机架构知识回顾
0.机器语言是?
1.机器语言是如何驱动计算机的?
2.汇编语言是?
3.汇编语言是如何让计算机如何执行的?
4.汇编语言的组成是?
5.在CPU眼里指令和数据有何区别吗?
6.存储单元的地址是指?
7.CPU读取外部数据所需要的信息有哪三种?
8.总线是指?具体分类可以分成哪三种?
9.内存地址空间分为理论内存地址空间、实际地址空间,这两者什么区别?
10.主板是指?
11.接口卡是指?什么作用?
12.存储器从读写上可以分为?
13.存储器从功能上可以分为?
14.存储器对于CPU来看,共同点是什么?

如果您不能对着这个表格给出每一项的讲解,那么,再把上面的内容好好复习一遍吧!

答案见评论区,欢迎大家讨论~


汇编语言

😉【汇编语言】1—基础硬件知识

😉【汇编语言】2—寄存器基础知识

😉【汇编语言】3-寄存器与内存的交互

😉【汇编语言】4-第一个完整的汇编程序

😉【汇编语言】5-[BX]和loop指令

😉【汇编语言】6-包含多个段的程序

😉【DOSBox】1-debug

😉【DOSBox】2-debug可执行文件

😉【DOSBox】3-完整开发流程

C语言

😉【C语言】C Token(C89 C99 C11)

😉【C语言】指针基础

😉【C语言】数组基础

😉【C语言】结构体对齐

😉【C语言】华为C语言进阶测试

😉【C语言】触发刷新到磁盘的方式总结

😉【C语言】C语言文件操作的mode详解

😉【C语言】C语言文件知识全讲解

😉【C语言】从extern到头文件包含的最优实践

😉【C语言】C语言的关键字与重载机制

😉【C语言】长字符串的2种处理方式

😉【C陷阱与缺陷】-1-词法陷阱

😉【C陷阱与缺陷】-2-语法陷阱

😉【C陷阱与缺陷】-3-语义陷阱


Linux

Linux101系列

专注讲解Linux中的常用命令,共计发布100+文章。

😉【Linux101-1】ls

😉【Linux101-1】ls -l命令输出结果全解析

😉【Linux101-2】cd

😉【Linux101-3】cat

😉【Linux101-4】tac

😉【Linux101-5】head

😉【Linux101-6】tail

😉【Linux101-7】pwd

😉【Linux101-8】touch

😉【Linux101-9】cal

😉【Linux101-10】bc

😉【Linux101-11】df

😉【Linux101-12】uname

😉【Linux101-13】mkdir

😉【Linux101-14】gzip

😉【Linux101-15】tar

😉【Linux101-16】lsof

😉【Linux101-17】du

😉【Linux101-18】stat


Linux102系列

本系列将精讲Linux0.11内核中的每一个文件,共计会发布100+文章。

😉【Linux102】1-Makefile

😉【Linux102】2-Makefile.header

😉【Linux102】3-system.map

😉【Linux102】4-bootsect.s

😉【Linux102】5-setup.s

😉【Linux102】6-head.s

😉【Linux102-D】/boot

😉【Linux102】7-main.c


Linux内核精讲系列

和Linux内核102系列不同,本系列将会从全局描绘Linux内核的各个模块,而非逐行源码分析,适合想对Linux系统有宏观了解的家人阅读。

😉【Linux】学习Linux前必备的知识点

😉【Linux】Linux内核对进程的内存抽象

😉【Linux】Linux概述1-linux对物理内存的使用

😉【Linux】软件从写下到运行的全部流程

😉【Linux】CPU的三寻址:实模式、保护模式、长模式

😉【Linux】实模式与保护模式的寻址, 这次讲明白了!

😉【Linux】linux0.11的源码目录架构

😉【Linux】Makefile机制及基础详解

😉【Linux】编译并运行Linux0.11

😉【Linux】“进进内网文”—Linux的内核结构全貌

😉【Linux】linux的中断机制

😉【Linux】linux进程描述



关于小希

😉嘿嘿嘿,我是小希,专注Linux内核领域,同时讲解C语言汇编等知识。

我的微信:C_Linux_Cloud,期待与您学习交流!

加微信请备注哦


小希的座右铭:别看简单,简单也是难。别看难,难也是简单。我的文章都是讲述简单的知识,如果你喜欢这种风格:

不妨关注、评论、转发,让更多朋友看到哦~~~🙈

下一期想看什么?在评论区留言吧!我们下期见!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值