第二章80X86计算机组织.docx
- 文档编号:10536389
- 上传时间:2023-05-26
- 格式:DOCX
- 页数:24
- 大小:164.88KB
第二章80X86计算机组织.docx
《第二章80X86计算机组织.docx》由会员分享,可在线阅读,更多相关《第二章80X86计算机组织.docx(24页珍藏版)》请在冰点文库上搜索。
第二章80X86计算机组织
第二章80X86计算机组织
2.180X86微处理器
80X86是美国Intel公司生产的微处理器系列,从早期的4004芯片到现在的Pentium经历了五个发展阶段。
1978年正式推出8086芯片,开始了Intel的80X86CPU系列芯片。
主频、字长和内存容量是衡量微机性能的主要指标,字长决定了数据总线宽度。
参照表2.1。
从8086到Pentium,这三个指标分别如下:
8086/8088CPU:
主频:
4.77MHZ
数据总线:
8086为16根,字长16位
8088内部字长16位,外部数据线8根
地址总线:
20根,直接寻址220=1M字节
80386,80846CPU:
主频:
80386为12.5~33MHZ
80486为25~100MHZ
数据总线:
32根,字长32位
地址总线:
32根,直接寻址232=4G字节
使用存储管理部件,虚拟地址空间64T字节
80386是一个全32位的微处理器,它的出现象征着微处理器技术向前迈进了新的里程碑。
80486是对80386的改进和发展,内有8KB高速缓存。
PentiumCPU(即80586):
主频:
60~166MHZ
数据总线:
字长32位,外部数据线64根
地址总线:
32根,直接寻址4G字节
8KB指令高速缓存,8KB数据高速缓存
PentiumIICPU:
主频:
233~333MHZ
数据总线:
字长32位,外部数据线64根
地址总线:
36根,直接寻址64G字节
512KB二级高速缓存。
说明:
内存容量的度量单位
1KB=210=1024字节
1MB=210·210=1024×1024字节
1GB=210·210·210=1024×1024×1024字节
1TB=210·210·210·210字节
为适应CPU的高速运行,建立了层次结构的存储器组织,如下图所示:
高速缓存CACHE容量小,速度最高,直接与
CPU交换数据;外存容量大,速度低;内存处于中间。
8086执行一条指令约400ns(毫微秒),80486为25ns,Pentium为12.5ns。
工作模式:
8086:
实模式
80386及其后继微机:
实模式、保护模式
和虚86模式,能实现虚拟存储管理和多任务管理,以提高机器性能。
本课程讲述的是以8086/8088CPU为基础的汇编语言程序设计方法,它与80386,80486及Pentium在实模式下兼容。
2.2基于微处理器的计算机系统构成
计算机系统包括:
硬件和软件二个部分
2.2.1硬件
图2.1计算机结构
主要部件:
(1)中央处理器CPU(CentralProcessingUnit)——由运算器和控制器组成。
运算器——执行所有的算术和逻辑运算指令,负责进行数据运算。
控制器——负责全机的控制工作,执行程序中的指令。
(2)存储器:
指内存储器,又称主存。
存放要执行的程序和参加运算的数据及中间结果。
速度快,容量有限。
构成内存储器的芯片分为RAM和ROM两大类。
RAM:
称随机存取存贮器,CPU可以对它进行读、写操作。
特点:
下电丢失存贮的数据
ROM:
称只读存储器,CPU只能从中读取数据而不能写入。
特点:
下电不会丢失存贮的数据。
一般用途:
存放固定的程序和数据。
(3)I/O子系统:
包括输入/输出设备和大容量外存储器,它们通过接口电路与主机相连。
常用的输入设备:
键盘、鼠标。
常用的输出设备:
显示器、打印机。
外存储器:
用来存放暂不运行又需长期保存的
程序和数据。
如磁盘、磁带、光盘,速度慢,容量大。
主机=CPU+内存储器
内存与外存的关系:
凡是要执行的程序和参加运算的数据都必须先从外存读出传送到内存的某个区域,再由CPU控制执行;程序和数据需要保存的,从内存读出,传送到外存。
系统总线:
在CPU、内存和I/O接口之间相互交换信息的公共通路。
系统总线组成:
数据总线:
传送信息,包括程序、数据、外设的控制信息和外设的状态信息等,双向传送。
地址总线:
传送内存和I/O接口的地址信息,单向传送。
控制总线:
传送控制信号。
总线控制逻辑:
控制系统总线工作。
2.2.2软件
计算机软件分两大类:
系统软件——由计算机生产厂家提供给用户的一组程序,是为了使用和管理计算机。
用户软件——由用户自行编写的各种应用程序。
图2.2计算机软件层次图
操作系统:
系统软件的核心,是用户和计算机的接口。
主要作用:
对系统的硬件、软件资源进行合理的管理,为用户创造方便、有效和可靠的计算机工作环境。
汇编语言程序开发过程中所需要的系统软件:
(1)操作系统——WIN98下MSDOS。
(2)文本编辑程序(EDIT)——用来建立、输入或修改汇编语言源程序文件,并将它存入内存或外存中。
(3)宏汇编程序(MASM)——把由用户编制的汇编语言源程序翻译成机器语言程序。
(4)连接程序(LINK)——把要执行的程序与库文件或其他已经翻译好的子程序连接成一个机器能执行的程序。
(5)调试程序(DEBUG)——系统提供给用户的一种调试工具,能监督、控制用户程序。
系统程序库——指宏指令库,子程序库。
对汇编语言而言,系统不提供,由用户自建。
2.3中央处理机
本节介绍8086/8088CPU的组成,同时从汇编语言程序设计要求出发,了解CPU内部结构及它们的作用。
在实地址模式下,用8086/8088指令系统编写的汇编语言程序,在Pentium机上照样可以运行,所谓向上兼容。
2.3.1中央处理机CPU的组成
8086/8088CPU由三部分组成:
算术逻辑部件ALU、控制逻辑、工作寄存器组。
(1)算术逻辑部件ALU
能直接对8位(字节)或者16位(字)数据进行算术和逻辑运算。
图示结构如下:
*、二个输入端I1、I2:
输入操作数据,可以是一个或者二个。
*、二个输出端O1、O2。
O1:
输出运算结果数据,送到CPU内部总线。
O2:
输出运算结果的状态信息,送到标志寄存器FLAGS(又称程序状态寄存器PSW)
(2)控制逻辑负责对全机的控制工作
(3)工作寄存器组:
存放操作数地址、操作数、运算的结果或中间结果等。
从结构上分析,寄存器组是一个高速存储体,每一个寄存器相当于运算器中的一个存储单元,但存取速度比存储器快得多。
2.3.280X86的寄存器组
程序可见寄存器——该寄存器可由指令指定用于编程
程序不可见寄存器——一般不能用于编程。
图2.3是80X86的程序可见寄存器组
分三大类:
通用寄存器、专用寄存器和段寄存器。
主要介绍8086/8088寄存器组,这是一组16位寄存器。
32位名称
3116150
EAXAHAL
EBXBHBL
ECXCHCL
EDXDHDL
ESPSP
EBPBP
EDIDI
ESISI
3116150
EIPIP
EFLAGSFLAGS
CS
DS
ES
SS
FS
GS
一、通用寄存器
包括AX、BX、CX、DX、BP、SI、DI
1.数据寄存器AX、BX、CX、DX
16位寄存器:
AX、BX、CX、DX
8位寄存器:
AH、AL、BH、BL、CH、CL、DH、DL
16位名称15870
AXAHAL
BXBHBL
CXCHCL
DXDHDL
用途:
暂存运算操作数,运算结果数据或其他信息。
使用形式:
8位和16位寄存器可以单独编程,或者混合编程。
各寄存器专用目的:
AX——累加器,在乘、除法运算及输入输出操作中必须使用。
BX——基址寄存器,存放偏移地址,寻址存储器操作数。
CX——计数器,用于循环指令LOOP,串指令。
DX——数据寄存器,在乘法、除法指令中,与AX结合成双字长,DX存放高位字,此外在输入输出操作中存放I/O端口地址。
2.指针及变址寄存器
SP、BP、SI、DI——全部是16位寄存器。
其中SP是专用寄存器。
用途:
常用于存放数据和偏移地址
SP:
堆栈指针寄存器,存放栈顶偏移地址。
SI:
源变址寄存器
DI:
目的变址寄存器。
SI和DI与DS配合确定数据段中某一存储单元物理地址。
在串操作指令中,SI和DS联用指示源操作数,DI和ES联用,指示目的操作数。
BP:
基址指针寄存器,与堆栈段寄存器SS联用,确定堆栈中某一存储单元地址。
二、专用寄存器
包括IP、SP和FLAGS,这是三个16位寄存器。
IP:
指令指针寄存器,存放代码段中的偏移地址,
IP内容:
始终指向下一条指令的首地址,与CS联用,确定下一条指令物理地址。
IP寄存器重要性:
控制指令序列的执行流程。
使用特点:
不能直接对IP编程。
控制器取出一条指令后,按指令长度递增IP值,使它指向下一条指令首地址。
能改变IP值的指令:
转移指令——无条件转移指令和条件转移指令
子程序调用指令和返回指令
中断指令
FLAGS:
标志寄存器,又称程序状态寄存器PSW,16位。
由9个标志位组成,每一标志位取值“1”或“0”。
图2。
48086/8088的标志寄存器
标志位分三组:
条件码标志:
CF、AF、PF、ZF、SF和OF共6位,它们记录程序中运行结果的状态信息,作为后续条件转移指令的转移条件。
控制标志:
方向标志DF
系统标志:
IF和TF。
条件码标志各位含义如下:
(1)辅助进位标志AF:
这是一个半字节进位标志。
加法运算,第3位向第4位有进位,或减法运算,第3位向第4位有借位,置AF=1;否则AF=0,如下图:
AF用于十进制算术运算调整指令DAA、DAS、AAA和AAS。
(2)进位标志CF:
记录运算时从最高有效位产生的进位值。
例如:
在加法或减法运算时,当结果的最高有效位(字节运算D7位,字运算D15位)产生进位或借位,置CF=1;否则CF=0,如下图:
(3)奇偶标志PF:
运算结果若低8位所含“1”的个数为偶数,则PF=1;否则PF=0。
在数据串行传送中,用PF位检查数据传送的正确性。
(4)零标志ZF:
运算结果为“0”时,ZF=1;否则ZF=0
(5)符号标志SF:
记录运算结果的符号,结果为负SF=1;
否则SF=0。
SF的值就是有符号数的最高位(符号位)
(6)溢出标志OF:
在整数(有符号数)运算中,若运算结果已超出了机器能表示的数值范围,置OF=1;否则OF=0。
对一个有符号数,最高有效位是符号位,长度为n位的有符号数表示范围为:
–2n–1~+2n–1–1。
字节数据(8位):
D7为符号位,
数值范围–27~+27–1,即–128~+127
字数据(16位):
D15为符号位,
数值范围–215~+215–1,即–32768~+32767
如果运算结果超出了这个范围,产生溢出,
OF=1。
在同号数相加或异号数相减运算中,可能产生溢出。
条件码标志状态综合举例:
已知(AX)=5439H
执行ADDAX,456AH
操作:
(AX)←(AX)+456AH
加法的机内运算
0101010000111001
+0100010101101010
1001100110100011
运算结果,各标志位状态:
CF=0D15位无进位
AF=1D3向D4位有进位
PF=1字的低8位有4个“1”,是偶数
ZF=0运算结果是99A3H,非“0”
SF=1D15=1,负数
OF=1二个正数相加,和是负数,和超范围,溢出。
控制标志——方向标志DF
用于串操作指令,控制SI、DI在串指令执行后的修改方向。
若DF=0,每次操作后,SI、DI递增修改;
DF=1,每次操作后,SI、DI递减修改。
指令CLD;操作DF←0
STD;操作DF←1
系统标志:
起控制作用
(1)中断允许标志IF
CPU用IF的状态控制对外部INTR中断是否响应。
若IF=0,系统关中,CPU禁止INTR中断,不响应;
IF=1,系统开中,CPU允许INTR中断,响应.
指令CLI;操作IF←0
STI;操作IF←1
(2)陷井标志TF(或称跟踪标志)
用于程序调试时进行单步方式工作。
若TF=1,每执行一条指令产生一个类型1内部中断,程序暂停供检查。
TF=0,CPU正常工作不产生内部中断。
TF状态没有专门指令设置,要通过执行一段程序实现。
表2.2标志位的符号表示,表中符号是在调试程序DEBUG运行过程中出现的。
例如符号OV——表示OF=1,
NV——表示OF=0
ZR——表示ZF=1,
NZ——表示ZF=0
三、段寄存器
四个16位段寄存器,在8086/8088中存放段地址。
CS:
代码段寄存器,存放代码段段地址。
DS:
数据段寄存器,存放数据段段地址。
ES:
附加段寄存器,存放附加段段地址。
SS:
堆栈段寄存器,存放堆栈段段地址。
2.4存储器
2.4.1存储单元的地址和内容
一、存储器编址方式:
以字节为单位存储信息,每一个字节存储单元给以一个存储器地址,称字节编址结构。
二、存储单元的地址:
无符号二进制数,一般用十
六进制书写。
地址从0开始编号,顺序地每增
加一个单元,地址加1。
一个十六位二进制数表示的地址数为216个,地址范围为0~65535,即存储容量为64K字节。
十六进制的地址表示:
0000,0001,0002,…,0009,…,000E,000F
0010,0011,0012,…,0019,…,001E,001F
0020,0021,0022…,0029,…,001E,001F
┇
FFE0,FFE1,…,FFE9,…,FFEE,FFEF
FFF0,FFF1,…,FFF9,…,FFFE,FFFF
用十六进制数表示的地址范围是0000H~FFFFH
三、数在存储器中的存储格式:
四种数据类型:
如图2.5所示
字节:
8位二进制数,位编号0~7
字:
16位二进制数,位编号0~15
双字:
32位二进制数,位编号0~31
4字:
64位二进制数,位编号0~63
以字节和字数据为例说明数在存储器中的存储格式
1、字节(BYTE):
8位二进制数,占用一个存储器地址,位编号是:
2、字(WORD):
16位二进制数,由2个字节组成,位编号是:
一个字存放在相继的二个存储单元中,占用二个相继的存储器地址,并且低位字节存入低地址中,高位字节存入高地址中,即以相反的次序存入的。
字单元的地址:
用低位字节的地址来表示。
(图2.6)
地址0004H字节单元内容表示成:
(0004H)=34H
地址0004H字单元内容表示成:
(0004H)=1234H
同一地址存储的是字节还是字,由数据定义伪指令指示。
若某字存储在地址X中(X为符号地址名),则占用二个地址x+0,x+1,并且字的LSB存储在低地址x中。
当x值是偶数——对准存储,存取一个字只须一次总线操作。
X值是奇数——非对准存储,存取一个字需执行二次总线操作。
地址与存储内容表示方法:
(X)=Y;地址X中的内容是Y
(Y)=N;地址Y中的内容是N
则可表示成:
(Y)=((X))=N
图2.6中,
字(0004H)=1234H
字(1234H)=2F1EH
∴((0004H))=2F1EH
四、举例
在存储器中存放的数据如下图所示,试读出75422H和75424H字节单元的内容是什么?
读出75422H和75424H字单元内容是什么
字节内容:
(75422H)=9CH
(75424H)=5DH
字内容:
(75422H)=249CH
(75424H)=E65DH
2.4.2实模式存储器寻址
1.存储器地址的分段
分段原因
8086/8088CPU:
机内字长16位
内部寄存器16位,直接寻址216=64K字节,地址范围0000H~FFFFH;
外部地址线20位,直接寻址220=1M字节,
地址范围00000H~FFFFFH。
采用分段方法解决16位字长机器提供20位地址。
将1M字节内存空间分段使用,每段最长64K
字节。
分段约定
段起始地址必须从任意一小段(Paragraph)的首地址开始,是16的整数倍(即20位地址的最低4位为0000)。
规定;从0地址开始,每16个字节为一小段
段内地址:
用16位表示。
下列为1M字节地址空间内64K个小段的地址区间,每行为一小段:
00000,00001,00002,……,0000E,0000F
00010,00011,00012,……,0001E,0001F
41230,41231,41232,……,4123E,4123F
41240,41241,41242,……,4124E,4124F
FFFE0,FFFE1,FFFE2,……,FFFEE,FFFEF
FFFF0,FFFF1,FFFF2,……,FFFFE,FFFFF
第一列00000H,00010H,……,FFFF0H是每小段首地址,都可以作为段起始地址。
段的划分由CPU内部4个16位段寄存器指定,每个段寄存器存放段地址,确定一个段的起始地址。
段寄存器及其段中存放内容:
CS代码段——存放当前正在运行的程序
DS数据段——存放当前运行程序所用的数据
SS堆栈段——程序堆栈区,栈中的数据按后进先出访问
ES附加段——附加的数据段。
存储器物理地址形成规则:
物理地址:
每一个存储单元一个唯一的20位地址。
物理地址由二部分组成:
段地址,偏移地址。
段地址:
16位,存放在段寄存器中。
偏移地址:
指在段内相对于段起始地址的偏移值。
物理地址形成规则:
物理地址=段地址×16+偏移地址。
如图:
或者:
物理地址=段地址左移4位+偏移地址
例1:
某数据存放在(DS)=8561H和(DI)=3742H的数据段的存储单元中,此存储单元的物理地址为:
(DS)×16+(DI)=85610H+3742H=88D52H
例2:
某数据存放在(ES)=7A62H,
(SI)=E732H的附加段的存储单元中,
此存储单元的物理地址为:
(ES)×16+(SI)=7A620H+E732H=88D52H
说明:
每一个存储单元只有唯一的一个物理地址,它可以由不同的段地址和不同的偏移地址组成。
例3:
程序调试时,某指令物理地址显示格式是0150∶0F10,该指令的存放地址是多少?
这是用DEBUG调试程序时,物理地址的屏幕显示格式。
题中:
0150∶0F10,都是十六进制数
段地址偏移地址
本题(CS)=0150H,(IP)=0F10H
指令物理地址:
(CS)×16+(IP)=01500H+0F10H=02410H
段区的分配
段区的分配由操作系统完成,每段可以独立地占用64K字节存储区,各段也可以重叠或部分重叠。
例:
图2.9段分配方式之一
每段长64K字节,段内偏移地址范围0000H~FFFFH每段物理地址范围是:
代码段:
01500H~114FFH
堆栈段:
1CD00H~2CCFFH
数据段:
42000H~51FFFH
附加段:
B0000H~BFFFFH
段之间存在一定的空隙单元。
在实际使用中,每段长不一定64K字节,段区大小根据实际需要来分配。
例2.1:
图2.10段分配之二
已知
(CS)=0200H,
程序长8K(2000H)字节
(DS)=0400H,
数据2K(800H)字节
(SS)=0480H,
256个字节堆栈
按照每段长度,计算出每段物理地址范围:
代码段:
02000H~03FFFH
数据段:
04000H~047FFH
堆栈段:
04800H~048FFH
每段结束后,第一个小段的首地址成为下一段的起始地址,段之间不存在空隙单元。
段的定位使用伪指令设定,由操作系统分配。
说明:
(1)当程序中的代码,数据超过64K字节时,程序中可以设定多个代码段,多个数据段。
(2)在程序运行工作中,同时工作的只有4个段,它们的段值在CS、DS、ES和SS中。
在程序运行过程中,使用伪指令和机器指令动态地修改段寄存器的内容。
在80X86中,段寄存器和与其对应存放偏移地址的寄存器之间有一种默认组合关系,见表2.3。
在8086/8088中,这种对应关系如下:
段偏移
CSIP
SSSP或BP
DSBX、SI、DI或一个16位数
ESDI(用于串指令)
可见:
代码段中,指令物理地址计算式是:
(CS)×16+(IP)
堆栈段中,栈顶数据物理地址计算式是:
(SS)×16+(SP)
存放在数据段、附加段或堆栈段中数据的物理地址计算有寻址方式决定。
2.5外部设备
I/0接口:
位于主机与外部设备之间。
主机与外部设备的通信是通过接口进行的。
接口中的寄存器:
1、数据寄存器——存放外设和主机之间传送的数据,起缓冲作用。
2、状态寄存器——保存外设或接口的状态信息,供CPU查询。
3、命令寄存器——保存CPU发出的控制命令,然后传送给外设。
每个外设通过接口与主机相连,接口中上述寄存器的数量取决于不同类型的接口电路。
具体内容在《微机及接口》课程中介绍。
输入/输出寻址方式:
采用专门的I/0指令寻址,接口中的每个寄存器给予一个端口地址。
该地址空间采用16位地址总线,与内存储器地址空间无关。
I/O端口地址范围:
0000H~FFFFH,共64K个端口地址。
在汇编语言程序设计中,使用系统提供的二类例行程序对外设编程:
(1)BIOS:
固化在ROM中,作为机器硬件组成的一部分,层次低。
(2)DOS系统功能调用:
由操作系统提供,层次高。
在DOS系统功能调用中包含了对BIOS的调用。
BIOS和DOS系统功能调用都是系统编制的子程序,通过中断方式转入所需的子程序去执行,执行完后返回原来的程序继续执行。
本教材第八章讨论输入/输出程序设计,第九章讨论BIOS和DOS中断,第十章、第十一章是主要外设典型应用程序。
本章小结
通过本章学习要求掌握以下几点:
1、计算机系统组成的基本概念和基本组成部分,一般了解当前微机的发展情况,用汇编语言程序开发软件的硬件和软件环境。
2、存储单元编址方式;字、字节在存储器中的存储格式,实模式存储器分段和物理地址形成规则。
3、8086/8088CPU内部三类寄存器名称、字长、功能和用法。
FLAGS寄存器中,条件码标志的含义,控制标志含义。
4、一般了解外部设备和接口。
在汇编语言程序设计中,调用BIOS和DOS
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第二章 80X86计算机组织 第二 80 X86 计算机 组织
![提示](https://static.bingdoc.com/images/bang_tan.gif)