第 1 页









第二章 计算机的工作原理与指令系统
本章主要内容
2.1 计算机系统的硬件结构
计算机的五大主要部件、总线结构。
2.2 CPU的组成与工作原理
CPU的组成、工作原理,数据表示、编码和运算,
CPU控制,x86结构。
2.3 内存的组成及读写原理
内存组成和基本结构,读写方式,内存与 CPU的接口,
堆栈操作。
2.4 指令系统
指令系统的概念,寻址,x86指令系统简介。
2.5 计算机的工作过程
CPU的基本工作过程
作业题 58页
1-5,7-12,14-16、
18-21,25-27,33-35
第 2 页









2.1 计算机系统的硬件结构
2.1.1 计算机的主要部件
计算机五大基本部件:
运算器 控制器
内存储器
输入设备 输出设

外存储器
控制
数据
地址或指令CPU




存储器




CPU = 运算器 +控制器 +寄存器
Central Processing Unit
MPU = 一块 IC的 CPU
Micro Processing Unit
⑴ 运算器
执行全部的算术和逻辑
运算 。
⑵ 控制器
计算机的控制中心, 控
制和同步其他各个部件 。
⑶ 存储器
计算机的主要记忆部件,
以字节为单位的, 线性编
址的二进制记忆部件 。
⑷ 输入, 输出设备
通过接口电路连接到总
线的计算机外部设备 。
第 3 页









2.1.2 计算机的总线结构
总线 (BUS),能为多个部件服务的公共信息传送线路, 分时地
发送与接收各部件的信息 。
总线信息,地址信息 (地址总线 ),数据信息 (数据总线 )和控制
信息 (控制总线 )
? 地址总线 (AB):单向, 用于向内存, 外部端口传输地址信息 。
? 数据总线 (DB):双向, 传输各种数据信息 。
? 控制总线 (CB):传输控制信息 。 包括读写, 中断等 。
系统总线
CPU 内存
接口
外部设备
接口
外部设备…,
单总线结构
第 4 页









连接到总线上的设备主要有:
?CPU —— 一般情况下总线由 CPU控制
?内部存储器 —— 是完全被动的总线设备
?接口电路 —— 所有外部设备必须通过接口电路连接到计算
机,不同的接口电路可能拥有不同的端口地址、中断等。
总线的特点 —— 公共性、高速性、标准性。
单总线和多总线
多总线 —— 计算机系统中同时存在多条总线。目前微机算
机中都是采用多总线结构。
? 解决不同的部件速度不一致的问题。
? 为存储器设计专用的数据通道。
? 兼容符合不同的总线标准的设备。
2.1.2 计算机的总线结构
第 5 页









2.2 CPU的组成与工作原理
? 加法器的两个输入:累加器 A,缓存器 R。
? 加法器的输出:送入累加器 A,也可以发送给数据总线 。
? 完成算术运算和逻辑运算
CPU主要包括运算器和控制器
1,运算器
ALU,Arithmetic and logical Unit
⑴ 累加器 A,N位的寄存器,
用于保存运算过程中的有
关数据 。
⑵ 缓存器 R( 暂时寄存器 ),
N位寄存器, 接收来自累
加器和数据总线的数据 。
⑶ 加法器 Σ, 由 N个全加器
构成 。
数据总线
加法器
暂存器 R
累加器 A
暂存器
第 6 页









2.2.1 中央处理器的基本构成
2.控制器
⑴ 程序计数器 PC,又称指令
计数器, 指令指针 ( IP)
⑵ 指令寄存器 IR
⑶ 指令译码器 ID,又称操作
码译码器, 指令功能分析
解释器 。
⑷ 地址形成部件
⑸ 微操作信号发生器, 确定
完成指令所需要的步骤及
完成每一步骤所需要的控
制信号组合 。
⑹ 时序部件, 产生定时信号
程 序 计 数 器 P C
地 址 形 成 部 件 A t
微 操 作 信 号
发 生 器
时 序 部 件
指 令 译 码 器
O P A
D B
A B
C B
?
?
?
I R
微 命 令
?
?
?
第 7 页









2.2.1 中央处理器的基本构成
—— CPU中的寄存器组
3,CPU中的寄存器组
按功能分有通用寄存器和专用寄存器
⑴ 通用寄存器
?存放原始数据和运算结果
?作为变址寄存器, 计数器, 地址指针等 。
⑵ 专用寄存器
?程序计数器 PC,指令指针 IP
?指令寄存器 IR等
?状态标志寄存器, 主要包括两部分内容:
? 状态标志, 如:进位标志, 结果为零标志等, 大多
数运算类指令的执行将会影响到这些标志位 。
? 控制标志, 如:中断标志, 陷阱标志等 。
第 8 页









2.2.2 计算机中数据信息的表示
数字化信息编码的概念:
在计算机内一切信息必须进行数字化编码(即用二进
制代码形式),才能在机内传送、存储和处理。
输入
电路
10110101 计算机
主机
10100010 输出
电路
二进制,只有 0和 1,记数按“逢二进一”规律,第 k位权是 2k。
二进制 十进制
bnbn-1bn-2 ……b 0 = dndn-1dn-2 …..,d0 =
ΣbkX2k
k=0
n
ΣdkX10k
k=0
n
1011=1X23+0X22+1X21+1X20 325 = 3X102 + 2X101 + 5X100
= 1X8 + 0X4 + 1X2 + 1X1 = 3X100 + 2X10 + 5X1
第 9 页









二进制,b7 b6 b5 b4 b3 b2 b1 b0
权值,128 64 32 16 8 4 2 1
27 26 25 24 23 22 21 20
二进制小数:小数点后第 k位权值位 2-k = 1/2k。
1101.1001 (二进制 ) = 1X8 + 1X4 + 0X2 + 1X1 + 1X0.5
+ 0X0.25 + 0X0.125 + 1X0.0625
= 13.5625 (十进制 )
二进制,0, B-1 b-2 b-3 b-4
权值,0.5 0.25 0.125 0.0625
2-1 2-2 2-3 2-4
1/2 1/4 1/8 1/16
2.2.2 计算机中数据信息的表示
—— 二进制
第 10 页









原码、反码和补码
原码,二进制的最高位为符号位,0正 1负,其余各位同无符号二
进制。
[125D]原 = 0 1111101
[-125D]原 = 1 1111101
符号位 数值位
8位原码表示数的范围,-127 ~ +127,且 00000000和
10000000含义相同。
反码,正数的反码和原码相同,负数的反码为其原码将数
值位求反,即 0变 1,1变 0。
[125D]反 = 0 1111101
[-125D]反 = 1 0000010
符号位 数值位
2.2.2 计算机中数据信息的表示
—— 原码、反码和补码
第 11 页









