汇编语言的前世今生

目录

二进制八进制与十六进制

用电表示数字

寄存器

运算电路

cpu

机器指令与汇编语言

内存与地址

总线


在学习汇编语言前我们需要了解一些基础概念。

二进制八进制与十六进制

二进制、八进制和十六进制都是数字系统,用于表示数值。它们使用不同的基数,二进制逢二进一,八进制逢八进一,十六进制逢十六进一。

  • 二进制(Base 2):使用0和1两个符号。在计算机科学中非常重要,因为计算机的基本硬件(如晶体管)只有两种状态(开/关),自然对应于二进制数。例如,二进制数 1011  表示十进制中的 1 * 2^3 + 0 * 2^2 + 1 * 2^1 + 1 * 2^0 =  8 + 0 + 2 + 1 = 11。

  • 八进制(Base 8):使用0到7八个符号。在早期的计算机系统中较为常用,因为它能方便地转换为和从二进制转换,每三位二进制对应一位八进制。八进制数 135 转换为十进制是 1 * 8^2 + 3 * 8^1 + 5 * 8^0 = 64 + 24 + 5 = 93。

  • 十六进制(Base 16):使用0到9的阿拉伯数字加上A到F(或a到f,不区分大小写)这六个字母,共十六个符号。十六进制常用于表示颜色代码、内存地址等,因为它能更紧凑地表示二进制数(每四位二进制对应一位十六进制)。例如,十六进制数2AF对应二进制的 0010 1010 1111,转换为十进制是 2*16^2 + 10*16^1 + 15*16^0 = 512 + 160 + 15 = 687。

用电表示数字

使用电子信号来代表数字信息,这是现代数字电子系统的基础。

如图所示,这里有一根导线,开关闭合则通电,开关断开则断电,这两个状态可对应二进制中的0和1。如果有四根导线,我们就可以表示从 0000 到 1111 的所有数。

如此图就可表示二进制数1101.

寄存器

寄存器是计算机中央处理器(CPU)内部的关键组件,它们是小型的高速存储区域,用于暂时存储数据和指令。寄存器的设计旨在快速访问和操作数据,因此它们是CPU中读写速度最快的存储层次。

寄存器主要由锁存器或触发器构成,尤其是触发器最为常用。这是因为一个触发器可以稳定地存储1bit(一个二进制位)的信息,因此,一个n位寄存器就需要n个这样的触发器串联或并联而成。

我们可以将寄存器简化为上图电路。由输入电路,输出电路,锁存器与锁存开关组成。

当我们按下开关,会向触发器发送锁存命令,触发器会保留当前输入电路的信息。并在out电路持续输出。即使输入电路改变也不会影响输出电路。

我们按下开关

 现在锁存器中保存的数据为 01011。

 此时我们改变输入电路,发现即使输入电路改变,也不会影响输出电路,除非再次按下开关。

运算电路

运算器是中央处理器(CPU)的一个核心组成部分,负责执行基本的数学运算和逻辑运算。它是计算机中执行加减乘除、比较、位操作等操作的主要硬件单元。运算器的主要功能可以概括为以下几点:

  • 算术运算
    • 加法:是最基本的运算,也是其他许多运算的基础(如乘法可以视为连续加法)。
    • 减法:计算两个数值的差。
    • 乘法:计算两个数值的乘积。
    • 除法:计算一个数值除以另一个数值的结果。
    • 模运算:求出除法的余数。
  • 逻辑运算
    • 逻辑与(AND):如果两个输入都为真(1),则输出为真;否则为假(0)。
    • 逻辑或(OR):如果至少一个输入为真,则输出为真;两个输入都为假时输出为假。
    • 逻辑非(NOT):反转输入的真假状态,如果输入为真,则输出为假;反之亦然。
    • 逻辑异或(XOR):当输入不同时输出为真,相同时输出为假。
  • 位操作
    • 位移:包括左移和右移,用于改变二进制数的位位置,相当于乘以2或除以2的操作。
    • 位与、位或、位异或:在二进制位级别上执行逻辑运算。
    • 位测试和设置:检查或改变特定位的状态。
  • 比较运算
    • 用于判断两个数值的大小关系,通常通过减法和检查借位或溢出来实现等于、大于、小于的判断。

cpu

CPU(中央处理器)是计算机的核心组件,负责执行程序指令和处理数据。它是计算机的大脑,负责管理和协调计算机的各种活动。

