汇编语言(一)基础知识与寄存器

前言

这是一个记录本人学习汇编的笔记及思考的系列文章。

本文为王爽的《汇编语言》第1-3章笔记。

按照我的个人习惯,我会尽量把每个知识点的前后逻辑关系、相关的学习感悟都捋丝滑,尽力做到水到渠成。但若想系统学习汇编语言,个人觉得还是有必要自己去刷一遍王爽的《编译语言》。

本文导图

汇编语言

时刻铭记

学习汇编的主要目的,是通过用汇编语言进行编程而深入地理解计算机底层的基本工作机理。

1、基础知识

基础知识部分主要介绍了什么是汇编?CPU对内存的处理方式等。

1.1、汇编语言的组成

  • 汇编指令:机器码(01串)的符号化表现。
  • 伪指令:没有对应的机器码,它是给编译器看的。
  • 其他符号:如+、-、*、/等。

很显然,这部分最重要的是汇编指令,但其它两类也是必不可少的,至于原因,后面会说。

1.2、指令和数据

指令和数据是人为定义的东西,它是应用上的概念。对于cpu而言,它只认得0和1,所以指令和数据对CPU来说,从本质上来讲是没有任何区别的。

1.2存储单元

而一位的0和1只能表示两种不同的状态,想要表示出指令和数据,我们就需要使用多位的二进制数去表示指令和数据。为了操作的统一和方便,CS的前辈们就以 8bit,即1Byte,作为最基本的存储单元。

这样,我们就可以把存储器划分成若干个存储单元,并给每个存储单元编上编号(编号从0开始),方便我们后续操作存储单元内的数据。

(对于这个存储单元的理解,可以类比“化学变化中的最小粒子是原子”。而bit之于Byte的关系,电子、质子之于原子的关系是一样的。)

1.3、CPU对存储器的读写

CPU要从内存中读取数据,即它必须和外部器件(如:存储器)进行以下3种最基本的信息交互:

  • 地址信息:想要操作的数据在哪里。
  • 控制信息:选择哪个器件、要对这个器件做什么事,如:读or写。
  • 数据信息:要读or写的信息。
1.3CPU读取数据

有意思的是,以上罗列的3种交互方式的顺序是具备逻辑性的:

  1. CPU得先知道你想对哪个地址操作,它才好决定选哪个外部器件。
  2. 知道应该选择哪个外部器件之后,才好发出相对应的控制信息。
  3. 最后完成数据信息的处理过程。

1.4、总线

从1.3的图,我们也可以知道CPU和外部器件进行信息交互是通过在器件与cpu间连接线实现的。而从保证器件传输信息的稳定性角度看,一根线最多只能表示两种状态(高电平or低电平) or 一个数字,所以每种作用的线都不可能只有一根,根据作用的不同,我们分别给这3种线一个名字:

  • 地址总线:线数的多寡决定CPU可以对多少不同的地址进行寻址。
  • 控制总线:线数的多寡决定CPU有多少种控制方式
  • 数据总线:线数的多寡决定CPU一次能传输多少位数字

设N为总线的线数,那么

  • 地址总线,可以寻址的范围为 2n 个存储单元。
  • 控制总线,可以有 2n 种控制模式。
  • 数据总线,一次性能传输 N 位的数据。

1.5、存储器芯片

计算机中装有多个存储芯片。这些芯片从物理角度看是独立的、不同的器件。

而我们的重点是从读写属性以及功能上对存储器进行认识。

从读写属性上可分为:

  • 随机存储器(RAM):可以随机对存储器内的任意地址进行读or写,但必须带电存储。
  • 只读存储器(ROM): 只能读不能写。

从功能上可分为:

  • 主RAM:存放CPU使用的绝大多数程序and数据。一般有主板和扩展插槽上的RAM组成
  • 装有BIOS的ROM:如显卡、网卡。存放基本IO信息和对应软件系统。
  • 接口卡上的RAM:如显存这类需要在接口卡上进行大批量的输入、输出数据的暂时存储。

(补充:接口卡,即外部设备插入主板扩展插槽的那排东东。)

1.6、内存地址空间

为了统筹处理各个外部器件,我们可以把所有外部设备的内存地址都映射到一个一维的逻辑存储器上。如下图,这样,CPU就可以轻松的对外部设备的内存地址进行管理了。

1.4逻辑存储器

这里唯一值得注意的是,不同CPU对外设的内存分配情况是不同的。上图仅为8086的内存映射情况。

2、寄存器

2.1、


未完待续~~~

  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
  • Copyrights © 2020-2022 逸非安逸
  • Visitors: | Views:

请我喝杯咖啡吧~