8位反码表示数的范围,-127 ~ +127,且 0 0000000和
11111111含义相同。
补码,正数的补码和原码相同,负数的补码为其原码将数值
位求反 +1。
[125D]补 = 0 1111101
[-125D]补 = 1 0000011
符号位 数值位
8位补码表示数的范围,-128 ~ +127,最主要的优点是在
加、减运算时不需要判断符号位,所以 CPU在进行有符号数
的加、减运算时用的是补码。
例:分别求出十进制数 78D和 -120D的原码、反码和补码。
将 78D和 120D分别转换成二进制:
2.2.2 计算机中数据信息的表示
—— 原码、反码和补码
第 12 页









78D和 -120D的原码:
[78D]原 = 0 1001110[-120D]原 = 1 1111000
78D和 -120D的反码:
[78D]反 = 0 1001110[-120D]反 = 1 0000111
78D和 -120D的补码:
[78D]补 = 0 1001110[-120D]补 = 1 0001000
2 | 1 2 0
2 | 6 0 … 0
2 | 3 0 … 0
2 | 1 5 … 0
2 | 7 … 1
2 | 3 … 1
2 | 1 … 1
0 … 1
120D =
1111000
2 | 7 8
2 | 3 9 … 0
2 | 1 9 … 1
2 | 9 … 1
2 | 4 … 1
2 | 2 … 0
2 | 1 … 0
0 … 1
78D =
1001110
2.2.2 计算机中数据信息的表示
—— 原码、反码和补码
第 13 页









十进制
+127

0
-1
+2
+1
-2

-126
-127
-128
+126
原码
0 1111111

0 0000000
1 0000001
0 0000010
0 0000001
1 0000010

1 1111110
1 1111111
0 1111110
反码
0 1111111

0 0000000
1 1111110
0 0000010
0 0000001
1 1111101

1 0000001
1 0000000
0 1111110
补码
0 1111111

0 0000000
1 1111111
0 0000010
0 0000001
1 1111110

1 0000010
1 0000001
1 0000000
0 1111110
8位 (字节数 )有符号数的原码、反码和补码
2.2.2 计算机中数据信息的表示
—— 原码、反码和补码
一般计算机使用补码表示有符号数。
第 14 页









2.2.2 计算机中数据信息的表示
—— 原码、反码和补码
0000
01001100
1000
0001
0010
0011
0101
0110
0111
1111
1110
1101
1011
1010
1001
0/0/0 1/1/1
4/4/4
5/5/5
6/6/6
7/7/7
-0/-7/-8-1/-6/-7
-2/-5/-6
-3/-4/-5
-4/-3/-4
-5/-2/-3
-6/-1/-2
-7/-0/-1
2/2/2
3/3/3
原码 / 反码 / 补码
第 15 页









2.2.2 计算机中数据信息的表示
—— 原码、反码和补码
三种机器数的比较
⑴ 对于正数它们相等, 而对于负数各有不同的表示 。
⑵ 补码和反码的符号位可作为数值位的一部分看待,
但原码的符号位不允许和数值位同等看待 。
⑶ 原码和反码各有两种零的表示法, 而补码具有唯一
的一种零的表示法 。
⑷ 原码, 反码表示的正, 负数范围相对零来说是对称
的, 但补码负数表示范围较正数表示范围宽 。
补码的运算
[X]补 +[Y]补 =[X+Y]补
[X]补 -[Y]补 =[X-Y]补 =[X]补 +[-Y]补
第 16 页









2.2.2 计算机中数据信息的表示
—— 原码、反码和补码
符号扩展:如将 8位转换为 16位
? 原码的符号扩展
正数,0010 1001→ 0000 0000 0010 1001
负数,1010 1001→ 1000 0000 0010 1001
? 反码的符号扩展
正数,0010 1001→ 0000 0000 0010 1001
负数,1010 1001→ 1111 1111 1010 1001
? 补码的符号扩展
正数,0010 1001→ 0000 0000 0010 1001
负数,1010 1001→ 1111 1111 1010 1001
80X86有符号扩展的专用指令。
第 17 页









2.2.2 计算机中数据信息的表示
—— 定点表示法
机器数的定点与浮点表示
(1) 定点表示法
所有数据的小数点位置固定不变。小数点,,”在机
器中的位置是隐含约定的,并不需要真正地占据一个二
进制位。一般有两种:
?纯整数 ( 小数点在最右边 )
?纯小数 ( 小数点在最左边 )
X1XS X2 XN-1 XN
符号位 N位数值位
纯小数小数点位置 纯整数小数点位置
第 18 页









2.2.2 计算机中数据信息的表示
—— 点浮表示法
(2) 浮点表示法
-5678.1234 = - 0.56781234 X 10+4
0.0056781234 = + 0.56781234 X 10-2
任何一个数十进制 N的浮点表示形式为:
N=M× 10E 记为 N=M E
任何一个二进制数 N的浮点表示形式为:
N=M× 2E
式中,E和 M都是带符号的定点数, E为阶码部分, M为尾
数部分 。 在大多数计算机中, 尾数为纯小数, 阶码为纯整数 。
第 19 页









阶码部分的符号位为 es,阶码的大小反映了在数 N中小数
点的实际位置;尾数部分的符号位为 ms,它是整个浮点数
的符号位, 表示了该浮点数的正负 。
如 E和 M为四位, 原码表示:
[-10.1]浮点 =0010 1101 [1.01]浮点 =0001 0101
浮点表示法与定点表示法比较, 在相同字长下前者所能
表示数的范围要大得多, 使用比较方便 。
尾数部分 M阶码部分 E
e s e m s m
k 位 n 位1 位1 位
尾数部分阶码部分
位 位位位
2.2.2 计算机中数据信息的表示
—— 点浮表示法
第 20 页









如,-123.456(D)
123(D) = 1111011(B)
.456(D) ≈,01110100101(B)
-123.456(D) ≈
-1111011.01110100101(B)
= -0.1111011011101001 X 2+7
如果阶码部分为 8为, 尾数部分为 16
位, 两部分均为原码时:
阶码,0000 0111
尾数,1111 1011 0111 0100
-123.456的计算机原码表示为:
0000 0111 1111 1011 0111 0100
0.456 X 2 = 0.912
.912 X 2 = 1.824
.824 X 2 = 1.648
.648 X 2 = 1.296
.296 X 2 = 0.592
.592 X 2 = 1.184
.184 X 2 = 0.368
.368 X 2 = 0.736
.736 X 2 = 1.472
.472 X 2 = 0.994
.994 X 2 = 1.888

2.2.2 计算机中数据信息的表示
—— 点浮表示法例
第 21 页









2.2.2 计算机中数据信息的表示
—— 十进制数的表示
4,十进制数的表示
BCD 码,二 进 制编 码的 十 进制 数 ( Binary-Code
Decimal), 一般用四位二进制代码来表示一位十
进制数, 使用最广泛的是 8421码, 通常称其为标
准 BCD码 ( NBCD码 ), 在 80X86微处理器中干脆
就称之为 BCD码 。
8421码的主要特点:
? 简单直观 。 从高到低各位的权分别为 8,4,2,1。
? 不允许出现 1010~ 1111。 这六个代码在 8421码中
是非法码 。
第 22 页