CPU主要由以下几个关键组成部分构成:

  • 控制单元(Control Unit, CU)

    • 负责指挥和协调CPU内部的各个部分,以及CPU与外部设备(如内存、输入输出设备)之间的数据传输。
    • 解释并执行指令序列,包括提取指令、分析指令、产生相应的控制信号来激活其他部件执行所需操作。
  • 算术逻辑单元(Arithmetic Logic Unit, ALU)

    • 执行基本的数学运算(如加、减、乘、除)和逻辑运算(如与、或、非)。
    • 处理数据,计算结果,并将结果暂时存储在寄存器中。
  • 寄存器(Registers)

    • 高速存储单元,用于暂存指令、数据和中间计算结果。
    • 包括通用寄存器、状态寄存器(或称程序状态字,PSW,存储状态标志和控制标志)、累加寄存器(某些架构中作为ALU的一部分,用于存储计算结果)等。
    • 寄存器访问速度极快,是CPU中数据处理的最直接工作区。
  • 高速缓存(Cache)

    • 不是所有CPU结构定义中的传统组成部分,但现在大多数CPU集成了多级缓存(L1、L2、甚至L3),用来暂存频繁访问的数据和指令,以减少访问主内存的延迟。
  • 总线接口

    • CPU通过地址总线、数据总线和控制总线与内存及I/O设备通信,发送地址、数据和控制信号。
  • 时钟和定时控制电路

    • 产生CPU运行所需的时钟信号,控制操作的步调和同步。
  • 中断控制器

    • 处理来自系统内外部的中断请求,允许CPU暂停当前任务,处理紧急或优先级更高的事件,然后恢复原任务。

 这些组成部件我们在之后都会介绍。

机器指令与汇编语言

机器指令是计算机硬件能够直接识别并执行的最基本命令,它由一系列二进制位组成,每个特定的二进制序列代表一个特定的操作,如加法、减法、数据移动、跳转等。这些指令是计算机能够理解的最原始语言。

机器指令是由纯粹的二进制代码构成,对人类而言极为难读和编写。于是汇编语言诞生了。

汇编语言是一种低级编程语言,它使用助记符来表示机器指令,使得程序员能够以更加可读和易理解的方式编写程序。每个汇编语言的语句对应一条机器指令,如MOV AX, BX这样的指令在汇编语言中表示将BX寄存器的内容移动到AX寄存器中,而在机器语言中则是特定的二进制编码。

内存与地址

我们知道数据储存在硬盘中,那么cpu如何获取位于硬盘的数据?  cpu并不直接访问硬盘,因为硬盘是慢速的外存储设备,而CPU需要快速访问数据,所以cpu选择通过内存获取数据。内存的访问速度远快于硬盘和其他外部存储设备,它与CPU直接相连,是硬盘与cpu的缓冲。

CPU需要从硬盘读取数据时,它会向内存控制器发送一个I/O(输入/输出)请求,指示要读取的数据的地址.

内存控制器接收到请求后,检查数据是否已经在内存(RAM)中。如果数据已经缓存在内存中,它会直接将数据提供给CPU。如果不在内存中,内存控制器会继续下一步。

如果数据不在内存中,内存控制器会触发直接存储器访问(DMA)控制器,DMA控制器接管了数据传输的过程,避免了CPU直接参与大量数据的传输,从而让CPU可以继续执行其他任务。

DMA控制器向硬盘控制器发送读取请求,包括要读取的扇区号和磁道号。

硬盘控制器控制磁头在硬盘上找到对应的磁道和扇区,读取数据并将其暂存到硬盘的高速缓存(如果有)。

硬盘控制器通过DMA通道将数据传输到内存,通常是到内存中预先分配的缓冲区。

当数据传输完成后,DMA控制器会通知内存控制器,内存控制器再通知CPU,数据现在已准备好在内存中使用。

CPU现在可以从内存中读取数据,执行后续的计算或指令。

内存地址是计算机内存中的一个唯一标识符,它用来指定内存中的一个特定位置,以便CPU可以准确地读取或写入数据。在内存中,每个位置都有一个唯一的地址,确保数据不会混淆。 每个内存地址通常关联一个字节(8bit)。内存地址通常按照连续的顺序分配,从0开始递增,直到内存的总容量。CPU通过内存地址直接访问内存,使用特定的指令来读取或写入数据。

总线

总线是计算机内部的通信系统,它允许数据、指令以及其他信息在计算机的各个组件之间传输。总线是计算机组件之间的高速公路,确保了CPU、内存、外设等能够高效地交换信息。

总线组成部分:

  • 数据总线(Data Bus):负责在不同部件间传输实际的数据。数据总线的宽度(即位数)决定了每次能传输的数据量,例如32位数据总线一次可以传输4字节的数据。

  • 地址总线(Address Bus):CPU通过地址总线来指定内存或其他设备中的存储位置。地址总线的宽度决定了CPU能够直接寻址的地址空间大小。例如,32位地址总线可以访问232232个地址,即4GB的物理内存。

  • 控制总线(Control Bus):用于传递控制信号和时序信号,协调各个部件的工作。控制总线包括读/写信号、中断信号、复位信号等,确保数据在正确的时间以正确的格式被传输和接收。

 

  • 42
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

knight-n

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值