美文网首页
《汇编语言》王爽著_读书笔记(一)

《汇编语言》王爽著_读书笔记(一)

作者: Runnlin | 来源:发表于2017-07-06 22:27 被阅读0次

    基础知识

    机器语言

    机器语言是机器指令的集合,机器指令是一台计算机可以正确执行的命令,是一列二进制数字。计算机将其转变成对应的一列高低电平,以驱动计算机的电子器件,进行CPU的主要工作——运算。

    每一种微处理器的硬件设计和内部架构都不同,故需要用不同的电平脉冲来控制其工作,所以每一种微处理器都有其自己的机器指令集,也就是机器语言。

    若使用8086CPU完成运算 s = 768 + 1288 - 1280, 机器码如下:

    101110000000000000000011

    000001010000000000110000

    001011010000000000000101

    程序员们将这些机器码打在纸带或卡片上,1打孔,0不打孔,再将程序通过过纸带机或者卡片机输入计算机,进行运算。

    汇编语言的产生

    显然,机器码很麻烦,所以产生了汇编语言。

    操作:寄存器BX的内容送到AX中

    机器指令:1000100111011000

    汇编指令:mov ax, bx

    寄存器是CPU中的储存数据的器件,一个CPU中有多个寄存器。

    汇编语言通过编译器来编译成机器码,再由计算机最终执行。(编译器的编译工作自然也是由计算机执行)

    汇编语言的组成

    汇编语言又三类指令组成

    1. 汇编指令,机器码的助记符,有对应的机器码

    2. 伪指令,没有对应的机器码,由编译器执行,计算机不执行

    3. 其他符号,如 + - * / 等,又编译器识别,没有对应的机器码

    汇编指令决定了汇编语言的特性。

    储存器

    CPU要运算的数据的储存位置,指令和数据都在储存器中存放,就是内存(RAM)。

    指令和数据

    在内存或磁盘中,指令和数据没有任何区别,都是二进制信息。

    储存单元

    储存器被划分成多个储存单元,每个储存单元从0开始顺序编号,如一个有128个储存单元的储存器,编号从0
    ~ 127.

    微型机储存器的一个储存单元可以存储一个Byte,即8个二进制位,即8个bit,bit(比特)是电子计算机的最小信息单位

    CPU对存储器的读写

    CPU想要从内存中读取数据,首先要制定存储单元的地址,就像数据居住在一个小区的一个房子里,我们要找数据就要先确定他住在哪个房子里,而每个房子都有自己的门牌号码,这号码就可以看成储存器的编号。

    在CPU读写数据时还要指明其要对哪一个器件进行操作,因为CPU中不知有储存器这一种器件。

    CPU要进行数据的读写,必须和外部器件(芯片)进行下面3类信息的交互

    • 存储器单元的地址(地址信息)

    • 器件的选择,读或写的命令(控制信息)

    • 读或写的数据(数据信息)

      在计算机中有专门连接CPU和其他芯片的导线(电子计算机处理、传输的信息都是电信号,电信号当然要用导线传送)称为总线,总线从逻辑上又分为3类:地址总线、控制总线和数据总线。

    • 读3号位置的数据操作:

      CPU通过地址线对内存发出信息3

      CPU通过控制线发出内存读命令,选中存储器芯片,并通知其要从中读取数据

      存储器将3号位置的数据通过数据线发到CPU

    机器码: 10100001 00000011 00000000

    汇编指令:mov ax, [3]

    含义: 传送3号单元的内容送入ax

    地址总线

    不同CPU的地址总线不同且有限,假设一个CPU有N根地址总线,那么它最多可以寻找2的N次方个内存单元(Byte)

    数据总线

    数据总线的宽度决定了CPU和外界的数据传送速度,比如8根数据总线一次可以传送一个8位二进制数据(即一个字节,一个Byte,一个存储单元)

    • 当CPU的数据总线宽度为8,那么它向内存中写入数据89D8H时,就要分成两次传送,第一次传送D8,第二次传送89,

    第一次:

    10010001 (89)

    第二次:

    00011011 (D8)

    • 当CPU的数据总线宽度为16,那么他可以一次传送89D8H

    第一次:

    00011011 - 10010001 (89D8)

    控制总线

    控制总线的宽度决定了CPU对外部器件的控制能力,前面讲的内存读写命令是又几根控制线综合发出的,其中一根称为“读信号输出”的控制线负责由CPU向外部传送读信号,CPU向该控制线输出低电平表示将要读取数据;同理,有一根称为“写信号输出”的控制线负责传送写信号。

    内存地址空间概述

    一个CPU的地址总线宽度为10,那么可以寻址2的10次方即1024个内存单元,这1024个可寻到的内存单元就构成这个CPU的内存地址空间。

    主板

    就是PC机中的各个核心器件和主要器件都通过总线(地址总线、数据总线、控制总线)相连。这些器件有CPU、存储器、外围芯片组、扩展插槽等。扩展插槽根据接口和协议的不同,一般插有RAM内存条和各类接口卡。

    接口卡

    所有可用程序控制其工作的设备,都要由CPU进行控制。
    但CPU不能对外部设备直接控制,如显示器、音响、打印机等。所以CPU通过总线向接口卡发送命令,接口卡根据CPU的命令控制外设进行工作。

    各类存储器芯片

    • RAM 随机存储器

    用于存放CPU使用的绝大部分程序和数据

    • 装有BIOS的ROM 只读存储器

    BIOS是由各种接口卡厂商提供的软件系统,可以通过它利用该硬件设备进行最基本的输入输出(Basic
    Input/Outp System)

    • 接口卡上的RAM

    如显存,应付大批量输入输出数据的暂时存储情况,我们将需要显示的内容写入显存,就会显示在显示器上。

    内存地址空间

    上面说的各类存储器,在物理上是独立的器件,但有以下两点相同:

    • 都和CPU的总线相连(直接:RAM等, 间接: 接口卡)

    • CPU对它们进行读或写的时候都通过控制线发出内存读写命令。

    也就是说,CPU把他们总的当作一个由若干存储单元组成的逻辑存储器,这个逻辑存储器就是我们所说的内存地址空间,汇编语言面对的就是这个内存地址空间。

    这个总的逻辑存储器通过不同的器件的空间分成了一个个地址段,CPU通过访问不同的地址段以达到控制不同的器件的目的,在一段地址空间中读写数据,实际上就是在相对应的物理存储器中读写数据。

    假设内存地址空间的地址段分配如下:

    • 地址0~7FFFH的 32KB空间为 主随机存储器的地址空间;
    • 地址8000H~9FFFH的 8KB空间 为 显存地址空间;
    • 地址A000H~FFFFH的 24KB为 各个ROM的地址空间;

    这样,当CPU向内存地址为1000H的内存单元中写入数据,这个数据就会被写入到随机存储器中,以此类推。

    • 而CPU向内存地址为C000H的内存单元中写入数据的操作是没有结果的,因为C000H单元的内容是ROM存储器中的一个单元,它是只读的。
    逻辑存储器

    内存地址空间受CPU地址总线宽度的限制。
    8086CPU的地址总线宽度为20,所以可以传送2的20次方个不同的地址信息(0 ~ 2的20次方-1),即可以定位2的20次方个内存单元,则8086PC的内存地址空间大小为1MB(1024KB、2的20次方Byte)。
    同理,80386CPU的地址总线宽度为32,则内存地址空间最大为4GB。

    在使用基于一个计算机硬件系统进行编程的时候,必须知道这个系统的内存地址空间分配情况。

    相关文章

      网友评论

          本文标题:《汇编语言》王爽著_读书笔记(一)

          本文链接:https://www.haomeiwen.com/subject/fppkhxtx.html