2.2.2 计算机中数据信息的表示
—— 非数值数据的表示
5,非数值数据的表示
通常是指字符, 字符串, 图形符号和汉字等各种数据,
它们通常不用来表示数值的大小, 因此又称为非数值数据,
一般情况下不对它们进行算术运算 。
⑴ 字符表示方法 ——ASCII码
常见的 ASCII码用七位二进制表示一个字符, 简称为
ASCII-7码 。 一个字节右边的七位表示不同的字符代码, 而
最左边一位可以作奇偶校验位, 或用于西文和汉字的区分 。
?控制码,00H~ 1FH
?数字,30H~ 39H
?大写字母,41H~ 5AH
?小写字母,61H~ 7AH
?其他代码为符号
第 23 页









2.2.2 计算机中数据信息的表示
—— ASCII码表
高三位
低四位
000 001 010 0 1 1 100 101 1 1 0 111
0000
SP 0 @ P ` p
0001
! 1 A Q a q
0010
,2 B R b r
0 0 1 1
# 3 C S c s
0100
$ 4 D T d t
0101
% 5 E U e u
0 1 1 0
& 6 F V f v
0 1 1 1
‘ 7 G W g w
1000
( 8 H X h x
1001
) 9 I Y i y
1010
*, J Z j z
1 0 1 1
+ ; K [ k {
1 1 0 0
,< L \ l |
1 1 0 1
- = M ] m }
1 1 1 0
,> N ^ n ~
1111
/? O _ o D E L
第 24 页









⑵ 汉字表示方法
? 汉字编码的概念
GB码为例
2.2.2 计算机中数据信息的表示
—— 汉字编码
国标码,行、列各 94(0-93),用先行后列的双 7位二进制数
表示,即两个字节的最高位为 0。
区位码,用二进制 国标码 表示不很方便,因此汉字也可用
十进制 区位码 表示。 区 (行 )、位 (列 )各 94(1-94),用先区后
位的双 2位十进制数表示,不足两位前面 补 0。
机内码,是计算机内部实际使用的表示汉字的代码,在微
机中多用两字节 (最高位为 1)代码作为机内码。
输入编码,主要有 形码 (五笔、郑码 ),音码 (拼音 )等。
汉字字模库, 有点阵和矢量编码两类。
第 25 页









2.2.2 计算机中数据信息的表示
—— 汉字编码
常用汉字编码
? GB2312-80
全称是 GB2312-80,信息交换用汉字编码字符集 基本集,,
1980年发布,是中文信息处理的国家标准,中文 Windows3.2
就是以 GB2312-80为基本汉字编码。
GB2312-80码共收录 6763个简体汉字,682个符号,其中
汉字部分:一级字 3755,以拼音排序,二级字 3008,以偏旁排
序。
? GBK
GBK编码是中国大陆制订的中文编码扩展国家标准。该编
码标准兼容 GB2312,Windows95/98简体中文版的字库表层编
码就采用的是 GBK。
GBK收录汉字 21003个 (包括日韩文中的汉字 )、符号 883个,
简、繁体字融于一库。双字节编码,在码位上和 GB2312兼容。
第 26 页









? GB12345-90
,信息交换用汉字编码字符集 第一辅助集,,目的在于
规范必须使用繁体字的各种场合,以及古籍整理等。
? BIG5
是目前台湾、香港地区普遍使用的一种繁体汉字的编码
标准,包括 440个符号,一级汉字 5401个、二级汉字 7652
个,共计 13060个汉字。
? Unicode
国际标准组织针对各国文字、符号进行统一性编码。目
前 Unicode是采用 16位编码体系,目前版本 V2.0于 1996公
布,内容包含符号 6811个,汉字 20902个,韩文拼音 11172
个,造字区 6400个,保留 20249个,共计 65534个。
2.2.2 计算机中数据信息的表示
—— 汉字编码
第 27 页









2.2.2 计算机中数据信息的表示
—— 计算机中的数据类型
微机系统中的数据类型举例
? 无符号二进制数
字节,8位二进制数 。
字, 16位, 内存中存放在 2个相邻字节 。
双字,32位, 内存中存放在 2个相邻字 (4个相邻字节 )。
? 带符号的二进制定点整数
字 节,补码表示的 8位带符号数 。
字 整 数,补码表示的 16位带符号数, 双字节 。
双字整数,补码表示的 32位带符号数, 四字节 。
四字整数,补码表示的 64位带符号数, 八字节 。
所有带符号的数都以补码形式表示, 符号位在首位 。 CPU
支持前 3种, FPU支持后 3种 。
第 28 页









? 浮点数
由 FPU支持, 数据格式基于 IEEE 754标准 ( 书 p22图 2.7
及表 2.4)。 支持浮点运算的浮点部件 ( FPU) 。 x86CPU对应
的浮点处理器 — x87,80486以后嵌入于 CPU内部 。
符合 IEEE 754标准的浮点数有 32位 (单精度 ),64位 (双
精度 )和 80位 (扩展精度 )三种 。
如 32位单精度浮点数
ms:符号位,一位。
E,阶码,8位。移码 (偏移量 127)表示的指数部分。
m,尾数,23位。原码表示的纯小数。
ms E m
符号 阶码 尾数
2.2.2 计算机中数据信息的表示
—— 计算机中的数据类型
第 29 页









? BCD数
BCD数分成压缩的 BCD数和非压缩的 BCD数 (UBCD数 )
两种 。 CPU支持两种 BCD数, 而 FPU只支持压缩的 BCD数 。
? 压缩的 BCD数是每个字节包含两位十进制数, 其低位在
0- 3位上, 高位在 4- 7位上;
? 而非压缩的 BCD数每个字节仅包含一位十进制数, 在 0-
3位上,高 4位无效 。
? 字符串 —— 连续存放的一组数据
一般为字节串或字串, 用于存放文字信息 。 CPU一般具
有处理串数据的专用指令, 如传送, 比较, 查找等 。
? 指针数据
存放地址或地址的一部分, 可以是 8位, 16位, 32位等,
包括近指针和远指针两种 。
2.2.2 计算机中数据信息的表示
—— 计算机中的数据类型
第 30 页









2.2.3 算术运算与逻辑运算的实现
—— 二进制加减运算
二进制加减运算
补码加减法运算是最简单的
加法,[X+Y]补 =[X]补 +[Y]补
减法,[X-Y]补 =[X+(-Y)]补 =[X]补 +[-Y]补
已知 [Y]补 求 [-Y]补 的方法:将 [Y]补 连同符号位一起求反,
末尾加, 1”。 [-Y]补 称为 [Y]补 的机器负数 。
补码加减运算规则如下:
① 参加运算的两个操作数均用补码表示;
② 按无符号二进制规则运算, 符号位作为数的一部分
参加运算;运算结果为补码 。
③ 若做加法, 则两数直接相加, 若做减法, 则将被减
数与减数的机器负数相加;
第 31 页









2.2.3 算术运算与逻辑运算的实现
—— 补码 加减运算例
例:无符号二进制数 X=00011101 Y=10110100
求 X+Y
X+Y = 00011101+10110100 = 11010001
29 180 209
0001 1101
+ 1011 0100
1101 0001
例:有符号二进制数 [X]补 =00011101 [Y]补 =10110100
求 [X+Y]补 和 [X-Y]补
[X+Y]补 = [X]补 +[Y]补
= 00011101 + 10110100 = 11010001
29 -76 -47
[X-Y]补 = [X]补 +[-Y]补
= 00011101 + 01001100 = 01101001
29 [-76]补 =76 105
0001 1101
+ 0100 1100
0110 1001
0001 1101
+ 1011 0100
1101 0001
第 32 页









2.2.3 算术运算与逻辑运算的实现
—— 加减运算溢出
溢出的产生和判断
所得结果超过机器额定位数, 这种情况被称为溢出 。
有符号数
?直观判断,两个符号相同的数相加, 和的符号相反;
两个符号不同的数相减, 差的符号和减数相同;
?双符号位判断法,将原符号位扩充为两位, 两个符号
位作为数的一部分参加运算 。 结果符号位为 00,11则
无溢出, 符号位为 01,10则结果溢出 。
?X86 CPU中根据标志位 OF来判断有符号数运算溢出 。
无符号数
如 8位无符号二进制数相加, 128+128=256,8位的结果
为 0,且产生进位 。 X86 CPU中可根据标志位 CF(进位 /借位
标志 )来判断 。
第 33 页









有符号数运算结果溢出和无符号数运算结果产生进位 /
借位没有必然联系。
例:二进制数 X=0101 1101 Y=1000 1100
X+Y X-Y Y-X
0101 1101
- 1000 1100
1→ 1101 0001
0101 1101
+ 1000 1100
1110 1001
1000 1100
- 0101 1101
0010 1111
01011101 10001100
93 140无符号数
93 -116有符号数
11101001
233
-23
11010001
209
-47
X Y X+Y X-Y
00101111
47
47
Y-X
2.2.3 算术运算与逻辑运算的实现
—— 溢出与进位 /借位例
第 34 页









3,其它算术运算简介
? 二进制乘除运算
二进制的乘除运算可以由专用的乘法器来实现, 也可以
用一个加法器经过多次迭代来实现 。
? 十进制数的算术运算
BCD运加减运算的方法:
① 使用二进制运算指令运算;
② 对所得到的结果进行十进制调整
在许多通用性较强的计算机中都可采用 BCD码进行算术
运算 。 十进制数相加时是, 逢十进一,, 而 BCD数运算却是
,逢十六进一,, 两者在进位时相差 6( 即 0110), 必须要
做相应的调整 。 如:用压缩 BCD码数进行加法运算时, 当和
数大于 9或向高位有进位时, 必须对该位加校正值 ( 0110)
调整 。
2.2.3 算术运算与逻辑运算的实现
—— 其它算术运算
第 35 页









例,A=0001 0111( 17BCD), B=0001 0011( 13BCD)
求 A+B( BCD) 。
0001 0111
+ 0001 0011
0010 1010 1010 ≥ 10( D), 需调整 。
+ 0000 0110
0011 0000 = 30(D)
例,A=0001 1000( 18BCD), B=0001 1001( 19BCD)
求 A+B( BCD) 。
0001 1000
+ 0001 1001
0011 0001 有进位, 需调整 。
+ 0000 0110
0011 0111 =37(D)
2.2.3 算术运算与逻辑运算的实现
—— BCD算术运算例
第 36 页









2.2.3 算术运算与逻辑运算的实现
—— 逻辑运算
4,逻辑运算
一般 CPU有与, 或, 非, 异或等逻辑指令 。 逻辑运算是
按位进行的, 位与位之间没有进位 /借位的关系 。
与 或 非 异或
0 ∧ 0 = 0 0 ∨ 0 = 0 0 ? 0 = 0
0 ∧ 1 = 0 0 ∨ 1 = 1
 
0 = 1
0 ? 1 = 1
1 ∧ 0 = 0 1 ∨ 0 = 1 1 ? 0 = 1
1 ∧ 1 = 1 1 ∨ 1 = 1
 
1 = 0
1 ? 1 = 0
0 与任何数结
果为 0
仅当 1 与 1 时
结果为 1
1 或任何数结
果为 1
仅当 0 或 0 时
结果为 0
求反:
0 变 1
1 变 0
又叫模 2 加
相同为 0
不同为 1
第 37 页









2.2.4 控制信号的产生
1,时序系统
与 CPU时序有关的基本概念
? 指令周期,一条指令从取出, 分析, 取数到执行完该
指令所需的全部时间 。 不同指令的指令周期可能不同 。
? 机器周期,每个机器周期完成一个任务 (指令中的一个
步骤 )。 若干个机器周期组成一个指令周期 。
? 时钟周期,时钟脉冲信号的间隔时间称为时钟周期,
CPU的任何操作都是在时钟脉冲的统一控制下一步一步
地进行的 。 机器周期由若干时钟周期组成 。
? 总线周期,在微型计算机中, CPU与外部系统 ( 内存或
外设 ) 的信息交换都是通过总线进行的, 将 CPU一次访
问 ( 即读或写 ) 内存或外设所花费的时间, 称为总线
周期 。
第 38 页









机器周期 机器周期
指令地址 操作数地址
CPU时钟
地址总线
数据总线 指令 操作数
…….
指令周期
一个最基本的机器周期由多个 (个数可能不同 )时钟周期组成 。
执行一条指令需要多个 (个数可能不同 )机器周期 。
2.2.4 控制信号的产生
第 39 页









2.2.4 控制信号的产生
—— 控制电路的硬件实现方法
2,控制器电路的硬件实现方法
控制器的核心是微操作信号发生器, 它的输入是译码后
的指令操作码, 输出是微操作控制命令 。 微操作信号发生器
的两种实现方法:
? 硬布线控制器
硬布线控制器, 采用组合逻辑技术实现, 特点:
?指令执行速度快
? 微操作信号发生器的结构不规整, 设计, 调试困难, 难以实现设计
自动化 。
?微程序控制器
把微操作控制命令代码化, 用微指令实现机器指令, 特点:
?设计规整, 调试以及更改, 扩充指令方便, 易于实现自动化设计 。
?增加了一级控制内存, 指令的执行速度比硬布线控制器慢 。
第 40 页









2.2.5 典型 CPU的总体结构
——8086的内部结构
由两
个独立的
部件:执
行部件
EU 和总
线接口部
件 BIU 构
成 。
暂存器
标志奇存器
EU
控制器
CS
DS
SS
ES
IP
内部
寄存器
1 2 3 4 5 6
总线
控制
逻辑
SP
BP
DI
SI
通用寄存器
地址总线(2 0 位)
数据总线
(1 6 位)
系统总线
指令缓冲器
(8 位)
执行单元(E U ) 总线接口单元(B I U )
A L U 数据总线
(1 6 位)
AX
BX
CX
DX
A L U
A H A L
B H B L
D H D L
C H C L
1,8086的内部结构
运算器
数据寄存器组
控制器
指令队列
地址加法器
段寄存器
第 41 页









⑴ 执行部件 EU —— 负责执行指令
?完成取指令 (内部 ),译码, 产生指令所需的各种控制信
号 。
?ALU进行算术, 逻辑运算 。
?通用寄存器组暂存操作数据或中间结果 。
⑵ 总线接口部件 BIU —— 负责与外部的信息交换 。
?从内存取指令 (外部 )送到指令队列, 完成指令缓冲 。
?根据 EU送来的 16位偏移地址, 通过地址产生器生成 20位
的物理地址 。
?配合 EU的请求, 完成与 CPU外部的数据交换 。
EU和 BIU是两个独立的工作部件, 在大多数情况下,
它们能并行重叠操作, 在 EU执行指令的同时, BIU也在
进行取指令, 读操作数或存入结果数据的操作 。
2.2.5 典型 CPU的总体结构
——8086的内部结构
第 42 页









2.2.5 典型 CPU的总体结构
—— 8086的寄存器结构
8个 16位通用寄存器:
?4个 16位数据寄存器 (可分
为 2个 8位 )
?2个 16位变址寄存器
?2个 16位指针寄存器。
指令指针寄存器 IP
存放当前要执行的指令的
偏移量地址。
4个段寄存器
CS,SS,DS,ES分别
存放代码段、堆栈段、数据
段和附加数据段的段地址。
标志寄存器
AH AL
BH BL
CH CL
DH DL
FLAGS
SP
BP
SI
DI
IP
CS
DS
SS
ES
AX(累加器 )
BX(基址寄存器 )
DX(数据寄存器 )
CX(记数器 )
(源地址寄存器 )
(目的地址寄存器 )
(堆栈指针寄存器 )
(基址指针寄存器 )
指令指针寄存器
标志寄存器
代码段寄存器
数据段寄存器
附加段寄存器
堆栈段寄存器
数据
寄存器
变址
寄存器
指针
寄存器
段寄
存器





2,8086的寄存器结构
第 43 页









15 14 13 12 11
OF
10
DF
9
IF
8
TF
7
SF
6
ZF
5 4
AF
3 2
PF
1 0
CF
OF 溢出 1 = 溢出 标志有符号数运算结果溢出
DF 方向 1 = 减,0 = 增 用于字符串指令
IF 中断 1 = 允许 用于外部中断开关
TF 单步 1 = 单步状态 用于单步调试程序
SF 符号 1 = 负,0 = 正 标志运算结果的符号
ZF 零 1 = 零,0 = 非零 标志运算结果是否为 0
AF 辅助进位 1 = 有进位 /借位 半字节间的进位 /借位
PF 奇偶 1 = 偶,0 = 奇 运算结果中 1的个数
CF 进位 1 = 有进位 /借位 运算是否产生进位 /借位
2.2.5 典型 CPU的总体结构
—— 标志寄存器
标志寄存器用于存放运算结果的属性,和控制标志。
第 44 页









2.2.5 典型 CPU的总体结构
3,内存物理地址的产生
采用了内存的分段管理
方式, 分为代码段, 数据
段, 堆栈段和附加段 。
B15 ----16位段地址 ---- B0
B15 ---- 16位偏移量 ---- B0
0 0 0 0
+
B19 -------- 20位物理地址 -------- B0
4.Intel 32位 x86微处理器的寄存器
? Intel从 80386开始 32位微处理器 。
? 内部寄存器组升级为 32位
通用寄存器, 段寄存器, 指令指针寄存器, 状态标志
寄存器, 系统地址寄存器, 控制寄存器, 调试寄存器和
测试寄存器 。
内存物理地址 =16 ?段地址 (16位 )+偏移量 (16位 )
第 45 页









2.2.5 典型 CPU的总体结构
—— 32位 80x86 CPU的寄存器组
AX
BX
CX
DX
SP
BP
DI
SI
IP
FLAGS
CS
DS
ES
SS
FS
GS
EAX→
EBX→
ECX→
EDX→
ESP→
EBP→
EDI→
ESI→
EIP→
EFLAGS→
16位
32位
◇ 32位 80x86寄存器组
是在 16位 80x86寄存器
组基础上扩充的。 将
全部通用寄存器、指令
指针寄存器和标志寄存
器扩展为 32位,原寄存
器名称前加字母 E。
◇ 增加 2个段寄存器 FS
和 GS。
◇ 增加标志位。
◇ 保留全部原寄存器
名称。
第 46 页









2.3 内存的组成与读写原理
2.3.1 内存组成
1,三级存储系统
计算机系统中, 规模较大的存
储器往往分成若干级, 称存储系统 。
? Cache:高速缓冲存储器
? Cache是比内存容量小得多的、但速度
比内存快得多的高速存储器。
? Cache的作用是为了提高 CPU对内存的
访问速度。对用户透明。
? CPU内部的 Cache称为一级 Cache( L1
Cache) CPU外部的 Cache称为二级
Cache( L2 Cache)
?内部存储器
? 主存储器 。
?外部存储器 ( 辅助存储器 )
? 硬盘, 软盘, 光盘, U盘, 磁带等 。
CPU寄存器
Cache
内部存储器
外部存储器
第 47 页









2.3.1 内存组成
—— 内部存储器的的基本结构
地址寄存器 AR
地址译码器
存储体
MD













?
DB
AB
CB
DR
k 位
2
k
个存储单元
n 位
地址寄存器
地址译码器
存储体













?

个存储单元

2.内存储器的的基本结构
由 2k个存
储单元组成
,单元的编
号是地址。
每个单元可
以是 1/4/8位

接收并暂
存来自地址
总线 (AB)的
地址信号。 将 k位地址变换成 2k
个输出控制
信号,每个
控制信号对
应一个存储
单元。
写存储器
时暂存来自
数据总线的
(DB)数据。
读存储器
时暂存来自
存储体的数
据。
第 48 页









2.3.1 内存组成
—— 内存的存储单元
3.内存的存储单元
? 存储单元是 CPU对主存储
器的最小访问单位, 一般
为字节 (8位 )。
E W R
选 写 读

0/1 D0数据
0/1 D1数据
0/1 D2数据
0/1 D3数据
0/1 D4数据
0/1 D5数据
0/1 D6数据
0/1 D7数据
0/1 D数据
E W R
选 写 读

E W R
0 X X 无操作
1 0 0 无操作
1 0 1 读
1 1 0 写
1 1 1 非法
断开
断开
输入
输出
数据线操作
第 49 页









2.3.2 内存的读写
—— 内存和 CPU之间的连接
2,CPU对内存的基本操作
读操作,地址 → AB→AR
Read
等待 MFC
(数据 )→DR→DB
写操作,地址 → AB→AR
数据 → DB→DR
Write
等待 MFC
?同步内存存取和异步内存存取
?异步内存存取,CPU和内存间没有统一的时钟, 由 MFC
通知 CPU内存工作已完成 。
?同步内存存取,CPU和内存采用统一时钟, 同步工作,
不需要 MFC。
容量
2 k ? n
地址总线
数据总线
R e a d
W r i t e
M F C
k 位
n 位
C P U DR
AR
内存
容量
地址总线
数据总线


DR
AR
内存
MFC = Memory
Function Complete
存储器功能完成。
第 50 页









2.3.3 典型微机的内存接口
1,内存编址,最常用的编址方式是字节编址 。
? 一个 字 (双字 /四倍字 )的地址是最低地址字节的地址 。
? 一个 字 (双字 /四倍字 )存放在从偶数 (4的整数倍 /8的整数
倍 )开始的存储器单元中, 称为 规则存放 ;反之称为 非规
则存放 。
? 读写规则字 (双字 /四倍字 )只需一个总线周期, 而读写非
规则字 (双字 /四倍字 )则需要两个存储周期 。
2,内存接口
? 数据总线宽度,一次最多能并行传送的二进制位数, 称
为数据通路宽度 。
? 存储器数据线数目,一般情况下和数据总线宽度相等 。
? CPU的位宽,和总线宽度不一定相等 。
第 51 页









字节

双字
4字
N+7 N+6 N+5 N+4 N+3 N+2 N+1 N ← 地址
字节
低字节高字节
低字高字
低双字高双字
地址给出的是数据占用的最小地址单元
字节 (8位 ),(10000H) = 12H,(10001H) = 34H
字 (16位 ), (10002H) = 2345H
双字 (32位 ), (10004H) = 55667788H
四倍字 (64位 ), (10008H) = 0123456789012345H
12
34
45
23
88
77
66
55
45
23
01
89
67
45
23
01
←10000H
←10002H
←10008H
←10004H
2.3.3 典型微机的内存接口
数据在存储器中的存放图例
第 52 页









2.3.4 内存堆栈与堆栈操作
1,堆栈
? 堆栈是 一种 按, 后进先
出, (LIFO)进行存储器访
问的存储器访问方式 。
? 一般在内存中划出一段区
域用作堆栈, 这一区域被
称作堆栈区间 。
? 堆栈的大小可变, 栈底固
定, 栈顶浮动, 用一个专
门的寄存器作为堆栈栈顶
指针 。
在 80X86中, 堆栈的栈
底地址大于栈顶地址 。
?堆栈操作作用
? 中断时的断点
? 返回地址
? 参数的传递
栈顶 →
高地址端栈底 →
←SP
堆栈指针堆栈

第 53 页









2.3.4 内存堆栈与堆栈操作
2,堆栈操作:
?进栈操作
(SP)-2 → SP 修改栈指针
(A)→(SP) 将 A中的内容传送到栈顶单元 (压入 )
?出栈操作
((SP))→A 将栈顶单元内容传送到 A中 (弹出 )
(SP)+2 → SP 修改栈指针
2是堆栈操作的字节数, 在 8086CPU中堆栈以字为操作单
位 。
堆栈操作既不是在堆栈中移动它所存储的内容, 也不是
把已存储在栈中的内容从栈中抹掉, 而是通过调整堆栈指针
而给出新的栈顶位置, 以便对位于栈顶位置的数据进行操作 。
第 54 页









8086CPU使用 SP寄存器作为堆栈指针, PUSH为压入堆
栈命令, POP为弹出命令, AX,BX为 CPU的数据寄存器 。
SP=2000→ 56 78
12 34
BX
AX
1FFF
1FFE
堆栈段
PUSH之前
34
12
2000 56 78
12 34
BX
AX
1FFF
SP=1FFE →
堆栈段
PUSH之后
34
12
56 78
12 34
BX
AX
堆栈段
POP之前
34
12
12 34
12 34
BX
AX
堆栈段
PUSH之后
2000
1FFF
SP=1FFE →
SP=2000→
1FFF
1FFE
POP BX
PUSH AX
2.3.4 内存堆栈与堆栈操作
—— 8086CPU堆栈操作例
第 55 页









2.4 指令系统
2.4.1 指令系统简介
? CPU指令 (机器指令 ),是 CPU功能的体现, 是用二进制代
码表示的指令, 是唯一可以被 CPU直接识别和执行的程序 。
? 指令系统,是 CPU全部指令的集合, 不同的 CPU有不同
的指令系统 。
? 汇编指令,是机器指令一种利于记忆的符号 (助记符 ),用
助记符指令编写的程序就是 汇编程序 。
同系列的 CPU必须保持 指令系统的兼容性 。 新一代 CPU
的指令系统必须包含老一代 CPU的全部指令 。
1,指令的组成
指令由 操作码字段 (OP,指明操作功能 )和 地址码字段 (A,
或称 操作数字段, 指明操作数 )两部分构成 。
OP A
操作码字段 操作数字段 (地址码字段 )
第 56 页









2.4.1 指令系统简介
2,指令的操作码
? 指令的操作码字段表明了所执行的操作 。 指令系统中的
每一条指令都有一个唯一确定的操作码 。
3,地址码结构
? 运算的操作数和运算结果存放的地址 。
? 根据指令功能的不同, 地址码字段可以含有单地址, 双
地址或三地址结构, 少量指令无地址码字段 。
4,指令格式
如,Intel 8086 CPU加法指令 ADD CL,BH,将寄存器 CL和 BH
相加,和送到 CL寄存器。该指令由两个字节构成,02CFH。
02CFH=00000010 11001111:其中
000000=ADD 1=目标为寄存器 0=字节运算
11=寄存器方式 001=CL 111=BH。
第 57 页









7 6 5 4 3 2 1 0
OP D W
7 6 5 4 3 2 1 0
MOD REG R/M
7 6 5 4 3 2 1 0
LOW DISP
或 LOW DATA
7 6 5 4 3 2 1 0
HIGH DISP
或 HIGH DATA
7 6 5 4 3 2 1 0
LOW DATA
7 6 5 4 3 2 1 0
HIGH DATA
B1
B2
B3
B4
B5
B6
OP:指令的功能。
D:数据流方向,0=寄存器为源,1=寄
存器为目标。
W,0=字节,1=字。
MOD:寻址方式,00=无偏移量 /01=8位
偏移量 /10=16位偏移量 /11=寄存器。
REG:寄存器编码。 000~111=
AL/AX,CL/CX,DL/DX,BL/BX,AH/SP,
CH/BP,DH/SI,BH/DI
R/M:寄存器 /存储器选择。
DISP:存储器地址偏移量。
DATA:立即数。
2.4.1 指令系统简介
—— 8086指令格式
第 58 页









2.4.1 指令系统简介
5,指令类型
CPU的指令按功能可以分成:
?传送类指令
寄存器, 存储器之间的数据传送 。
?运算类指令
+, -, ×, ÷, 逻辑, 位移等 。
?程控类指令
转移, 循环, 子程序等
?I/O类指令
和外部设备的数据交换 。
?处理器控制指令
第 59 页









2.4.2 指令的寻址方式
寻址方式 —— 获得操作数的方式
每种 CPU的指令系统都有自己的一套寻址方式
?与数据有关的寻址方式:寻找操作数的地址
?与转移地址有关的寻址方式:寻找指令的转移地址
80X86系列微处理器与数据有关的寻址方式:
?立即数寻址 —— 数据在指令中
?寄存器寻址 —— 数据在 CPU寄存器中
?存储器寻址 —— 数据在存储器中
? 直接寻址
? 寄存器间接寻址 例如
? 基址变址寻址 MOV AX,123
? 寄存器相对寻址 ADD BL,[1000]
? 相对基址变址寻址 MOV CX,[SI]
? 比例变址寻址 。
第 60 页









存储器的分段
8086 CPU物理地址的形成是由两部分组成,即 16位 段地
址 和 16位 偏移量 (或称 有效地址 EA),按下公式计算 物理地
址,
物理地址 = 段地址 X16D+偏移量 = 段地址 X10H+偏移量
如,段地址 = 2354H = 0010 0011 0101 0100 B
偏移量 = 78DAH = 0111 1000 1101 1010 B
物理地址 = 2354H X 10H + 78DAH = 2AE1AH
0010 0011 0101 0100 0000 2 3 5 4 0
+ 0111 1000 1101 1010 + 7 8 D A
0010 1010 1110 0001 1010 2 A E 1 A
2.4.2 指令的寻址方式
—— 段地址、偏移地址、物理地址
第 61 页









代码段,用于存放程序的指令代码。用 CS寄存器存放段地
址,IP寄存器存放偏移量。当前指令地址 CS:IP。
数据段,用于存放程序的数据。一般用 DS或 ES寄存器存放
段地址,可用多种方式形成偏移量。
堆栈段,用于程序的堆栈操作空间。用 SS寄存器存放段地
址,SP寄存器存放偏移量。当前堆栈地址 SS:SP。
存储器
访问方式
默认段
寄存器
其他段
寄存器
偏移
地址
取指令 CS 无 IP
堆栈操作 SS 无 SP
一般数据访问 DS C S,S S,E S 多种方式
源操作数 DS C S,S S,E S SI


作 目的操作数 ES 无 DI
2.4.2 指令的寻址方式
—— 代码段、数据段、堆栈段
第 62 页









1.立即数寻址
操作数在指令中 —— 立即数。
如加法指令中 12D就是立即数。
ADD AX,12D (将寄存器 AX加 12)
?立即数用后缀字母说明数制,二进制后缀 B,十进制后缀 D,
十六进制后缀 H。无后缀时默认为十进制。
?数字开头,立即数可能是 8位,16位,32位立即数。
2,寄存器寻址
操作数在 通用寄存器 中 —— 寄存器数。
8位寄存器, AH,AL,BH,BL,CH,CL,DH,DL。
16位寄存器, AX,BX,CX,DX,SI,DI,BP,SP。
32位寄存器, EAX,EBX,ECX,EDX,ESI,EDI,EBP、
ESP。
2.4.2 指令的寻址方式
第 63 页









3,存储器寻址
存储器寻址 —— 存储器的定位方式
Intel 8086,80286 CPU有 5种存储器寻址方式,Intel 32位
CPU增加第 6种寻址方式。
+偏移地址
DS


器 操作数
2.4.2 指令的寻址方式
? 直接寻址,直接给出有效地址 (偏移量 )
格式为,[偏移地址 ]
第 64 页









如指令:
MOV AX,[2345H]
操作数 [2345H]为立即寻址,
指令功能:
(DS:2345H) → (AX)
或 (DS:2345H) → (AL)
(DS:2346H) → (AH)
如 (DS) = 1200H
(14345H) → (AL)
(14346H) → (AH)
← 段地址 DS
← 偏移地址 2345H
代码段
数据段
AX寄存器 ←
← 段地址 CS
第 65 页









?其他的存储器寻址 —— 存储器寻址通式
8086,80286使用 16位寻址方式,从 80386开始扩充 32位
寻址方式。
① 16位寻址方式通式:
[基址寄存器 +变址寄存器 +常量 ]
基址寄存器 —— BX,BP
变址寄存器 —— SI,DI
常量 —— 8位 /16位常数
16位寻址方式名称
? [常量 ] —— 直接寻址
? [基址 /变址寄存器 ]—— 寄存器间接寻址
? [基址 /变址寄存器 + 常量 ] —— 寄存器相对寻址
? [基址寄存器 + 变址寄存器 ]—— 基址变址寻址
? [基址寄存器 + 变址寄存器 + 常量 ] —— 相对基址变址寻址
2.4.2 指令的寻址方式
第 66 页









AX
CL
IP
1231
123B
[0]
[F123H]
[BX+SI]
[SI+10110001]
[BX+CX]
[BX+BP]
2.4.2 指令的寻址方式
—— 寻址方式练习


× 寄存器寻址必须使用通用寄存器

× 十六进制缺 H后缀 / 非法的二进制

× 数字必须数字开头 [0F123H]

× 二进制缺 B后缀 / 十进制数过大
× 不能使用 CX作为地址的一部分
× 不能同时使用两个基址寄存器
以下操作数是否正确,如果正确属于什么寻址方式?
第 67 页









② 32位寻址方式通式:
[基址寄存器 +变址寄存器 X比例因子 +常量 ]
基址寄存器 —— 任一 32位通用寄存器
变址寄存器 —— ESP之外的 32位通用寄存器
比例因子 —— 1 / 2 / 4 / 8
常量 —— 8位 /32位常数
32位寻址方式及其名称:
? 比例 =1,[基址寄存器 +变址寄存器 +常量 ] 功能和名称同 16位寻址
? [变址寄存器 X比例 ]—— 比例变址寻址
? [基址寄存器 +变址寄存器 X比例 ]—— 基址比例变址寻址
? [基址寄存器 +变址寄存器 X比例 +常量 ]—— 相对基址比例变址寻址
2.4.2 指令的寻址方式
第 68 页









2.4.2 指令的寻址方式
—— 操作数的类型和关系
操作数
立即数 寄存器数 存储器数
相对基址变址寻址
[基址寄存器 +变址寄存器 +常量 ]
相对基址比例变址寻址
[基址寄存器 +变址寄存器 X比例 +常量 ]
基址变址寻址
[基址寄存器 +变址寄存器 ]
寄存器相对寻址
[基址 /变址寄存器 +常量 ]
寄存器间接寻址
[基址 /变址寄存器 ]
直接寻址
[常量 ]
基址比例变址寻址
[基址寄存器 +变址
寄存器 X比例 ]
比例变址寻址
[变址寄存器 X比例 ]
第 69 页









汇编语句包括 2类:
?指令语句,每一条指令语句对应一条 CPU机器指令,产生
相应的 CPU动作。
?伪指令语句,不对应 CPU机器指令,用于设定段结构、数
据结构等。
关于指令:
? 有操作码和操作数 2部分;
? 不同的指令的编码长度 (字节数 )不同;
? 不同的指令的执行时间不同;
? 大多数指令的数据宽度取决于操作数。
2.4.3 x86指令系统举例
第 70 页









1,数据传送指令
◇ MOV ─ 传送指令
指令格式,MOV dest,src
功能,dest ← src
例如
MOV AX,1
MOV CL,[1200]
MOV [1000H],23
寄存器
reg
存储器
mem
段寄存器
sreg
立即数
data
合法的传送方向
2.4.3 x86指令系统举例
—— MOV
Reg:寄存器 sreg:段寄存器
mem:存储器 imm:立即数
第 71 页









◇ 加减运算
ADD dest,src (dest)← (dest)+(src) 二进制加
ADC dest,src (dest)← (dest)+(src)+(CF)二进制带进位加
SUB dest,src (dest)← (dest)-(src) 二进制减
SBB dest,src (dest)← (dest)-(src)-(CF) 二进制带借位减
2.4.3 x86指令系统举例
—— 加减指令
如,(dest)=10001001B,(src)=11100000B,作加、减运算
dest src 和 (ADD) 差 (SUB)
10001001 11100000 01101001 10101001
无符号 89H(137) E0H(224) 69H(105) A9H(169)
有符号 -77H(-119) -20H(-32) 69H(105) -57H(-87)
相加后的标志,OF=1,SF=0,ZF=0,AF=0,PF=1,CF=1
相减后的标志,OF=0,SF=1,ZF=0,AF=0,PF=1,CF=1
第 72 页









◇ MUL - 无符号乘
MUL r8/m8 (AL)× (r8/m8)→(AX) 无符号字节乘
MUL r16/m16 (AX)× (r16/m16)→(DX.AX) 无符号字乘
◇ DIV - 无符号除
DIV r8/m8 (AX)÷ (r8/m8)商 → (AL),余数 → (AH)无符号字节除
DIV r16/m16 (DX.AX)÷ (r16/m16)商 → (AX),余数 → (DX)无符号字除
例如:计算 1210× 56,5432÷ 123
MOV AX,1210 ; 1210=04BAH
MOV BX,56 ; 56=38H
MUL BX ; 积 =67760->(DX.AX) DX=1,AX=08B0
MOV AX,5432 ; 5432=1538H
MOV BL,123 ; 123=7BH
DIV BL ; 商 =44->AL,余数 =20->AH
可以通过 debug验证
2.4.3 x86指令系统举例
—— 乘除指令
第 73 页









◇ 逻辑指令
NOT reg/mem (reg/mem) ← ~(reg/mem) 逻辑非
AND dest,src (dest) ← (dest) ∧ (src) 逻辑与
OR dest,src (dest) ← (dest) ∨ (src) 逻辑或
XOR dest,src (dest) ← (dest) (src) 逻辑异或+
2.4.3 x86指令系统举例
—— 逻辑指令和位移指令
◇ 逻辑位移
SHL reg/mem,1/CL
SHR reg/mem,1/CL
例如:将 AX右移 4位
MOV AX,1768H
MOV CL,4
SHR AX,CL ; AX=0176H,CF=1
→→→→→→→→0 → → CF
←←←←←←←←← ←CF 0
0001 0111 0110 1000
第 74 页









◇ JMP dest 无条件转移指令 (dest)→(CS:IP)
无条件转移到目标地址 dest
2.4.3 x86指令系统举例
—— 转移指令
◇ Jxx dest 条件转移指令,判断独立标志
标志 ZF CF PF OF SF
标志值 1 0 1 0 1 0 1 0 1 0
指令 JZ,JNZ JC,JNC JP,JNP JO,JNO JS,JNS
例如:比较 AX和 BX,如果 AX>BX则 AX←BX
MOV AX,1230
MOV BX,567
MOV CX,AX
SUB CX,BX
JC p01
MOV AX,BX
p01,……
第 75 页









2.4.4 指令系统的发展
—— CISC和 RISC
1,指令系统的发展方向
CISC → RISC
? 增强指令功能, 增加新指令, 增加高级指令 → 指令系
统日益庞大和复杂 → CSIC(Complex Instruction Set
Computer)
? 指令系统多达几百条指令, 具有多种寻址方式;
? 计算机研制周期长, 增加了设计失误的可能性;
? 由于复杂指令操作, 还可能降低系统的执行速度;
?, 20% -80% 律,
? RISC(Reduced Instruction Set Computer)—— 减少指
令种类, 简化指令功能 → 降低硬件复杂度, 提高指令
的执行速度 。
第 76 页









RISC设计应遵循的原则:
① 只选择使用频度高的指令, 指令数目一般不超过
100条 。
② 寻址方式种类少, 一般不超过 2种, 指令格式力求
一致 。
③ 所有或绝大多数指令在单个机器周期内完成 。
④ 扩大通用寄存器的数目, 一般不少于 32个 。
⑤ 减少访问内存, 尽量只对寄存器操作 。
⑥ 为提高指令执行速度, 大多数指令用硬连线控制实
现, 少数指令才用微程序实现 。
⑦ 优化编译, 简单有效地支持高级语言的实现 。
2.4.4 指令系统的发展
—— CISC和 RISC
第 77 页









2.5 计算机的工作过程
2.5.1 指令的执行过程
1,指令执行的基本过程
指令的执行 —— 取指令, 分析和取数, 执行
⑴ 取指令 —— 将现行指令从内存取出并送 CPU指令队列
⑵ 分析及取数 —— 控制器对指令译码, 需要时取操作数
⑶ 执行 —— 根据指令的功能, 控制各个部件执行 。
0B18
0100
地址
加法


线
CS
IP
存储器控制

运算

指令队列
8086 CPU
第 78 页









顺序 —— 指令预取 —— 流水线 —— 超标量 —— 超线程
? 顺序控制,一条指令执行完后, 方可取出下一条指令来
执行 。
? 指令预取,CPU各功能部件以各自可能的速度并行地工
作 。 在总线空闲期间完成取指令 。 如 8086中有 6个字节的
指令队列 。
? 流水线 (Pipelining),高效率的重叠控制方式 。 理想状态
下每个机器周期执行一条指令 。
取指令 译码 执行 取指令 译码 执行 取指令 译码 执行
取指令 译码 执行
取指令 译码 执行
取指令 译码 执行
取指令 译码 执行
取指令 译码 执行
取指令 译码 执行
2.5.3 加速程序执行的方法
第 79 页









? 超标量 (Superscalar),CPU集成了多个 ALU,多个 FPU、
多个译码器同时存在多条流水线 。 理想状态下每个机器
周期执行 2条指令 。
浮点部件
整数部件 1
整数部件 2
地址部件 1
地址部件 2
? 超线程 (Hyper Threading):
在一个 CPU中构造 2个逻辑 CPU。
2.5.3 加速程序执行的方法
第 80 页









1,AL和 BL寄存器的值分别 10111000B和 11110011B,
执行指令 ADD AL,BL后 AL=( )B,CF=( )、
OF=( )。 分析 AL,BL的值分别作为无符号数和有符号数时
结果是否正确 。
ADD AL,BL 的功能,(AL)+(BL) → (AL)
2,判断以下操作数是否正确, 如果正确属于什么类型
的操作数 。
CL [1201]
[BX] 1200
[BX+CX] [ABCDH]
[BX+SI] SI
课堂测验