机器语言是机器指令的集合,机器指令展开来讲就是一台机器可以正确执行的命令,电子计算机的机器指令是一列二进制数字的。计算机将之转变为一列高低电平,以使计算机的电子器件受到驱动,进行运算,
计算机是指由CPU和其受CPU直接或者间接控制的芯片,器件,设备组成的计算机系统,如PC机。
CPU是一种微型处理器,由于硬件设计和内部结构的不同,就需要用不同的电脉冲来控制,使他工作,每一种微型处理器都有自己的机器指令集,也就是机器语言。
CPU发展: 打孔-继电器-电子管-晶体管-石英振型
---显存(不同于内存,但也是存储器)
显卡
—GPU(速度比CPU还快得多)
数据–存放–显存–读取–GPU–渲染–显示屏u
汇编语言的主题是汇编指令,汇编指令和机器指令的区别在于指令的表示方法,汇编指令是机器指令便于记忆的书写格式,
简单地讲,寄存器是CPU中存储数据的器件,一个CPU中有多个寄存器,AX是其中一个寄存器的代号,BX是另一个寄存器的代号,
程序员用汇编语言写出源程序,再用汇编编译器编译成机器码
汇编语言发展至今,有3类指令组成。
汇编语言的核心是汇编指令,它决定了汇编语言的特性
CPU中有逻辑运算单元
计算机任何一个部件基本都有存储器 (BIOS,GPU,网卡)
CPU是计算机的核心部件,它控制整个计算机的运作并进行运算,想要让一个CPU工作就必须向他提供指令恶化数据,指令和数据在存储器中存放,也就是我们平时所说的内存,在一台PC机中内存的作用仅次于CPU,离开内存,性能再好的CPU也无法工作
指令和数据是应用上的概念,在内存或者磁盘上,指令和数据没有任何区别,都是二进制信息,CPU在工作的时候把有的信息看作指令,有的信息看作数据。同样的信息赋予了不同的意义,就像围棋的棋子,在棋盒里没有任何区别,在对弈的时候就有了不同的意义。
eg:内存中的二进制信息1000100111011000,计算机可以把它看作大小为89D8H的数据来处理,也可以将其看作指令mov ax,bx来执行
存储器被划分为若干存储单元,每个存储单元从0开始顺序编号,如一个存储器有128个存储单元,编号从0~127
我们知道电子计算机的最小单位是bit,也就是一个二进制位。8个bit组成一个byte,也就是字节,微型机存储器的存储单元可以存储一个Byte,即8个二进制位,一个存储器有128个存储单元,可以存储128Byte
一个拥有128个存储单元的存储器,它的容量是128个字节。
存储器被划分成多个存储单元。存储单元从零开始顺序编号,这些编号可以看作存储单元在存储器中的地址,就像一条街,每个房子都有门牌号。CPU要从内存中读取数据,首先要指定存储单元的地址,也就是它先要确定读取哪一个内存的单元中的数据。
在一台微机中,不只有存储器一种器件,CPU在读写数据时,还要指明,他要对哪一个器件进行操作,进行那种操作,是从中读出数据还是向里面写入数据。
CPU想要进行数据的读写,必须和外部器件进行下面3类信息的交互
那么CPU通过什么将地址,数据和控制信息传到存储器芯片中的呢
电子计算机能处理传输的信息都是电信号,电信号当然要用导线传送,在计算机中有专门有链接CPU和其它芯片的导线,通常称为总线。总线在物理上来讲,就是一根根导线的集合。
根据传送信息的不同,总线从逻辑上又分为3类。地址总线,控制总线,数据总线。
eg:读操作
CPU是通过地址总线来指定存储单元。地址总线上能传送多是个不同的信息,CPU就可以多少个存储单元进行寻址。
假设一个CPU有10根地址总线,看看寻址情况,一根导线可以传送稳定状态只有两种,高电平和低电平。用二进制表示就是1或者0。10根导线可以传送10位二进制数据,而10位二进制数可以表示多少可以表示210
个不同的数据,最小数是0.最大数是1023。
计算机64位和32位代表的是寻址能力。体现出不同地址总线。一个CPU有N根地址线。则可以说这个CPU的地址总线宽度为N.这样的CPU最多可以寻找2的N次方个内存单元。
CPU与内存或者其他器件之间的数据传送是通过数据总线来进行的。数据总线决定了CPU和外界的数据传送速度,8根数据总线一次可以传送一个8位二进制数据,16根数据总线一次可以传送连个字节。
8808CPU的数据总线宽度为8,8086CPU的数据总线宽度为16 、他们向内存中写入数据89D8H时,是如何通过数据总线传送数据。
8088CPU分两次传送传送89D8H,第一次传送D8,第二次89.(一个十六进制刚好16bit)
8086有16根数据线,可以一次传送16位数据。所以可以一次传送数据89D8H
CPU对外部器件控制是通过控制总线来进行的,控制总线是一些不同控制线的集合,有多少根控制线就有多少种控制。所以控制宽度决定了CPU对外部器件的控制能力
内存读或者写是由几根控制线综合发出的,其中有一根称为”读信号输出”的控制线负责由CPU向外传送读信号。CPU向该控制线上输出低电平表示将要读取数据。一根称为写信号的控制线则负责传送写信号
汇编指令是机器指令的助记符。同机器指令一一对应
每一种CPU都有自己的汇编指令集
CPU可以直接使用的信息在存储器中存放
在存储器中指令和数据没有任何区别,都是二进制信息
存储单元从0开始顺序编号
1个存储单元可以存储8个bit,即8位二进制数
1Byte=8bit
每个CPU芯片都有许多管脚,这些管脚和总线相连,这些管脚引出总线
地址总线的宽度决定了CPU的寻址能力
数据总线的宽度决定了CPU与其它器件进行数据传送时的一次数据传送量
控制总线的宽度决定了CPU系统中其它器件的控制能力
CPU可以寻址到的内存单元构成内存地址空间
主板上有核心器件,这些器件通过总线相连。这些器件有CPU,存储器,外围芯片组,扩展插槽等,扩展插槽上有RAM内存条和各类接口卡
CPU对外部设备不能直接控制,如显示器,音响,打印机等,直接控制这些设备进行工作的是插在扩展插槽上的接口卡,扩展插槽通过总线和CPU相连,所以接口卡通过总线通CPU相连,CPU可以直接控制这些接口卡,从而实现CPU对外部设备的间接控制。
PC机中装有多个存储器芯片,存储器芯片从物理连接上看是独立的不同器件,从读写属性上看分为两类。随机存储器RAM和只读存储器ROM,随机存储器可读可写,但是必须带电存储,关机后存储内容丢失,只读存储器只能读取不能写入,关机后其中的内容不丢失
上面那些存储器,在物理上是独立的器件,但是都有以下两个相同点
也就是说,CPU在操控他们的时候,把他们当作内存来对待,把他们总的看作一个由若干存储单元组成的逻辑存储器器,这个逻辑存储器就是我们所说的内存地址空间
CPU将系统中个各类存储器看作一个逻辑存储器的情况
所有的物理存储器被看作一个若干存储器的那组成的逻辑存储
器,每个物理存储器在这个逻辑存储器中占有一个地址段,及一段地址空间,CPU在这段空间中读写数据,实际上就是在相对应的物理存储器中读写数据。
内存地址空间的大小受CPU地址总线宽度的限制,8086CPU的地址总线宽度为20,可以传送220 个不同的地址信息(从0到220 -1),即可以定位220个内存单元,则8086CPU的内存地址空间大小为1MB,同理,80386CPU的地址总线宽度为32,则内存地址空间最大为4GB。
在基于一个计算机硬件系统编程的时候,必须要指定这个系统中的内存地址空间分配情况,因为当我们想在某类存储器中读写数据时,必须指定它第一个单元的地址和最后一个单元的地址,才能保证读写操作是在预期的存储器中进行,比如要想显示器输出一段信息,那么必须将这些信息写到显存中,显卡才能将它们输出到显示器上,要想显存中写入数据,必须要知道显存在内存地址空间的地址。
不同的计算机系统的内存地址空间的分配情况不同。如8086PC机 地址 0~9FFFF的内存单元是主存储器地址空间(RAM),A0000~BFFFF是显存地址空间,C0000到FFFFF是各类ROM地址空间
最终运行程序的是CPU,我们用汇编语言编程的时候,必须要从CPU的角度考虑问题,对CPU来讲,系统中的所有存储器中的存储单元都处于一个同一的逻辑存储器中,他的容量受CPU寻址能力地址总线的宽度的限制,这个逻辑存储器即是我们所说的内存地址空间。
一个典型的CPU由运算器,控制器,寄存器等器件构成。这些器件靠内部的总线相连,前面提到的地址总线相对于CPU内部来说是外部总线,内部总线实现CPU内部各个器件之间的联系,外部总线实现CPU和主板上其它器件的联系。
在CPU中:
对程序员来说,CPU中的主要部件是寄存器,寄存器是CPU中程序员可以用指令读写的部件,程序员通过改变各种寄存器中的内容来实现对CPU的控制。
不同的CPU,寄存器的个数,结构是不同的,8086CPU有14个寄存器,每个寄存器有一个名称,这些寄存器是:AX,BX,CX,DX,SI,DI,SP,BP,IP,CS,SS,DS,ES,PSW.
8086CPU的所有寄存器都是16位的,可以存放两个字节。
AX,BX,CX,DX这个4个寄存器通常用来存放一般性数据,被称为通用寄存器。
以AX为例子。
[外链图片转存失败(img-t6Obrlzp-1564631038330)(D:\汇编\王爽版\AX寄存器.png)]
为了保证兼容,因为之前的寄存器是8位的,所以这四个16位寄存器都可以分为来个独立使用的8位寄存器来用。
AH这类可以当8位寄存器使用。
补零的地方相当于没有。
因为兼容性考虑,8086CPU可以处理两种尺寸的数据。
字节: 记为byte,一个字节由8个bit组成,可以存在8位寄存器中
字: 记为word,一个字由两个字节组成,两个字节分别称为,这个字的高位字节和低位字节。
高八位地址在低八位之后
一个字可以存在一个16寄存器中,这个字的高字节和低字节自然就存在这个寄存器的高8位和低8位寄存器中。
在AH和AL中的数据,既可以看作一个字型数据的高8位和低8位,这个字型数据的大小是20000;又可以看成是两个独立的字型数据。他们的大小分别是78和32.
由于一个内存单元可存放8位数据,CPU中的寄存器又可以存放n个8位的数据,所以计算机的数据大多数是由1~N个8位数据构成。很多时候,需要直观地看出数据的各个字节数据的值。
用16进制表示的时候可以更直观地看出,这个数据由哪两个8位数据构成。
如果AX中存放4E20,则AH里是4E,AL里是20.
为了区分不同进制,在十六进制的后面加H,在二进制数据的后面加B,十进制后面什么都不加。
汇编指令 | 高级语言 |
---|---|
mov ax,18 | AX=18 |
mov ah,78 | AH=78 |
add ax,8 | AX=AX+8 |
mov ax,bx | AX=BX |
add ax,bx | AX=AX+BX |
汇编指令或者一个寄存器的名称不区分大小写
cpu访问内存单元时,要给出内存单元的地址,所有的内存单元构成的存储空间是一个一维的线性空间,每个内存单元在这个空间中的唯一的地址,我们将唯一的地址称为物理地址。cpu通过地址总线送入存储器的,必须是一个内存单元的地址,在CPU向地址总线上发出地址之前,必须要在内部先形成这个物理地址,不同的CPU可以有不同的形成物理地址的方式。
8086是16位结构的CPU,16位结构的含义
8086CPU的20位地址总线,可以传送20位地址,达到1MB的寻址能力,8086CPU是16位结构。内部一次性处理,传输,暂时存储的地址为16位,它只能送出16位的地址,表现出的寻址能力只能有64KB.
8086CPU采用一种在内部用两个16位地址合成的方法来形成一个20位的物理地址。
地址加法器采用 物理地址=段地址x16+偏移量 的方法用端地址和偏移地址合成物理地址。
16进制乘16恰好是进位。
由段地址x16引发的讨论
段地址x16有一个更常用的说法,就是左移动4位。这里指的位是二进制位。
CPU在访问内存地址
寻址空间一般指的是CPU对于内存寻址的能力。通俗地说,就是能最多用到多少内存的一个问题。数据在[存储器](https://baike.baidu.com/item/存储器](RAM)中存放是有规律的 ,CPU在运算的时候需要把数据提取出来就需要知道数据存放在哪里 ,这时候就需要挨家挨户的找,这就叫做寻址,但如果地址太多超出了CPU的能力范围,CPU就无法找到数据了。 CPU最大能查找多大范围的地址叫做寻址能力 ,CPU的寻址能力以字节为单位 ,如32位寻址的CPU可以寻址2的32次方大小的地址也就是4G,这也是为什么32位的CPU最大能搭配4G内存的原因 ,再多的话CPU就找不到了。