冯·诺依曼计算机由五大组成部分组成,结构如下:
现代计算机很多方面都对冯·诺依曼计算机进行了改进,改进结构如下:
与此同时,现代计算机广泛采取总线结构,总线连接系统中的各个部分,使得计算机系统组合更加灵活,扩展更加方便。
下面详细介绍下处理器,存储器,外设和系统总线。
①、处理器
处理器是计算机的运算和控制核心部件,在微机中又称为微处理器。
微型计算机简称“微型机”、“微机”,由于其具备人脑的某些功能,所以也称其为“微电脑”。微型计算机是由大规模集成电路组成的、体积较小的电子计算机。
②、存储器
存储器是计算机的记忆部件,用来存放程序和数据。存储系统的组成如下:
③、外设
外部设备是指计算机上配备的输入设备和输出设备,作用是让用户与计算机实现更好的交互,比如说鼠标、键盘、屏幕,让打游戏,追剧成为可能。
④、系统总线
总线(Bus)是用于多个部件相互连接,传递信息的公共通道,其实就是一组公用的导线。对于汇编语言程序员而言,处理器,存储器和外设依次被抽象为寄存器,存储器地址,输入输出地址。
汇编语言与该机语言进行对比:
汇编语言 | 高级语言 |
---|---|
汇编语言与处理器密切相关,可移植性较差 | 高级语言与具体计算机无关,便于移植 |
汇编语言功能有限、涉及硬件细节,编写繁琐困难 | 高级语言功能强大,语法自然,容易掌握和应用 |
汇编语言的优势:直接、有效地控制硬件,容易产生运行速度快、指令序列短小的高效率目标程序 | 高级语言不易直接控制计算机的各种操作,编译程序产生的目标程序往往比较庞大 |
处理器内部需要高速的存储单元,用于暂时存放程序执行过程中的代码和数据,这些存储单元就是寄存器。
①、通用寄存器
通用寄存器一班指处理器最常使用的整数通用寄存器,可用来保存整数数据,地址等。
8086处理器的8个16位通用寄存器分别被命名为:AX,BX,CX,DX,SI,DI,BP和SP。可以进一步分为高字节部分和低字节部分,形成8个8位通用寄存器AH和AL,BH和BL,CH和CL,DH和DL,这些既是一个整体,又可独立使用。
每个寄存器有特定功能,如下所示:
名称 | 中文名称 | 作用 |
---|---|---|
AX | 累加器 | 使用频率最高,用于算数与逻辑运算以及和外设传送信息等功能的实现 |
BX | 基址寄存器 | 常用做存放存储器地址,以方便指向变量或数组中的元素 |
CX | 计数器 | 常用作循环操作等指令中的计数器 |
DX | 数据存储器 | 用来存放数据,在输入输出指令存放外设端口地址 |
SI | 源变址寄存器 | 用于指向字符串或数组的源操作数 |
DI | 目的变址寄存器 | 用于指向字符串或数组的目的操作数 |
BP | 基址指针寄存器 | 默认情况下指向程序程序堆栈区域的数据,主要用于在子程序中访问通过堆栈传递的参数和局部变量 |
SP | 堆栈指针寄存器 | 专用于指向程序堆栈区域顶部的数据,在涉及堆栈操作的指令中会自动增加或减少。 |
源操作数
被传送或参与运算的操作数
目的操作数
保存传送结果或运算结果的操作数
②、指令指针寄存器
作用:保存将要执行的指令在主存的存储器地址
指令指针寄存器IP是一个专用寄存器,具有自动增量的能力,指向下一条指令。
分支、调用等操作时执行控制转移指令修改,引起程序转移到指定的指令执行。
出现中断或异常时被处理器赋值而相应改变。
③、标志寄存器
④、段寄存器
段寄存器的作用就是将相关代码放在一起,将相关数据放在一起。
有三类基本段,分别是代码段,数据段和堆栈段。
主存储器比较大,划分为很多小的单元,称为存储单元,给每个存储单元分配一个编号,叫做存储单元地址。每个存储单元以字节为基本存储单位,即字节编址,一个字节(Byte)等于8个二进制位(Bit)
二进制位是计算机存储信息的最小单位(常用单位),一个二进制位可以表示0和1一位二进制数
8086是16位结构的处理器,也就是说字长为16位,称16个二进制位为一个字(两个字节)。
字节是寻址的最小单位。
内存中两个紧挨着的字节,它们的内存地址差1。但是一个字节内的位,就没有地址的概念。你当然也可以定义一种计算机,每个位对应一个内存地址,但是在现代太另类了,估计没有人为你的计算机编程。
字是计算机一次处理数据的最大单位。
1、 CPU的寄存器的长度是一个字;
2、CPU一个指令最多从内存中读取的数据量就是一个字;
16位(2个字节)构成一个字(Word)32位(4个字节)构成一个双字(Double Word)如下图
二进制数据右边最低位称为最低有效位LSB(D0),左边最高位称为最高有效位MSB,如下图所示。
某个存储单元可以有多个逻辑地址,但只有一个唯一的物理地址。
一个二进制位有0和1两种状态,那么N位二进制数就有2的n次方个不同的编码,8086有20位地址总线,也就是有20个数字信号访问存储器,8086支持2的20个(1M)存储单元,其物理地址空间为0~2^20-1.地址编号习惯用十六进制的数来表示,用五位16进制的数表示为: 00000H ~ FFFFH,如下图:
因为8086处理器只有16位寄存器,不可以保存完整的20位物理地址,最多只能表示从0000H~FFFH,所以引入逻辑地址的概念,逻辑地址又包括段基地址和偏移地址,都是用16位表示的,上面已经介绍了,可以通过逻辑地址转换成物理地址。
转换规则:
物理地址=段地址×16+偏移地址
也就是说段地址左移二进制四位(十六进制一位),然后加上偏移地址就得到物理地址了,如下图:
同一个物理地址可以有多个逻辑地址。
基本段的逻辑地址如下所示:
8086规定段基地址低4为均为0,每个段最大不超过64KB。并不要求每个段必须是64KB。各段之间可以完全分开,也可以部分重叠,但各段的内容不允许冲突。各段独立分配和相互重叠的分配示例如下:
汇编语言的主体是处理器指令。
传送指令MOV
作用:将数据从一个位置传送到另一个位置
mov dest,src
源操作数src:被传送的数据或数据所在的位置
目的操作数dest:数据将要传送到的位置
示意图如下:
执行性语句:表达处理器指令(硬指令)
标号: 硬指令助记符 操作数,操作数,…;注释
说明性语句:表达伪指令,控制汇编方式
名字 伪指令助记符 参数,参数,…;注释
帮助记忆指令的符号。
助记符:DB
功能:在主存中分配若干存储空间,用于保存变量值,该变量以字节为单位存取
助记符:MOV
功能:数据传送
助记符:MSG
功能:指示字符串在主存的逻辑地址,也就是这个字符串的变量名
还有很多。
微软宏汇编程序MASM
16位模拟DOS环境
具体开发过程参考我的另一篇博客:
汇编语言之DOSBox的安装和使用
第一章结束!