本课程面向理工类学生,是计算机及相关专业的一门专业基础课程。以最具有代表性的32位80X86微处理器为核心的微型计算机作为原型,系统讲述微型计算机的系统构成、工作原理和接口技术。
本篇部分内容取自中国大学MOOC南京邮电大学微型计算机原理与接口技术_中国大学MOOC(慕课)
要学好这门课程,在学习中要做到:
1.理解相关概念和原理,切勿死记硬背。
2.汇编程序设计要多动脑多动手上机编程。
3.接口技术中的硬件结构和软件编程结合起来学习。

第一章 微型计算机基础
1.1计算机中的信息表示

1.计算机中的数制
1)常用计数制
十进制数:编程时使用(D)
二进制数:计算机内部信息存储、运算和输入/输出都是二进制数(B)
|---|------|------|------|------|------|---|-------|-------|
| | 1 | 0 | 1 | 0 | 1 | . | 1 | 1 |
| 权 | 2^4 | 2^3 | 2^2 | 2^1 | 2^0 | . | 2^-1 | 2^-2 |
特点:每位代码非0即1,高位权是低位权的2倍
加减运算法则:逢二进一,借一当二
十六进制数:
最常用的是十进制,但在计算机中为了物理实现的方便,采用的是二进制,人们为了书写阅读方便,又常常采用十六进制(H)来表示二进制数(B)
十六进制数:每4位二进制数用1位十六进制数来表示
|--------|----------|--------|----------|
| 四位二进制数 | 等值的十六进制数 | 四位二进制数 | 等值的十六进制数 |
| 0000 | 0 | 1000 | 8 |
| 0001 | 1 | 1001 | 9 |
| 0010 | 2 | 1010 | A |
| 0011 | 3 | 1011 | B |
| 0100 | 4 | 1100 | C |
| 0101 | 5 | 1101 | D |
| 0110 | 6 | 1110 | E |
| 0111 | 7 | 1111 | F |
|-------|-------|-------|-------|-------|
| 十六进制数 | 2 | 9 | A | F |
| 权 | 16^3 | 16^2 | 16^1 | 16^0 |
特点:每位代码0~9,A~F,基数为16,高位权是低位权的16倍
加减运算法则:逢十六进一,借一当十六
2)数制转换
二、八、十六进制数→十进制数
算法:每位的代码和该位的权值相乘,再求累加和
例
=
解:
=8+4 +0+ 1十0.5 +0.25
=
二进制数→十六进制数
算法:四位二进制数为一组,每组用等值的十六进制代换
例
十六进制数→二进制数
算法:一位十六进制数用等值的四位二进制数代换
例
十进制数→二进制数
算法:除2取整,直到商为零为止,倒排

所以:
十进制数纯小数→二进制数
算法:乘2取整,直到乘积的小数部分为0时止,顺排

