汇编语言
汇编语言是直接在硬件上工作的编程语言,首先要了解硬件系统的结构,才能有效的应用汇编语言对其进行编程
机器语言
机器语言
-
机器语言是机器指令的集合
-
机器指令展开来说就是一台机器可以正确执行的命令
汇编语言的产生
-
汇编语言的主体是汇编指令
-
汇编语言和机器指令的差别在于指令的表示方法上。汇编语言是机器指令便于记忆的书写格式
-
汇编语言是机器指令的助记符
-
寄存器
CPU中可以存储数据的器件,一个CPU中有多个寄存器
汇编语言的组成
汇编语言有以下三类组成
-
汇编指令 机器码的助记符(mov push)有对应的机器码
-
伪指令 没有对应的机器码,由编译器执行,计算机不执行
-
其他符号 + - * / 由编译器识别,没有对应的机器码
存储器
-
CPU是计算机的核心部件,他控制整个计算机的运作并进行计算,要想让一个CPU工作,就必须向他提供指令和数据
-
指令和数据在存储器中存放,也就是平时说的内存
-
在一台PC中内存的作用仅次于CPU
-
离开了内存,性能再好的CPU也无法工作
-
磁盘不同于内存,磁盘上的数据和程序如果不读到内存中,就无法被CPU使用
指令和数据
-
指令和数据是应用上的概念
-
在内存或磁盘上,指令和数据没有任何区别,都是二进制信息
存储单元
-
存储区被划分为若干个存储单元,每个存储单元从0开始顺序编号
CPU对存储器的读写
-
CPU要想进行数据的读写,必须和外部器件()进行三类信息的交互
-
存储单元的地址(地址信息)
-
期间的选择,读或写的命令(控制信息)
-
读或写的数据(数据信息)
-
-
在计算机中专门链接CPU与其他芯片的导线,通常称为总线
-
物理上:一根根导线的集合
-
逻辑上划分为:
-
地址总线
-
数据总线
-
控制总线
-
-
地址总线
-
CPU是通过地址总线来指定存储单元的
-
地址总线上能传送多少个不同的信息,CPU就可以对多少个存储单元进行寻址
-
-
一个CPU有N根地址总线,则可以说这个CPU的地址总线的宽度为N
-
这样的CPU最多可以寻找2的N次方个内存单元
数据总线
-
CPU与内存或其它器件之间的数据传送是通过数据总线来进行的
-
数据总线的宽度决定了CPU和外界的数据传送速度
-
控制总线
-
CPU对外部器件的控制是通过控制总线来进行的,控制总线是一些不同控制线的集合
-
有多少跟控制总线,即意味着CPU提供了对外部器件的多少种控制
-
控制总线的宽度决定了CPU对外部器件的控制能力
-
控制总线上发布的控制信息
-
-
内存读或写命令由几根控制总线综合发出
-
其中有一根名为读信号输出控制总线负责由CPU向外传送读信号,CPU向该控制总线上输出低电平表示将要读取数据
-
有一根名为写信号输出控制总线负责由CPU向外传送写信号
-
小结
-
汇编指令是机器指令的助记符,同机器指令一一对应
-
每一种CPU都有自己的汇编指令集
-
CPU都可以直接使用的信息在存储器中存放
-
在存储器中指令和数据没有任何区别,都是二进制信息
-
每一个CPU芯片都有许多管脚,这些管脚和总线相连。也可以说,这些管脚引出总线。一个CPU可以引出三种总线的宽度标志了这个CPU的不同方面的性能
-
地址总线的宽度决定了CPU的寻址能力
-
数据总线的宽度绝地过了CPU与其他器件进行数据传送时的一次数据传送量
-
控制总线宽度决定了CPU对系统中其他器件的控制能力
-
内存地址空间
主板
-
在每一台PC机中,都有一个主板,主板上与核心器件和一些主要器件
-
这些器件通过总线(地址总线、数据总线、控制总线)相连
接口卡
-
计算机系统中,所有可用程序控制其工作做的设备,必须受到CPU的控制
-
CPU对外部设备不能直接控制,如显示器、音箱、打印机等。直接控制这些设备进行工作的时插在扩展插槽上的接口卡
各类存储器芯片
-
从读写属性上看分为两类:
随机存储器RAM和只读存储器ROM
-
从功能和连接上分类
-
随机存储器RAM
-
装有BIOS的ROM
-
接口卡上的RAM
-
BIOS是由主板和各类接口卡厂商提供的软件系统,可以通过它利用该硬件设备进行最基本的输入输出。在主板和某些接口上都插有存储相应BIOS的ROM
-
上述存储器在物理上是独立的器件
-
但在逻辑上是相同的
-
都和CPU的总线相连
-
CPU对他们进行读写的时候都通过控制总线发出内存读写命令
-
-
CPU将各类存储器看作一个逻辑存储器
-
所有的物理存储器被看作一个由若干存储单元构成的逻辑存储器
-
每个物理存储器在这个逻辑存储器中占有一个地址段,及一段地址空间
-
CPU在这段地址空间中读写数据,实际上就是在相对的物理存储器中读取数据
-
-
最终运行程序的是CPU,我们用汇编编程的时候,必须要从CPU角度考虑问题
-
对CPU来讲,系统中所有的存储器中的存储单元都处于一个统一的逻辑存储器中,它的容量受CPU寻址能力的限制。这个逻辑存储单元即使我们所说的内存地址空间
-
寄存器(CPU工作原理)
概述
-
一个典型的CPU由运算器、控制器、寄存器等器件自称,这些器件靠内部总线相连
-
区别:
-
内部连线实现CPU内部各个器件之间的联系
-
外部总线实现CPU和主板上其他器件的联系
-
通用寄存器
-
8086所有的寄存器都是16位的,可以存放两个字节(一个字)
-
AX,BX,CX,DX通常用来存放一般性数据被称为通用寄存器
-
-
8086为保证兼容性,16位通用寄存器可以分为两个独立的8位寄存器使用
-
AX可以分为AL和AH(低八位和高八位)
字在寄存器中的存储
-
一个字可以存在一个16位寄存器中,这个字的高位字节和低位字节自然就存在这个寄存器的高八位和低八位寄存器中
汇编指令
汇编语言不区分大小写
-
-
mov指令可以改变8086CPU大部分寄存器的值,被称为传送指令
-
已知的mov指令可完成的两种传送功能
-
将数据直接送入寄存器
-
将一个寄存器中的内容送入另一个寄存器
-
除此之外,mov指令还可以将一个内存单元中的内容送入另一个寄存器
mov al,[0] 将地址0当中的数据读入al
-
-
-
mov 指令不能用来设置CS、IP寄存器的值
-
同时修改CS、IP的指令
jmp 段地址 :偏移地址
-
功能:用指令中给出的段地址修改CS,偏移地址修改IP
-
仅修改IP的内容
jmp某一合法寄存器
jmp ax (类似于mov IP,ax)
功能:用寄存器中的值修改IP
-
物理地址
-
CPU访问内存但愿是要给出内存单元的地址,所有的内存单元构成的空间是一个一维的线性空间,我们将这个一维的线性空间称为物理地址
-
概括地讲,16位结构描述了一个CPU具有以下几个方面特征
-
运算器一次最多可以处理16位的数据
-
寄存器的最大宽度为16位
-
寄存器和运算器之间的通路是16位的
-
-
8086CPU读写内存时,发生了这么一件事
-
CPU中的相关部件提供了两个16位的地址,一个称为段地址,另一个称为偏移地址
-
段地址和偏移地址通过内部总线送入一个称为地址加法器的部件
-
地址加法器将两个16位地址合并成一个20位的地址
-
-
地址加法器合成物理地址的方法:
物理地址=段地址*16+偏移地址
-
我们通过观察移位次数和各种形式数据的关系:
-
一个数据的二进制形式左移一位,相当于该数据乘以2
-
一个数据的二进制形式左移N位,相当于该数据乘以2的N次方
-
-
段的概念
-
错误认知:内存被划分成了一个一个的段,每一个段有一个段地址
-
其实:内存并没有分段,端的划分来自于CPU,由于8086CPU用(段地址*16)+偏移地址=物理地址的方式给出内存单元的物理地址,使得我们可以用分段的方式来管理内存
-
CPU访问内存单元时,必须向内存提供内存单元的物理地址
-
8086CPU在内部用段地址和偏移地址移位相加的方法形成最终的物理地址
-
CPU可以通过不同的段地址和偏移地址形成同一个物理地址
-
段寄存器
-
8086CPU有四个寄存器
-
CS 代码寄存器
-
DS 数据寄存器
-
SS 堆栈寄存器
-
ES 附加段寄存器
-
CS和IP
-
CS和IP是8086CPU中最关键的寄存器,他们指示了CPU当前要读取指令的地址
-
CS为代码寄存器
-
IP为指令指针寄存器
-
-
8086PC工过程的简要描述
-
从CS:IP指向内存单元读取指令,读取的指令进入指令缓冲器
-
IP=
-
-