微机原理课件.docx
《微机原理课件.docx》由会员分享,可在线阅读,更多相关《微机原理课件.docx(66页珍藏版)》请在冰豆网上搜索。
![微机原理课件.docx](https://file1.bdocx.com/fileroot1/2023-1/30/9056d797-dc25-499e-a984-b51222a32fda/9056d797-dc25-499e-a984-b51222a32fda1.gif)
微机原理课件
第一章计算机基础知识
第一节计算机中的运算基础
一、数制及其转换
1)任意进制数的共同特点(n进制)n=2、8、10、16
①、n进制数最多是由n个数码组成
十进制数的组成数码为:
0~9
二进制数的组成数码为:
0、1
八进制数的组成数码为:
0~7
十六进制数的组成数码为:
0~9、A~F
十六进制数和十进制数的对应关系是:
0~9相同,A-10,B-11,C-12,D-13,C-14,F-15
②、n进制数的基数或底数为n,作算术运算时,有如下特点:
低位向相邻高位的进位是逢n进1(加法);
低位向相邻高位的借位是以1当本位n(减法)。
③、各位数码在n进制数中所处位置的不同,所对应的权也不同。
以小数点为分界点:
向左(整数部分):
各位数码所对应的权依次是n0、n1、n2,…
向右(小数部分):
各位数码所对应的权依次是n-1、n-2、n-3,…
权:
数制每一位所具有的值。
2)数制的转换
①、非十进制数→十进制数
转换方法:
按位权展开求和
例:
101.11B=1*22+1*20+1*2-1+1*2-2
=4+1+0.5+0.25
=5.75
F94H=15*162+9*161+4*160
=3988
注意点:
只有十进制数的下标可以省略,其他进制数不可以省略。
②、十进制数→非十进制数(K进制数)
转换方法:
分成小数和整数分别转换。
整数部分:
除K取余,直至商为0,先得的余数为低位;
小数部分:
乘K取整,先得的整数为高位。
例:
把3988转换成16进制数
例:
0001,1010,1110,1101,1011.0100B
1AEDB4H
若十六进制数转换为二进制数,则将每一位拆成4位。
3)模的概念
模:
恒量一个存储单元的最大容量也是一个机器所能处理的最大数据。
若a和b除以M,余数相等,则称a和b对于M是同余的,则可以写成:
a=b(modM)
容器的最大容量称为模。
可写成:
KM+X=X(modM)
4)有符号数在计算机中的表示方法
在计算机中,一个有符号数可以用原码、补码和反码表示。
A)共同规律:
①、用0表示正号,用1表示负号,且摆放在数据的最高位,有符号数和无符号数表示的根本区别在于无符号数的最高位是数值位,有符号数的最高位是符号位;
②、同一正数的原、补、反码都相同。
③、定义区间均对模2n而言,其中n表示有符号数的二进制代码位数。
B)其它规律:
①、任一负数的原码和对应的正数(绝对值相等)的原码仅是符号位不同;
②、任一负数的反码是表示其符号位为1,数值位取反;
③、任一负数的补码是其反码的最低位加1;
④、从定义区间上看
原码和反码的定义区间相同,是–2n-1<X<2n-1;
补码的定义区间是–2n-1≤X<2n-1;
⑤、0的原码、反码有+0和-0之分;
0的补码只有一种表达方式。
例1:
设X=+97求[X]原、[X]反、[X]补(mod28)
解:
97=1100001B
[X]原=01100001B;
[X]反=[X]补=01100001B。
例2:
设X=-97,求[X]原、[X]反、[X]补(mod28)
解:
97=1100001B
[X]原=11100001B;
[X]反=10011110B;
[X]补=10011111B。
例3:
设X=-137求[X]原、[X]反、[X]补(mod29)
解:
137=10001001B
[X]原=110001001B;
[X]反=101110110B;
[X]补=101110111B。
5)带符号数运算时的溢出问题
A)、溢出和进位的区别:
进位是指最高位向更高位的进位
溢出是指运算结果超出数所能表示的围。
带符号数所能表示的范围:
(若用n位二进制数码表示)
原码:
-(2n-1-1)≤X≤2n-1-1
补码:
-2n-1≤X≤2n-1-1
反码:
-(2n-1-1)≤X≤2n-1-1
B)、溢出的判断方法:
设CD_A是符号位向更高位的进位,CD_B是数值位向符号位的进位,则溢出可用V=CD_A⊕CD_B判断,V=1表示有溢出,V=0表示无溢出。
对于加减法,也可以这样判断,只有下述4中情况有可能产生溢出:
正数+正数,结果应为正,若为正,则无溢出;若为负,则有溢出。
负数+负数,结果应为负,若为负,则无溢出;若为正,则有溢出。
正数-负数,结果应为正,若为正,则无溢出;若为负,则有溢出。
负数-正数,结果应为负,若为负,则无溢出;若为正,则有溢出。
对于乘(除)法,乘积(商)超过了能存放的范围有溢出,否则无溢出。
其它情况肯定无溢出。
C)、注意点:
无符号数和带符号数表示方法的区别:
无符号数:
无符号位,所有位都是数值位,即最高位也是数值位;
带符号数:
有符号数,且在最高位,其余各位才是数值位。
二进制数的减法运算
例如:
Y=11(10)-8(10)=?
(mod25)
Y=11(10)-8(10)
=11(10)+(-8(10))
=11(10)补+(-8(10))补
11(10)原=01011B
-8(10)原=11000B
-8(10)反=10111B
-8(10)补=11000B
01011B
11000B
00011B
6)、基本名词
位:
BIT,缩写为b;
字节:
BYTE,由8位二进制数代码表示,缩写为B;
字:
WORD,取决于计算机CPU的字长,内部寄存器的位数,其中8086CPU为16位,386、486CPU为32位;
千字节:
1KB=1024B=210B,
兆字节:
1MB=220B,
吉字节:
1GB=230B=1024MB
太字节:
1TB=240B=1024GB
第二节:
计算机中数据的编码
一、十进制数在计算机中的表示方法
BCD(BinaryCodedDecimal)是用4位二进制代码表示一位十进制数,由于4位二进制代码表示16种状态,而十进制数只取其中10种状态。
选择不同的对应规律,可以得到不同形式的BCD码。
最常用的是8421BCD码。
由于在机内采用BCD码进行运算绕过了二进制、十进制间的复杂转化环节,从而节省了机器时间。
例:
59=(0101,1001)BCD
465=(0100,0110,0101)BCD
(011010000010)BCD=(0110,1000,0010)BCD=682
注意点:
BCD码与二进制数之间不能直接转换,需将BCD码先转换成十进制数,再由十进制数转换为二进制数。
与十六进制数的区别在于:
组内逢2进1,组间逢十进1。
二、字符在计算机中的表示方法
由于大、小写英文字母、0~9数字字符、标点符号、计算机特殊控制符一共不超过128个,所以只要用七位二进制数码来表示,称为ASCII码。
国际标准为ISO-646,我国国家标准为GB1988。
在计算机中,一个字符通常用一个字节(八位)表示,最高位通常为0或用于奇偶校验位。
例:
’A’=41H=01000001B
’0’=30H=00110000B
’a’=61H=01100001B
’;’=3BH=00111011B
ISO2022标准在兼容ISO646的基础上扩展成8位码,可表示256个字符,扩充了希腊字母、数学符号、非拉丁字符、商用图符,游戏符号等。
三、机器数和真值
机器数:
是摆在计算机寄存器或存储器或I/O端口中的数;
真值:
描述机器数对应于某一确定的码制就有唯一确定的值。
例:
机器数34H,用原码表示为+52;用反码表示为+52;用补码表示为+52;用BCD码表示为34;用ASCII码表示为4。
即[+52]原=[+52]反=[+52]补=34H
[34]BCD=34H
[4]ASCII=34H
机器数97H,用原码表示为-23;用反码表示为-104;用补码表示为-105;用BCD码表示为97;用ASCII码表示为ETB。
第三节:
数的定点和浮点表示
一、数的定点和浮点表示
定点表示:
又称整数表示,小数点在数中的位置是固定不变的;
浮点表示:
又称实数表示,小数点在数中的位置是浮动的。
一个任意实数,在计算机内部可以用指数(为整数)和尾数(为纯小数)来表示,用指数和尾数表示实数的方法称为浮点表示法。
对于任意一个二进制数N,可用N=S*2P表示,
其中S为尾数(二进制数),表示N的全部有效数字
P为阶码(二进制数)指明小数点的位置
2为阶码的底,
当阶码P为固定值时,数的这种表示法称为定点表示,这样的数称为定点数;当阶码为可变时,数的这种表示法称为浮点表示,这样的数称为浮点数。
一个实数可表示成一个纯小数与一个乘幂之积。
如
1011.101=0.1011101×2100
-0.0010011=-0.10011×2-10
-110001101=-0.110001101×21001
表示浮点数时指数选用什么编码?
尾数的格式和小数点位置如何确定?
起初不同的计算机有不同的规定,产生了相互间数据格式的不兼容。
为此,IEEE制定了有关标准,并被普遍采用。
浮点数的长度可以是32位、64位甚至更长,分阶码和尾数两部分。
阶码位数越多,可表示的数的范围越大;尾数越多,所表示的数的精度越高。
第二章
8086/8088微处理器及其系统结构
第一节8086/8088CPU
一、总线接口部件BIU与执行部件EU
1、总线接口部件BIU:
由4个16位段寄存器,一个16位指针寄存器。
20位物理地址加法器,6字节指令队列(8088为4字节)及总线控制电路组成。
负责与存储器及I/o端口的数据传送,既BIU。
根据执行部件EU计算出的16位偏移地址及16位段积存器提供的16位段地址,通过地址加法器产生20位物理地址。
根据EU单元的请求,用20位物理地址对存储器进行读/写操作,也可对I/O口进行读/写操作。
无论8086还是8088都会在执行指令的同时,从内存中取下面一条或几条指令放在指令队列中。
2、执行部件EU:
执行部件由ALU、寄存器阵列、标志寄存器FR、控制器等几个部分组成。
其任务就是从指令队列中流取出指令,然后分析和执行指令,还负责计算操作数的16位偏移地址。
3、BIU和EU的管理
BIU和EU非同步工作,其管理原则为:
(1)指令队列有2个字节节空(8086)时,BIU会自动把下一条指令取到指令队列中。
(2)EU在执行指令过程中,如果必须访问存储器或I/O设备,则EU会自动请求BIU进入总线周期去完成访问存储器或I/O操作,此时若BIU空闲,就会立即完成EU请求。
否则BIU将首先完成自己,将指令取至指令队列中的任务,再响应EU的请求。
(3)当指令队列已满,而EU又无请求时,BIU进入空闲状态。
(4)当EU执行转移类,调用及返回指令时,EU将不再用指令队列中顺序装入的指令。
此时指令队列中原有的内容被自动清除,而BIU会接着将另一程序段的指令装入指令队列
EU和BIU这种并行的工作方式极大地提高了CPU的工作效率。
二、系统总线
总线是部件之间进行数据(电信号)交换的通道。
80x86计算机的系统总线分为3类:
数据总线
地址总线
控制总线
1、数据总线
数据总线是用来传递数据的,定义了CPU在每个内存周期所能存取数据的位数。
80x86系列CPU的数据总线为8位、16位、32位或64位。
这就是“为什么通常的数据存取是以8位、16位、32位或64位进行的”。
数据总线越宽,处理能力越强。
具有N位数据总线并不意味着CPU只能处理N位数据。
2.地址总线
地址总线用来指出数据的地址(内存或I/O)。
地址总线的位数决定了最大可编址的内存与I/O空间。
对于N位地址总线,CPU可以提供2N个不同地址:
0~2N-1。
地址总线由内存与I/O子系统共享使用(I/O只用低16位)。
3.控制总线
控制总线用来控制CPU与内存和I/O设备之间的数据传送方(如传送方向)。
三、80x86CPU的寄存器组
1.通用寄存器
8位通用寄存器8个:
AL、AH、BL、BH、CL、CH、DL、DH。
16位通用寄存器8个:
AX、BX、CX、DX、SI、DI、BP、SP。
32位通用寄存器8个:
EAX、EBX、ECX、EDX、ESI、EDI、EBP、ESP。
AL与AH、BL与BH、CL与CH、DL与DH分别对应于AX、BX、CX和DX的低8位与高8位。
AX、BX、CX、DX、SI、DI、BP和SP分别对应于EAX、EBX、ECX、EDX、ESI、EDI、EBP和ESP的低16位。
AX:
累加器,用累加器进行的操作可能需要更少时间,累加器可用于乘、除、输入/出操作,它的使用频率很高。
BX:
基地址寄存器,可作为存储器指针来使用。
CX:
计数寄存器,在循环和字符串操作时,要用它来控制循环次数,在位操作中,当移多位时,要用CL来指明移位的位数。
DX:
数据寄存器,在进行乘、除时,可作默认的操作数参与运算,也可用于存放I/O的端口地址。
①寄存器:
由触发器组成成一个触发器就是一个一位寄存器,由多个触发器可以组成一个多们寄存器。
缓冲寄存器----用以暂存数据。
移位寄存器----能够提供所有存注数据一位一位地向左或向右移。
计数器----一个计数脉冲到达时,会按二进制数的规律累计脉冲数。
累加器----用以暂存每次ACU中计算的中间结果。
②存储器:
是计算机的主要组成部分,它即可用来存储数据,也可用以存放计算机的运算程序。
存储器由寄存器组成,可以看作是一个程序寄存器堆。
每个存储单元数据实际上相当于一个缓冲寄存器,可分为只读存储器(ROM),随机存储器(RAM)。
③数据寄存器:
主要用来存储保存操作数和运算结果等信息,从而节省读取操作数所须占用总线和访问存储器的时间。
SI、DI称为变址寄存器,它们主要用于存放存储单元在内的偏移量,用它们可实现多种存储器操作数的寻址方式。
为以不同的地址形式访问存储单元提供方便。
变址寄存器不可分割成8位寄存器,作为通用寄存器,也可存放逻辑运算的操作数和运算结果。
BP、SP称为指针寄存器,主要用于存放堆栈内存储单元的偏移量,用它们可实现多种存储器操作数的寻址方式。
乃以不同的地址形式访问存储单元提供方便。
同上,不可分,也可存数据。
它们主要用于访问堆栈内的存储单元,并且规定:
BP为基指针寄存器,用它可直接存取堆栈中的数据。
SP为堆栈指针寄存器,用它只可访问栈顶。
SI和DI分别用来存放字符串处理时,源操作数段内偏移地址和目的操作数段内偏移地址,故分别称作源变址寄存器和目的变址寄存器。
2.专用寄存器
指令指针:
EIP(32位)、IP(16位)。
IP是EIP的低16位。
标志寄存器:
EFLAGS(32位)、FLAGS(16位)。
FLAGS是EFLAGS的低16位。
表2-1寄存器的隐含用法
标志寄存器
标志寄存器(FlagRegister)共有16位,其中7位未用。
标志寄存器内容如图所示:
(1)状态(条件)标志
(2)控制标志
OF
DF
IF
TF
SF
ZF
AF
PF
CF
3.段寄存器
6个16位的段寄存器:
CS、DS、ES、SS、FS和GS。
FS、GS以及所有32位寄存器是从80386CPU开始引入的。
第二节堆栈的概念
一、堆栈的概念
堆栈是在存储器中划出的一块连续存储区,这个连续存储区的底端是固定的。
另一端是活动的,可以上下进行浮动。
所有出入这个存储区的信息都要从活动的一端出入,即堆栈中的数据遵循先进后出,后进先出的原则。
在任何时刻,栈顶总是指向最后一个存入堆栈的数据的存储单元。
由图可知当TOP小于等于BOTTOM时堆栈为空,不存放任何数据;
当堆栈存有数据时候,TOP大于BOTTOM。
二、8086/8088堆栈的组织
在8086/8088系统中堆栈是由堆栈寄存器SS指定一段内存储区。
堆栈的底P是堆栈段的最大地址单元。
堆栈顶P(栈顶)由堆栈指针SP指向,SP中始终包含有段地址(起始地址)与栈顶之间的距离(字节数)。
当堆栈初始化,SP的值为堆栈的长度(这时它指向栈底+1的单元)。
如上图所示,由于SP是16位寄存器,因此堆栈的深度(长度,即能存放的字节数)最大是64KB.(8×8)。
8086/8088堆栈是按字进行组织,每次在堆栈中存取的数据都是两个字节。
第三节8086的系统组
一、8086存储器的分段结构
8086CPU中有四个段寄存器:
CS,DS,SS和ES,这四个段寄存器存放了CPU当前可以寻址的四个段的基值,也即可以从这四个段寄存器规定的逻辑段中存取指令代码和数据。
一旦这四个段寄存器的内容被设定,就规定了CPU当前可寻址的段,如图2-7所示。
图2-7当前可寻址的存储器段(堆栈段和附加段重叠)
二.8086存储器的逻辑地址与物理
物理地址:
内存单元的实际地址,也就是出现在地址总线上的地址。
逻辑地址:
或称分段地址,记作
段地址:
段内偏移地址
段地址表示段在内存中的起始位置,通常被保存在某个段寄存器中。
段内偏移地址表示内存单元相对于段起始位置的位移,简称偏移地址,也叫有效地址EA。
段地址与偏移地址都是16位。
系统采用下列方法将逻辑地址自动转换为20位的物理地址:
物理地址=段地址×16+偏移地址
每个内存单元具有唯一的物理地址,但可由不同的逻辑地址描述。
8086存储器的逻辑地址与物理地址
8086CPU中的每个存储元在存储体中的位置都可以使用实际地址和逻辑地址来表示。
逻辑地址可表示为
段首地址:
偏移地址
CPU访问存储器时,要形成20位的物理地址,即先找到某段,再找到该段内的偏移量。
换句话说,CPU是以物理地址访问存储器的,
三.8086存储器20位物理地址的形成
在8086/8088存储空间中,把16字节的存储空间称作一节(Paragraph)。
为了简化操作,要求各个逻辑段从节的整数边界开始,也就是说段首地址低4位应该是“0”,因此就把段首地址的高16位称为“段基址”,存放在段寄存器DS或CS或SS或ES中,段内的偏移地址存放在IP或SP中。
例如,代码段寄存器CS=2000H,指令指针寄存器存放的是偏移地址IP=2200H,
存储器的物理地址为20000H+2200H=22200H
第三章
8086的寻址方式
第一节概述
一、概念
1、指令:
让计算机完成某种操作的命令。
指令的集合称作指令系统。
指令的符号用规定的英文字母组成称为助记符。
2、语言:
计算机中真正可以处理的只是由“0”“1”组成的二进制代码。
这种指令代码易出错且不易修改,由于依赖于机器,使用极不方便,使人们发明了“指令的助记符”,用几个字母(往往就是其含义的英文单词或缩写)代替某条指令。
如加法用ADD表示,这种符号系统的扩大就是汇编语言,使用汇编语言编程。
优点是运行效率高,可直接对硬件内部进行控制。
缺点是对硬件有更深入的了解,而且编程效率不高,并且与机器的体系结构仍有一定的依赖关系。
3、汇编程序:
由于机器并不能直接识别和运行用汇编程序编制出的程序,必须先转换成对应的机器代码指令,这项工作不用手工完成,仅须交给称为“汇编程序”的软件处理一下,即可得到可以直接运行的程序。
人们将用汇编程序编出的程序称为“源程序”称用汇编程序处理后的程序为“目的程序”。
二、指令的组成
指令的组成
指令由操作码和操作数两部分组成
操作码说明计算机要执行哪种操作,如传送、运算、移位、跳转等操作,它是指令中不可缺少的组成部分用一个唯一的助记符表示(指令功能的英文缩写),对应着机器指令的一个二进制编码
操作数是指令执行的参与者,即各种操作的对象,可以是一个具体的数值,可以是存放数据的寄存器,或指明数据在主存位置的存储器地址
例:
START:
MOVAL,80H;将16进制数80H送入AL
标号是给指令所在地址取的名字
注释本身只用来对指令功能加以说明,给阅读程序带来方便,汇编程序对它不做任何处理。
有些指令不需要操作数,通常的指令都有一个或两个操作数,也有个别指令有3个甚至4个操作数
三、寻址方式
指令系统设计了多种操作数的来源
寻找操作数的过程就是操作数的寻址
操作数采取哪一种寻址方式,会影响机器运行的速度和效率
如何寻址一个操作数对程序设计很重要
第二节8086的机器代码格式
一、8086的机器代码格式
1/2字节
0/1字节
0/1/2字节
0/1/2字节
movax,[BP+0];机器代码是8B4600
前一个字节8B是操作码(含w=1表示字操作)
中间一个字节46(01000110)是“modregr/m”字节
reg=000表示目的操作数为AX
mod=01和r/m=110表示源操作数为[BP+D8]
最后一个字节就是8位位移量〔D8=〕00
二、其他机器代码形式
moval,05;机器代码是B005
前一个字节B0是操作码(含一个操作数AL),后一个字节05是立即数
movax,0102H;机器代码是B80201
前一个字节B8是操作码(含一个操作数AX),后两个字节0201是16位立即数(低字节02在低地址)
三、指令的助记符格式
操作码操作数1,操作数2;注释
操作数2,称为源操作数src,它表示参与指令操作的一个对象
操作数1,称为目的操作数dest,它不仅可以作为指令操作的一个对象,还可以用来存放指令操作的结果
分号后的内容是对指令的解释
传送指令MOV的格式
■MOVdest,src;dest←src
■MOV指令的功能是将源操作数src传送至目的操作数dest,例如:
•MOVAL,05H;AL←05H
•MOVBX,AX;BX←AX
•MOVAX,[SI];AX←DS:
[SI]
•MOVAX,[BP+06H];AX←SS:
[BP+06H]
•MOVAX,[BX+SI];AX←DS:
[BX+SI]
传送指令MOV的功能
第三节立即数寻址方式
一、定义
指令中的操作数直接存放在机器代码中,紧跟在操作码之后(操作数作为指令的一部分存放在操作码之后的主存单元中)
这种操作数被称为立即数imm,它可以是8位数值i8(00H~FFH)
也可以是16位数值i16(0000H~FFFFH),立即数寻址方式常用来给寄存器赋值
二、立即数寻址指令
MOVAL,05H;AL←05H
MOVAX,0102H;AX←0102H
第四节寄存器寻址方式
一、定义
操作数存放在CPU的内部寄存器reg中,可以是:
8位寄存器r8:
AH、AL、BH、BL、CH、CL、DH、DL
16位寄存器r16:
AX、BX、CX、DX、SI、DI、BP、SP
4个段寄存器seg:
CS、DS、SS、ES
二、寄存器寻址指令
MOVAX,1234H;AX←1234H
MOVBX,AX;BX←AX
第五节存储器寻址方式
一、定义及分类
指令中给出操作数的主存地址信息(偏移地址,称之为有效地址EA),而段地址在默认的或用段超越前缀指定的段寄存器中
8086设计了多种存储器寻址方式
•1、直接寻址方式