十进制带小数→二进制数
算法:整数、纯小数分别计算,再合并
2.计算机中的信息表示
1)字符的编码------ASCII码
计算机常用的输入/输出设备(键盘、显示器、打印机)处理的数都是字符。
计算机中一般采用美国标准信息交换码(ASCII)对字符进行编码,使用七位二进制编码来表示一个字符,该编码方案中共有128个字符(27=128)。
内容如下:
二进制 | 八进制 | 十进制 | 十六进制 | 字符/缩写 | 解释 |
---|---|---|---|---|---|
00000000 | 000 | 0 | 00 | NUL (NULL) | 空字符 |
00000001 | 001 | 1 | 01 | SOH (Start Of Headling) | 标题开始 |
00000010 | 002 | 2 | 02 | STX (Start Of Text) | 正文开始 |
00000011 | 003 | 3 | 03 | ETX (End Of Text) | 正文结束 |
00000100 | 004 | 4 | 04 | EOT (End Of Transmission) | 传输结束 |
00000101 | 005 | 5 | 05 | ENQ (Enquiry) | 请求 |
00000110 | 006 | 6 | 06 | ACK (Acknowledge) | 回应/响应/收到通知 |
00000111 | 007 | 7 | 07 | BEL (Bell) | 响铃 |
00001000 | 010 | 8 | 08 | BS (Backspace) | 退格 |
00001001 | 011 | 9 | 09 | HT (Horizontal Tab) | 水平制表符 |
00001010 | 012 | 10 | 0A | LF/NL(Line Feed/New Line) | 换行键 |
00001011 | 013 | 11 | 0B | VT (Vertical Tab) | 垂直制表符 |
00001100 | 014 | 12 | 0C | FF/NP (Form Feed/New Page) | 换页键 |
00001101 | 015 | 13 | 0D | CR (Carriage Return) | 回车键 |
00001110 | 016 | 14 | 0E | SO (Shift Out) | 不用切换 |
00001111 | 017 | 15 | 0F | SI (Shift In) | 启用切换 |
00010000 | 020 | 16 | 10 | DLE (Data Link Escape) | 数据链路转义 |
00010001 | 021 | 17 | 11 | DC1/XON (Device Control 1/Transmission On) | 设备控制1/传输开始 |
00010010 | 022 | 18 | 12 | DC2 (Device Control 2) | 设备控制2 |
00010011 | 023 | 19 | 13 | DC3/XOFF (Device Control 3/Transmission Off) | 设备控制3/传输中断 |
00010100 | 024 | 20 | 14 | DC4 (Device Control 4) | 设备控制4 |
00010101 | 025 | 21 | 15 | NAK (Negative Acknowledge) | 无响应/非正常响应/拒绝接收 |
00010110 | 026 | 22 | 16 | SYN (Synchronous Idle) | 同步空闲 |
00010111 | 027 | 23 | 17 | ETB (End of Transmission Block) | 传输块结束/块传输终止 |
00011000 | 030 | 24 | 18 | CAN (Cancel) | 取消 |
00011001 | 031 | 25 | 19 | EM (End of Medium) | 已到介质末端/介质存储已满/介质中断 |
00011010 | 032 | 26 | 1A | SUB (Substitute) | 替补/替换 |
00011011 | 033 | 27 | 1B | ESC (Escape) | 逃离/取消 |
00011100 | 034 | 28 | 1C | FS (File Separator) | 文件分割符 |
00011101 | 035 | 29 | 1D | GS (Group Separator) | 组分隔符/分组符 |
00011110 | 036 | 30 | 1E | RS (Record Separator) | 记录分离符 |
00011111 | 037 | 31 | 1F | US (Unit Separator) | 单元分隔符 |
00100000 | 040 | 32 | 20 | (Space) | 空格 |
00100001 | 041 | 33 | 21 | ! | |
00100010 | 042 | 34 | 22 | " | |
00100011 | 043 | 35 | 23 | # | |
00100100 | 044 | 36 | 24 | $ | |
00100101 | 045 | 37 | 25 | % | |
00100110 | 046 | 38 | 26 | & | |
00100111 | 047 | 39 | 27 | ' | |
00101000 | 050 | 40 | 28 | ( | |
00101001 | 051 | 41 | 29 | ) | |
00101010 | 052 | 42 | 2A | * | |
00101011 | 053 | 43 | 2B | + | |
00101100 | 054 | 44 | 2C | , | |
00101101 | 055 | 45 | 2D | - | |
00101110 | 056 | 46 | 2E | . | |
00101111 | 057 | 47 | 2F | / | |
00110000 | 060 | 48 | 30 | 0 | |
00110001 | 061 | 49 | 31 | 1 | |
00110010 | 062 | 50 | 32 | 2 | |
00110011 | 063 | 51 | 33 | 3 | |
00110100 | 064 | 52 | 34 | 4 | |
00110101 | 065 | 53 | 35 | 5 | |
00110110 | 066 | 54 | 36 | 6 | |
00110111 | 067 | 55 | 37 | 7 | |
00111000 | 070 | 56 | 38 | 8 | |
00111001 | 071 | 57 | 39 | 9 | |
00111010 | 072 | 58 | 3A | : | |
00111011 | 073 | 59 | 3B | ; | |
00111100 | 074 | 60 | 3C | < | |
00111101 | 075 | 61 | 3D | = | |
00111110 | 076 | 62 | 3E | > | |
00111111 | 077 | 63 | 3F | ? | |
01000000 | 100 | 64 | 40 | @ | |
01000001 | 101 | 65 | 41 | A | |
01000010 | 102 | 66 | 42 | B | |
01000011 | 103 | 67 | 43 | C | |
01000100 | 104 | 68 | 44 | D | |
01000101 | 105 | 69 | 45 | E | |
01000110 | 106 | 70 | 46 | F | |
01000111 | 107 | 71 | 47 | G | |
01001000 | 110 | 72 | 48 | H | |
01001001 | 111 | 73 | 49 | I | |
01001010 | 112 | 74 | 4A | J | |
01001011 | 113 | 75 | 4B | K | |
01001100 | 114 | 76 | 4C | L | |
01001101 | 115 | 77 | 4D | M | |
01001110 | 116 | 78 | 4E | N | |
01001111 | 117 | 79 | 4F | O | |
01010000 | 120 | 80 | 50 | P | |
01010001 | 121 | 81 | 51 | Q | |
01010010 | 122 | 82 | 52 | R | |
01010011 | 123 | 83 | 53 | S | |
01010100 | 124 | 84 | 54 | T | |
01010101 | 125 | 85 | 55 | U | |
01010110 | 126 | 86 | 56 | V | |
01010111 | 127 | 87 | 57 | W | |
01011000 | 130 | 88 | 58 | X | |
01011001 | 131 | 89 | 59 | Y | |
01011010 | 132 | 90 | 5A | Z | |
01011011 | 133 | 91 | 5B | [ | |
01011100 | 134 | 92 | 5C | \ | |
01011101 | 135 | 93 | 5D | ] | |
01011110 | 136 | 94 | 5E | ^ | |
01011111 | 137 | 95 | 5F | _ | |
01100000 | 140 | 96 | 60 | ` | |
01100001 | 141 | 97 | 61 | a | |
01100010 | 142 | 98 | 62 | b | |
01100011 | 143 | 99 | 63 | c | |
01100100 | 144 | 100 | 64 | d | |
01100101 | 145 | 101 | 65 | e | |
01100110 | 146 | 102 | 66 | f | |
01100111 | 147 | 103 | 67 | g | |
01101000 | 150 | 104 | 68 | h | |
01101001 | 151 | 105 | 69 | i | |
01101010 | 152 | 106 | 6A | j | |
01101011 | 153 | 107 | 6B | k | |
01101100 | 154 | 108 | 6C | l | |
01101101 | 155 | 109 | 6D | m | |
01101110 | 156 | 110 | 6E | n | |
01101111 | 157 | 111 | 6F | o | |
01110000 | 160 | 112 | 70 | p | |
01110001 | 161 | 113 | 71 | q | |
01110010 | 162 | 114 | 72 | r | |
01110011 | 163 | 115 | 73 | s | |
01110100 | 164 | 116 | 74 | t | |
01110101 | 165 | 117 | 75 | u | |
01110110 | 166 | 118 | 76 | v | |
01110111 | 167 | 119 | 77 | w | |
01111000 | 170 | 120 | 78 | x | |
01111001 | 171 | 121 | 79 | y | |
01111010 | 172 | 122 | 7A | z | |
01111011 | 173 | 123 | 7B | { | |
01111100 | 174 | 124 | 7C | | | |
01111101 | 175 | 125 | 7D | } | |
01111110 | 176 | 126 | 7E | ~ | |
01111111 | 177 | 127 | 7F | DEL (Delete) | 删除 |
输入/输出用到字符时:
键入"1",实际写入键盘存储区的是:31H,即 00110001B
键入"A",实际写入键盘存储区的是:41H,即01000001B
如果想要显示"0",应把30H即00110000B------>显示存储区
如果想要显示"F",应把46H即01000110B------>显示存储区
我们主要需要记忆的是:
0~9的ASCII码:30H~39H
A~F的ASCII码:41H~46H
回车符的ASCII码:ODH
换行符的ASCII码:OAH
2)十进制数的二进制编码------BCD码
这个学过数电的应该知道,但是不知道也没关系,我们慢慢来。
用二进制数对每一位十进制数字进行编码所得到的数叫做BCD码。
BCD码有多种形式,最常用的是8421BCD码,它是用4位二进制数对一个十进制数进行编码,这4位二进制码的值就是被编码的一位十进制数的值。
|--------|------------|-----------|
| 四位二进制数 | 等值的一位BCD码数 | 等值的一位BCD码 |
| 0000 | 0000 | 0 |
| 0001 | 0001 | 1 |
| 0010 | 0010 | 2 |
| 0011 | 0011 | 3 |
| 0100 | 0100 | 4 |
| 0101 | 0101 | 5 |
| 0110 | 0110 | 6 |
| 0111 | 0111 | 7 |
| 1000 | 1000 | 8 |
| 1001 | 1001 | 9 |
| 1010 | 非法BCD码 ||
| 1011 | 非法BCD码 ||
| 1100 | 非法BCD码 ||
| 1101 | 非法BCD码 ||
| 1110 | 非法BCD码 ||
| 1111 | 非法BCD码 ||
BCD码在计算机中的存储分为紧凑型和非紧凑型两种:
紧凑型:
非紧凑型:=0000,0011B
0000,0111B

3)有符号数的编码(码制)------原反补码
计算机只能识别0和1组成的数或代码,所以有符号数的符号也只能用0和1来表示。
真值和机器数的概念:
真值:一个数的数值,用"+"表示正数,用"-"表示负数
那么机器数在计算机中如何表示正负呢?
计算机正是通过特定规则来区分机器数的正负。核心方法是为每个机器数分配一位 "符号位",用 0 表示正数,1 表示负数,其余位则用来表示数值本身。
0XXXXXXX 1XXXXXXX
正数 负数
字长:计算机在同一时间内处理二进制数的位数。是CPU的一个主要技术指标。
对有符号数来讲,是包括符号位在内的一个二进制有符号数占有的位数。
由于机器数的数值部分的表示方法不同,有符号数可有三种表示方法:原码、反码、补码。
数X,原码记作[X]原,反码记作[X]反,补码记作[X]补
原码:
最高位为符号位,数值位部分就是该数的绝对值。
例
假设某机器的字长为8位,则:
+23(17H)的原码机器数为:00010111
-23(-17H)的原码机器数为:10010111
其中最高位是符号位,后7位是数值位。
反码:
把最高位规定为符号位,数值部分对正数是其绝对值 ,对于负数则是其绝对值按位取反(即1变0,0变1)。
例
+23(17H)的反码机器数为:00010111
-23(17H)的反码机器数为:11101000
数字0的反码有2种表示:
+0\]反=(00000000)2 \[-0\]反=(11111111)2 **补码:** 对于正数的补码同原码、反码,负数的数值位部分 为其绝对值按位取反后末位加1所得。 例 +23的补码为: 00010111 -23的补码为: 11101001 **小结:** > 1. 机器数比真值数多一个符号位。 > 2. 正数的原、反、补码与真值数相同。 > 3. 负数原码的数值部分与真值相同;负数反码的数值部分为真值数按位取反;负数补码的数值部分为真值数按位取反末位加1。 > 4. 没有负零的补码,或者说负零的补码与正零的补码相同。 > 5. 由于补码表示的机器数更适合运算,为此,计算机系统中负数一律用补码表示。 > 6. 机器数能表示的真值数值范围(设机器数字长=n位,用来表示整数) > 7. **则n位原码数,其真值范围为:~ > 则n位反码数,其真值范围为:~ > 则n位补码数,其真值范围为:\~ > 则n位无符号数,其真值范围为:\~** #### 3.计算机中数据的编码------整数补码运算 ##### 1)"模"的概念 四位计数器能存0000\~1111共十六个数, 模= 八位计数器能存0000,0000\~1111,1111共256个数 模= 十六位计数器能存0000,0000,0000,0000\~1111,1111,1111,1111共65536个数, 模= **求补运算:** 设一个数的真值数值部分用X来表示,按照补码的编码规则,可以计算得到:\[+X\]补; 对\[+X\]补按位取反末位加1,就得到:\[-X\]补。 例: 机器字长n=8,设X=十75,则\[X\]补=01001011; 设X=一75,则\[X\]补=10110101。 ##### 2)整数补码的加减运算 \[x+y\]补=\[x\]补+\[yl补 \[x-y\]补一\[x\]补+\[-y\]补 条件: 1. 符号位参加运算 2. 以2为模(n为字长) 3. 当真值满足下列条件时,结果是正确的,否则结果错误 \< x,y,x+y ,x-y \<  我们来看这道题: 设x=,y=,以28为模,补码运算x+y 解 ,   例3 以28为模,补码运算,求66+99,-66-99 可能有人会这么做:  进而会得出: 66+99=-1011011=-91 -66-99=+01011011=+91 但是很抱歉我们会发现答案是错的 这是为什么呢? 因为字长n=8,8位字长的补码数,其真值范围是:-128\~+127 而:66+99=165,真值超过127;-66-99=-165, 真值小于-128 运算器位数不够,不能表示165和-165,所以出错。 **所以:定字长的机器,表示的数值是有范围的,超出范围时的数据表示出错。** ##### 3)溢出和进位的概念 **进位:** 运算后,最高位向更高位的进位值。 **溢出:**运算结果超出了运算器所能表示的范围。 下列情况就发生了溢出: 8位加法器,运算无符号数,结果≥256 8位加法器,运算有符号数,结果\>+127,\<一128 16位加法器,运算无符号数,结果≥65536 16位加法器,运算有符号数,结果\>,\ * 程序由多条有逻辑关系的指令组成; > * 指令是程序员发出的,计算机能识别的,通知CPU执行某种操作的命令 > * 指令的长度不等(一般为1~4字节); > * 计算机的工作就是逐条执行由指令构成的程序 > * 程序的指令和数据均以二进制代码的形式不加区别地存放在存储器中,存放位置由地址指 > 定,地址码也是二进制形式 > * 计算机按程序的流程自动地连续取出指令并执行之 > * 为实现自动连续地执行程序,控制器设置一程序计数器PC,它可根据指令的长度自动增量(总是指向下一条指令) > * 只要给出程序中第一条指令的地址,控制器就可依据存储程序中的指令顺序周而复始地取指令、译码、执行,直到完成全部指令操作为止,即控制器通过指令流的串行驱动实现程序控制   ### 1.4存储器基本概念 #### 1.一些基本术语 ####  存储器:指系统的主存储器,简称为内存或主存。用来存放程序、数据。 |------|--------------------------------------| | 存储元 | 存储器的最小组成单位,用以存储1位二进制代码 | | 存储单元 | 是CPU访问存储器基本单位,由若干个具有相同操作属性的存储元组成 | | 存储体 | 存储单元的集合,是存放二进制信息的地方 | | 单元地址 | 在存储器中用以表识存储单元的唯一编号,CPU通过该编号访问相应的存储单元 | | 存储器 | 存储体和地址译码电路、读写控制电路等一起构成存储器 | 具体关系如图:  位(bit)是计算机所能表示的最小最基本的数据单位,它指的是取值只能为0或1的一个二进制数值位。位作为单位时记作b 字节(byte)由8个位二进制位组成,通常用作计算存储容量的单位。字节作为单位时记作B 通常用:KB(字节)、MB(字节)、GB(字节)或TB(字节)作为存储器的容量单位 存储单元的二进制地址码,由CPU通过地址总线送存储器的地址译码器的输入。为了方便,习惯上书写成16进制 地址线条数决定了访问内存的容量:n条地址线,可以访问个字节存储容量 1MB容量的存储器地址范围:00000H\~FFFFFH,由20根地址线提供地址码。 4GB容量的存储器地址范围:0000,0000H\~FFFF,FFFFH,由32根地址线提供地址码。  对存储器的操作: 读:CPU从存储器取出信息; 写:CPU向存储器存入信息。  #### 2.存储器的分类 1)按存储介质分 半导体存储器:用半导体器件组成 磁表面存储器:用磁性材料做成 2)按存储器的读写功能分 只读存储器(ROM):存储的内容固定不变,是只能读出而不能写入的半导体存储器 随机读写存储器(RAM):是存储的内容可读可写的半导体存储器 3)按在计算机系统中的作用分 主存储器:存放运行的指令和数据 辅助存储器:外设一存储程序和数据 高速缓冲存储器:主存的一部分,可进行高速存取 控制存储器:CPU内部控制器的主要组成 |---------|-------|-------------------|----------------| | 计算机中存储器的用途和特点 |||| | 名 称 | 简 称 | 用 途 | 特 点 | | 高速缓冲存储器 | Cache | 高速存取指令和数据 | 存取速度快,但存储容量小 | | 主存储器 | 主存 | 存放计算机运行期间的大量程序和数据 | 存取速度较快,存储容量不大 | | 辅助存储器 | 外存、辐存 | 存放系统程序和大型数据文件及数据库 | 存储容量大,位成本低,速度慢 | **1.RAM** 随机存储器,是"内存"的重要组成部分,CPU执行指令可对其进行"读"、"写"操作。 > **静态RAM:** 集成度低,信息稳定,读写速度快。 > **动态RAM:**集成度高,容量大,缺点是信息存储不稳定,只能保持几个毫秒,为此要不断进行"信息再生",即进行"刷新"操作。 > > **内存条:**由于动态RAM集成度高,价格较便宜,在微机系统中使用的动态RAM组装在一个条状的印刷板上。系统配有动态RAM刷新控制电路,不断对所存信息进行"再生" **2.高速缓冲存储器Cache:** Cache位于CPU与主存储器之间,由高速静态RAM组成。容量较小,为提高整机的运行速度而设置,应用程序不能访问Cache。CPU内部也有Cache。 **3.ROM** 只读存储器,所存信息只能读出,不能写入。 > ROM/EPROM在微机系统中的应用:存放"基本输入/输出系统程序"(简称BIOS) > BIOS是计算机最底层的系统管理程序,操作系统和用户程序均可调用。 ## 第二章 80X86微处理器 ### 2.1 Intel微处理器发展概况 ###  #### 1.与微处理器有关的常用术语 > **字长(数据宽度)**:字长是微处理器一次可以直接处理的二进制数码的位数,它通常取决于微处理器内部通用寄存器的位数和数据总线的宽度。微处理器的字长有4位、8位、16位、32位和64位等。  > **寻址能力:** 指CPU能直接存取数据的内存地址的范围,它由CPU的地址总线的数目决定。 > **主频:**也叫时钟频率,用来表示微处理器的运行速度,主频越高,表明微处理器运行越快,主频的单位是MHz、GHz。 > > **mips:** 是Millions of Instruction PerSecond的缩写,每秒钟能执行多少百万条指令。 > > 用来表示微处理器运算速度的性能 > **微处理器的集成度:**指微处理器芯片上集成的晶体管数目。 早期的Intel4004的集成度为2250个晶体管, PentiumIII的集成度已经达到750万个晶体管以上,提高了3000多倍。  ##### 1)微处理器的基本功能模块: **总线接口单元BIU** (寄存器组及相关电路) **执行单元EU**(运算器和控制器、寄存器组)  具备8086/8088最基本功能外还增加了:**虚拟存储** 、**特权保护** 、任务管理等功能,支持 多用户和多任务系统 ##### 2)80286内部结构    ##### 3)Pentium内部结构  > Pentium采用了多项先进技术: > > 1. CISC和RISC相结合的技术 > 2. 超标量流水线技术 > 3. 分支预测技术 > RISC(Reduced Instruction Set Computer),精简指令系统的计算机 > > 提供数目较少、格式与功能简单、运行高效的指令。追求的是计算机控制器实现简单,运行高速,更容易在单块超大规模集成电路的芯片内制做出来。 > > CISC(Complex Instruction Set Computer),复杂指令系统的计算机,相对于RISC一词而提出 > > 指令条数多,格式多样,寻址方式复杂,每条指令的功能强。汇编程序设计容易些,但计算机控制器的实现困难多,很多指令被使用的机会并不多。 > **流水线:** > > 是一种使多条指令重叠操作的技术,是当代微处理器设计中的关键技术之一。把一条指令分解成若干个步骤来完成,在流水线上称为级,每级都在一个时钟周期内完成各自的操作。这样每个时钟周期都可以启动一条指令,m级的流水线上就会有m条指令在同时执行。流水线的性能比非流水线作业几乎提高了m倍。 > **超标量流水线:** > > 标量指单个量,一般的流水计算机因只有一条指令流水线,所以称为标量流水计算机,所谓超标量是指其具有两条以上的指令流水线。Pentium有U、V两条整型流水线,一条浮点流水线。 > **分支预测技术:** > > 是指当遇到转移指令、CALL调用指令、RET返回指令、INTn中断指令等跳转指令时,指令预取单元能够较准确地判定是否转移取指。 #### 2.2 32位微处理器的内部结构 ###  ##### 1)486微处理器内部结构寄存器 486内部寄存器分为4类:**基本结构寄存器,浮点寄存器,系统级寄存器,调试测试寄存器。** 应用程序只能访问**基本结构寄存器** 和**浮点寄存器**。(这里我们只介绍基本结构寄存器)  ###### 1、通用寄存器 |--------------------------|--------| | 通用寄存器 || | AX (accumulater) | 累加器 | | BX (Base) | 基址寄存器 | | CX (Count) | 计数器 | | DX (Data) | .数据寄存器 | | IP (Instruction Pointer) | 指令指针 | | SP (Stack Pointer) | 栈指针 | | BP (Base Pointer) | 基址指针 | | SI (Source Index) | 源变址寄存器 | | DI (Destination Index) | 的变址寄存器 | AX、BX、CX、DX共同特点:既可作为16位寄存器来用又可作为两个8位寄存器(高、 低位)来用都是用于暂存操作数、运算的中间结果和其它一些信息。 > 指令=操作码+操作数 IP、SP、BP、SI、DI:为寻址存贮单元提供偏移地址 ###### 2、标志寄存器  这个就是标志寄存器 > 32位寄存器,FLAGS又称为程序状态字PSW,为16位寄存器 > **作用**:记录CPU运行结果状态标志;控制CPU的某种操作。 > 标志寄存器提供两类标志: > **状态标志:**表示前面的操作执行后,算术逻辑部件处在怎样一种状态,这种状态会像某种先决条件一样影响后面的操作。有SF、ZF、PF、CF、AF和OF > > **控制标志** :有DF、IF、TF。每个控制标志都对某一种特定的功能起控制作用。指令系统中有 > > 专门的指令用于控制标志的设置和清除。 ###### 3、段寄存器 ###  CS、DS、ES、SS---4个段寄存器,和偏移地址寄存器一起形成20位存储器物理地址,对存储器中存放的程序、数据、堆栈区域加以区别、寻址。 > 寻址程序(指令):CS+IP; > > 寻址数据:(DS或ES)+(SI或DI、BX、BP); > > 寻址堆栈:SS+(SP或BP) > > 具体用法我们在寻址方式中介绍 ### 2.3 32位微处理器的工作模式  ##### 1)32位微处理器地址空间 > ###### 1.存储空间 > > 存储空间(物理、虚拟、线性): > > 物理空间(物理存储器地址空间):程序的运行空间,即主存空间 > > 486有32条地址线,内存最大容量4G。这4G字节称为物理存储器,每一单元的地址称为物理地址,其地址范围:0000,0000H\~FFFF,FFFFH为物理存储空间。 > > 虚拟空间(虚拟存储器地址空间):编程空间 > > 虚拟存储器是一项硬件和软件结合的技术。 > > CPU内部的存储管理部件把主存(物理存储器)和辅存(磁盘)看作是一个整体,即虚拟存储器。允许编程空间为246=64T,程序员可在此地址范围内编程,大大超过物理空间。该空间对应的地址称为虚拟地址或逻辑地址。 > > 程序运行时,操作系统从虚拟空间取一部分程序代码载入物理空间运行。 > > 当程序运行需要调用的程序和要访问的数据不在物理存储器时,操作系统再把那一部分调入物理存储器..数据的交换极快,程序察觉不到 > > 线性空间:当程序从虚拟空间调入物理空间时,要进行地址转换。分段部件首先把虚拟地址(编程地址)转换为线性地址。 > >  > > 线性空间: > > 实模式:存储空间仅分段,而不分页; > > 保护模:存储空间先分段,再分页。 > > 如果不分页的话,线性地址就是物理地址; > > 如果分页的话,则由分页部件把线性地址转换为物理地址。 > > ###### 2.IO空间: > > 1. 486利用低16位地址线访问I/O端口,所以I/O端口最多有216=64K,I/O地址空间为0000H\~FFFFH。 > 2. I/O地址空间不分段。 > 3. 从PC/XT\~Pentium,基于Intel微处理器的系统机,实际只使用低10位地址线,寻址210=1024个/O端口。 ##### 2)32位微处理器工作模式 > ###### 1.实地址模式(实模式) > > 特点: > > 1. 加电、复位之后,486自动工作在实模式,系统在DOS管理下; > 2. 在实模式下,486只能访问第一个1M内存(OOOOOH\~FFFFFH); > 3. 存储管理部件对存储器只进行分段管理,没有分页功能,每一逻辑段的最大容量为64K; > 4. 该模式下,段寄存器中存放段基址。 > > 实模式下,不同存储空间存储单元的地址表示形式不同: > > **物理空间:物理地址** > > 是指1MB存贮区域中的某一单元地址,地址信息是20位的二进制代码,以16进制表示是 > > 00000H\~FFFFFH中的一个单元,CPU访问存贮器时,地址总线上送出的是20位物理地址 > > 编制程序采用逻辑地址。程序是分段的,逻辑地址由段基址和偏移地址组成,书写成-段基址:偏移地址 > > ###### 2.保护虚拟地址模式(保护模式) > > 特点: > > 1. 486支持多任务操作系统; > 2. 486可以访问4G物理存储空间;存储器用虚拟地址空间、线性地址空间和物理地址空间三种方式来进行描述,虚拟地址就是逻辑地址;寻址机构不同于8086,通过一种称为描述符表的数据结构来实现对内存单元的访问,该描述符由存放在段寄存器中的选择符来确定。 > 3. CPU内部的存储管理部件对存储器采用分段和分页管理。可以将磁盘等存储设备有效映射到内存,使逻辑地址空间大大超过实际的物理地址空间,这样使主存储器容量似乎很大; > 4. 既能进行16位运算,也能进行32位运算。 > > 486工作在保护模式下,才能真正发挥它的设计能力 **关于保护机制:** 高级别的程序可以访问同级或低级的数据段,反之则不行  **虛拟86模式:** 虚拟86模式是保护模式下的一种特殊工作模式,可运行实模式程序。在操作系统管理下,486可以分时地运行多个实模式程序。 ##### 3)32位微处理器工作模式------实模式下20位物理地址的形成 ###### 1.实地址模式下的物理地址与逻辑地址 物理空间对应的**物理地址** 是指1MB存储区域中的某一单元地址,地址信息是20位的二进制代码,以16进制表示是 00000H\~FFFFFH中的一个单元,CPU访问存储器时,地址总线上送出的是20位物理地址 **编程空间(虚拟空间)对应的逻辑地址** 编制程序应采用逻辑地址。程序是分段的,逻辑地址由段基址和偏移地址组成,书写成段基址:偏移地址  在一个逻辑段中,各单元的16位段地址是相同的,偏移地址是该单元相对于段首的16位地址偏移量 系统默认时,段都起始于16字节的边界,即段起始物理地址为XXXXOH  物理地址为12345H的单元,逻辑地址可能为1000H:2345H,也有可能是1200H:0345H、 1230H:0045H... 实模式下,把1M字节的存储器分为任意数量的段,其中每一段最大长度为64K()字节。 所有段都起始于16字节的边界,段起始物理地址为XXXXOH,把段的起始地址的高16位地址称为该段的段基址。同一个逻辑段中,各存储单元的段基址相同。段内再由16位二进制数寻址,段内寻址的16位二进制数地址是存储单元到段起始地址的距离,称为偏移地址。 ###### 2.实地址模式CPU20位物理地址的形成   例:段寄存器CS内容为1000H,偏移地址在IP寄存器中,为2345H 则CPU所取指令的物理地址为: 列竖式: |---|---|---|---|---|---| | 1 | 0 | 0 | 0 | 0 | H | | + | 2 | 3 | 4 | 5 | H | | ------------------------------------------------------------------------------------------------------------ |||||| | 1 | 2 | 3 | 4 | 5 | H | 20位物理地址的计算由BIU中的地址加法器来完成 逻辑地址由程序员在编程时给出。因编程在逻辑空间进行,还没有定位到存储器,故: 段基址:指明由哪个段寄存器给出即可 偏移地址:由程序员在程序中给出具体值 ###### 3.实地址模式下各逻辑段物理地址的形成 (以16位寻址为例,段寄存器中存放段基址): |-----|----------|---------------------| | 逻辑段 | 段基址存放在 | 偏移地址存放在. | | 代码段 | CS | IP | | 堆栈段 | SS | SP | | 数据段 | DS | 根据不同的寻址方式选择BX、SI、DI | | 附加段 | ES/FS/GS | 根据不同的寻址方式选择BX、SI、DI | **代码段:** CS\*+IP=指令单元的物理地址,一条指令的一个字节取出后,IP自动加1,指向下一字节 **堆栈段:** SS\*+SP=栈顶单元的物理地址 **数据段:** DS\*+偏移地址=数据单元的物理地址 ###### 4.16位寻址时寄存器和指针寄存器的初值 |-----|----------------|--------------------| | 代码段 | CS、IP的初值 | 由操作系统赋值 | | 堆栈段 | SS、SP的初值 | ①由程序员赋值 ②由操作系统自动赋值 | | 数据段 | DS/ES/FS/GS的初值 | 由程序员赋值 | | | BX/SI/DI/BP的初值 | 由程序员赋值 | ## 第三章 汇编语言指令集