摘自《汇编语言——第2版·王爽》
Q:什么是机器指令?
A:机器指令是计算机能“读懂”的语言,用一系列的 0、1 来表示(如:1000100111011000 能看懂是神马鬼??)
Q:为什么会产生汇编语言?
A:汇编语言是为了代替羞涩难懂的机器语言而产生的,用一些容易记忆的汇编指令来书写程序
例如:把 寄存器 BX 的内容传送到 寄存器 AX 中
操作:寄存器 BX 的内容送到 寄存器 AX 中
机器指令:1000100111011000
汇编指令:mov ax , bx(就是这么简洁,666)
Q:但是计算机只能读懂机器语言,如何让计算机“读懂”汇编语言?
A:这需要用到一个程序,能把汇编指令翻译成机器指令,而这个程序就叫做“编译器”
汇编语言的组成:
1、汇编指令(有对应的机器码,亦是汇编语言的核心部分)
2、伪指令(没有对应的机器码,由编译器执行,计算机不执行)
3、其它符号(+、-、*、/ 由编译器识别,没有对应机器码)
—2015/09/01
Q:指令和数据分别是什么?
A:指令和数据是应用上的概念,在内存或硬盘上,指令和数据都是二进制信息,而CPU把有的信息看作是指令,有的看作是信息
例如:二进制信息 1000100111011000,计算机可以看作是 86D8h 的数据,也可以看做是 mov ax , bx 的指令来执行
CPU 与 存储器 的信息传递
Q:CPU 是怎样从存储器(内存或硬盘)中读写数据?
A:CPU 读写数据要与外部器件进行以下 3 步信息交互
1、获取存储单元的地址(地址信息交互)
2、获取“读”或“写”的命令(控制信息交互)
3、获取“读”或“写”的信息(数据信息交互)
Q:那么 CPU 是通过什么将地址、控制、数据信息进行传递?
A:这些信息都是电信号,通过 CPU 与其他芯片连接的导线来传递(统称为总线),在逻辑上,因功能的不同而分为:地址总线、控制总线、数据总线
以下图为 CPU 读取 3 号单元的数据
CPU 对存储器的 3 号单元进行读操作步骤(CPU 的写操作与读操作基本一致):
1、CPU 通过地址总线向 存储器 发出 “3” 信息(CPU 走向 排列整齐的存储单元列(存储器)的 “3号位置”)
2、CPU 通过控制总线向 存储器 发送 “读” 信息(要求 “3号位置” 的 ”同志 08“ 出列)
3、存储器 通过数据总线向 CPU 发送 08 的数据(存储器将出列的 ”同志 08“ 发送到 CPU 的 ”家中“)
机器码:101000000000001100000000
汇编指令:mov ax , [3]
含义:从 3 号单元读取数据送入到 CPU 的寄存器 AX
地址总线
Q:地址总线是怎样发送信息的,对 CPU 的影响?
A:地址总线的数量决定 CPU 的寻址能力,寻址能力为 2 的 N 次方(N 为地址总线的根数)
上图传输的地址是 11 单元
数据总线
Q:数据总线怎样传输数据,对 CPU 的影响?
A:数据总线的宽度决定 CPU 一次可传送的字节,8 根数据总线一次可传送 8 位二进制,8088 的数据总线宽度是 8,8086 的数据总线宽度是 16
以下图分别是 8088 , 8086 向内存写入 89D8h
控制总线
Q:控制总线对 CPU 的影响?
A:控制总线的宽度决定 CPU 拥有多小种对外部器件的控制能力,一根”读信号输出“的控制线负责向外发送”读“信号,一根”写信号输出“的控制线负责向外发送”写“信号
计算机内部构成
以下内容摘自网络百度,作课外扩充
CPU 发展史:8086 ->80286 -> 80386 ->80486 ->PENTIUM -> ...... ->至今,后面的CPU兼容前面的功能(多了一些指令集)
CPU 组成:CPU 主要由运算器和控制器组成
1、运算器:主要功能是对数据的算术运算、逻辑运算、逻辑判断等操作
2、控制器:是计算机指令的解释和执行结构,主要功能是控制运算器、存储器、输出输入设备的协同工作
CPU 性能指标:1、时钟频率(主频):Hz/s ,单位有 Hz、MHz、GHz.。CPU 实际频率 = 主频率 * 核数 * 0.8
2、指令周期:执行一条指令所用的时间(一条完整的指令包括 取指令、解释指令、执行指令)
3、字长:运算的二进制的数据位数
4、CPU 缓存:安装在 CPU 内部的小存储量的快速存储器(SRAM),用于缓解 CPU 与 内存 之间读取速度的差异
CPU 寄存器:寄存器是 CPU 内部元件。1、将寄存器内的数据执行算术、逻辑运算 2、可以指向存放在寄存器中的内存地址(寻址) 3、读取数据到电脑周边设备。
8086 CPU 有 8 个 8 位寄存器,这些8位的寄存器分别组成 16 位的寄存器:
AH & AL = AX (累加寄存器,用于运算)
BH & BL = BX (基址寄存器,用于地址索引)
CH & CL = CX (计算寄存器,用于计数)
DH & DL = DX (数据寄存器,常用于数据传递)
8086 CPU 还设定 4 个段寄存器,用于保存“段”地址:
CS (Code Segment)代码段寄存器
DS (Data Segment)数据段寄存器
SS (Stack Segment)堆栈段寄存器
ES (Extra Segment)附加段寄存器
当执行一个程序,需要确定程序的代码、数据、堆栈在内存的位置,通过设定"段"寄存器来指向这些位置(通常将 DS 固定,根据需要修改 CS ),因为当时的寄存器只有 16 位(64KB),所以,程序和数据组合起来要限制在 DS 所指的 64 KB内。
8086 CPU 特殊的寄存器:
IP (Intruction Pointer)指令指针寄存器,与 CS 配合使用,跟踪程序的执行过程
SP(Stack Pointer)堆栈指针寄存器,与 SS 配合使用,可指向目前堆栈的位置
BP(Base Pointer)基址指针寄存器,可用作 SS 的一个相对基址位置
SI (Source Index)源变址寄存器,用于存放相对于 DS 段的源变址指针
DI (Destination Index):目的变址寄存器,用于存放相对于 ES 段的目的变址指针
FR (Flag Register):标志寄存器,有 9 个标志,用二进制位表示每个标志的状态
8086 地址总线有 20 位,但 8086 能做的运算仅限于 16 位数据,所以必须分段寻址,才能控制整个内存地址。
20 位地址分两部分:1、段基址(段的开始地址) 16 位二进制数后面再加 4 个二进制 0
2、偏移量,16 位二进制数,指向段基址中的任何一个地址
如:(段基址)2222,(偏移量)3333,实际 20 位地址值是:25553