1、第2章 80 x86计算机系统组织 讲授要点 80 x86计算机的基本结构(CPU、内存、I/O以及连接它们的总线)。80 x86 CPU的寄存器组。实模式的内存分段与编程要点。标志位CF、OF、SF、ZF的含义及判断方法。11/14/20222.1 80 x86计算机的基本结构 80 80 x86x86计算机的组成:计算机的组成:CPU 内存 I/O子系统 各部分以系统总线相连11/14/20222.1.1 CPU 计算机执行程序时,首先要将其装入内存,然后由CPU执行程序指令。CPU的作用:执行算术与逻辑运算。控制指令的执行。通常,将Intel公司生产的8086/8088、80286、80
2、386、80486、Pentium、Pentium Pro、Pentium II、Pentium III、Pentium 4 及其兼容的CPU,统称为80 x86 CPU或x86 CPU,将基于这些CPU的计算机,称为80 x86计算机或x86计算机。11/14/20222.1.2 系统总线 总线是部件之间进行数据(电信号)交换的通道。80 x86计算机的系统总线分为3类:数据总线 地址总线 控制总线1.1.数据总线数据总线 数据总线是用来传递数据的,定义了CPU在每个内存周期所能存取数据的位数。80 x86系列CPU的数据总线为8位、16位、32位或64位。这就是“为什么通常的数据存取是以8
3、位、16位、32位或64位进行的”。数据总线越宽,处理能力越强。具有N位数据总线并不意味着CPU只能处理N位数据。11/14/20222.2.地址总线地址总线 地址总线用来指出数据的地址(内存或I/O)。地址总线的位数决定了最大可编址的内存与I/O空间。对于N位地址总线,CPU可以提供2N个不同地址:02N-1。地址总线由内存与I/O子系统共享使用(I/O只用低16位)。3.3.控制总线控制总线 控制总线用来控制CPU与内存和I/O设备之间的数据传送方式(如传送方向)。11/14/20222.1.3 内存 内存是存放指令和数据的部件,由若干内存单元构成。80 x86的内存以字节编址:每个内存单
4、元有唯一的地址,可存放1个字节。要正确理解内存单元的2个要素:地址(编号)与值(内容)。1个字占据2个相邻的内存单元;低字节在低地址单元,高字节在高地址单元;字的地址由其低地址来表示。双字也类似。同一地址可以看作是字节、字或双字单元的地址,取决于具体的使用方式。11/14/20222.1.4 I/O 子系统 每个I/O设备必须通过专门的I/O接口电路与主机(CPU和内存)相连。I/O端口:即I/O地址,是区分I/O设备及其寄存器的编号。80 x86 的I/O端口为16位。I/O端口类似于内存单元,只是对应于I/O设备。大多数设备使用多个I/O端口(数据端口、状态端口等)。CPU是通过端口与I/
5、O设备通信的。11/14/20222.2 80 x86 CPU的寄存器组 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位。2.专用寄存器专用寄存器 指令指针:EIP(32位
6、)、IP(16位)。IP是EIP的低16位。标志寄存器:EFLAGS(32位)、FLAGS(16位)。FLAGS是EFLAGS的低16位。3.段寄存器段寄存器 6个16位的段寄存器:CS、DS、ES、SS、FS和GS。FS、GS以及所有32位寄存器是从80386 CPU开始引入的。11/14/20222.3 80 x86 CPU的工作模式 2.3.1 80 x86 CPU的3种工作模式 1.1.实模式实模式 与8086兼容的工作模式,只有低20位地址线起作用,仅能寻址第一个1MB的内存空间。MS DOS运行在实模式下。2.2.保护模式保护模式 32位80 x86 CPU的主要工作模式,提供对程
7、序和数据进行安全检查的保护机制。Windows 9x/NT/2000运行在保护模式下。3.3.虚拟虚拟80868086模式模式 在Windows 9x下,若打开一个MS DOS窗口,运行一个DOS应用程序,那么该程序就运行在虚拟8086模式下。11/14/20222.3.2 实模式 1.1.内存分段内存分段 80 x86采用分段内存管理机制,主要包括下列几种类型的段:代码段:用来存放程序的指令序列。数据段:用来存放程序的数据。堆栈段:作为堆栈使用的内存区域,用来存放过程返回地址、过程参数等。一个程序可以拥有多个代码段、多个数据段甚至多个堆栈段。11/14/20222.2.物理地址与逻辑地址物理
8、地址与逻辑地址 物理地址:内存单元的实际地址,也就是出现在地址总线上的地址。逻辑地址:或称分段地址,记作段地址:段内偏移地址 段地址表示段在内存中的起始位置,通常被保存在某个段寄存器中。段内偏移地址表示内存单元相对于段起始位置的位移,简称偏移地址,也叫有效地址EA。段地址与偏移地址都是16位。系统采用下列方法将逻辑地址自动转换为20位的物理地址:物理地址=段地址 16 +偏移地址 每个内存单元具有唯一的物理地址,但可由不同的逻辑地址描述。11/14/20223.3.实模式的编程要点实模式的编程要点 采用16位段,段地址与偏移地址均为16位,即使32位80 x86 CPU(80386及更高)也只
9、能寻址1MB的内存空间。CPU总是从地址CS:IP处取指令,EIP的高16位为0。SS:SP指向堆栈段的栈顶地址,ESP的高16位为0。在32位80 x86 CPU下,程序可以使用32位寄存器和32位操作数,但采用32位寄存器表示偏移地址时,只使用低16位,高16位为0。11/14/20222.4 标志位 2.4.1 状态标志 状态标志通常由CPU根据指令执行结果自动设置,以反映指令执行结果的特征。80 x86 CPU将状态标志作为条件判断的依据,以控制程序的执行流程。最常用的状态标志是CF、OF、SF和ZF,应熟练掌握。11/14/20221.状态标志取值的一般规则状态标志取值的一般规则 Z
10、F(Zero Flag):零标志。若运算结果为0,则ZF=1,否则ZF=0。SF(Sign Flag):符号标志。若运算结果为负数,则SF=1,否则SF=0。CF(Carry Flag):进位标志。若加法时结果最高位向前有进位或减法时最高位向前有借位,则CF=1,否则CF=0。OF(Overflow Flag):溢出标志。若带符号数的运算结果超出了补码表示的范围,则OF=1,否则OF=0。AF(Auxiliary Carry Flag):辅助进位标志。若加法时结果低4位向前有进位或减法时结果低4位向前有借位,则AF=1,否则AF=0。PF(Parity Flag):奇偶标志。若结果最低字节中1
11、的个数为偶数,则PF=1,否则PF=0。11/14/20222.2.深入认识深入认识CFCF和和OFOF CF和OF本质上均表示溢出。CF表示无符号溢出,即运算结果超出了无符号数的表示范围。对于n位二进制数来说,无符号数表示范围为02n-1,例如,n=8和16时分别为0255和065535。OF表示带符号溢出,即运算结果超出了带符号数的表示范围。对于n位二进制数来说,带符号数表示范围为-2n-12n-1-1,例如,n=8和16时,分别为-128127和-3276832767。11/14/20222.4.2 控制标志 控制标志是由程序根据需要用指令来设置的,以控制某些指令的执行方式。控制标志包括
12、:DF(Direction Flag):方向标志IF(Interrupt Flag):中断标志TF(Trace Flag):跟踪标志11/14/2022本章小结 80 x86计算机由CPU、内存和I/O子系统三部分组成,各部分之间由系统总线相连。数据总线决定了CPU每次存取数据的最大宽度(位数);地址总线决定了最大可编址空间;控制总线用来控制CPU与内存和I/O设备之间的数据传送方式。80 x86系统的I/O地址为16位,可寻址65536个不同的I/O端口。80 x86程序可以存取的最小数据单位是字节。例如,若要读取的位数不足8位,则只能先读出一个完整字节,再屏蔽掉其它位。字的存储采取“低字节
13、在低地址,高字节在高地址,字的地址由低地址表示”的小端方式,双字也类似。要正确理解内存单元的地址和值,地址表示位置,值是相应位置处的内容。同一地址既可以看作字节单元地址,也可以看作字甚至双字单元地址,取决于具体的使用方式。11/14/2022 80 x86 CPU具有8位、16位和32位寄存器,主要包括:8位通用寄存器8个:AH、AL、BH、BL、CH、CL、DH、DL。16位通用寄存器8个:AX、BX、CX、DX、SI、DI、BP、SP。32位通用寄存器8个:EAX、EBX、ECX、EDX、ESI、EDI、EBP、ESP。16位段寄存器6个:CS、DS、SS、ES、FS、GS。32位/16位
14、指令指针1个:EIP/IP。32位/16位标志寄存器1个:EFLAGS/FLAGS。其中,32位寄存器是80386 CPU开始引入的。11/14/2022 80 x86 CPU有3种工作模式:实模式、保护模式和虚拟8086模式。在实模式下,段地址和偏移地址均为16位。20位物理地址由16位段地址左移4位加16位偏移地址得到,只能寻址1MB的内存空间,且每段64KB。在实模式下,32位CPU下的程序可以使用32位寄存器和32位操作数,但采用32位寄存器表示偏移地址时,只使用低16位,高16位为0。CS:IP总是指向下一条要执行的指令,EIP的高16位为0。SS:SP指向堆栈段的栈顶,ESP的高16位为0。状态标志是CPU进行条件判断和控制程序执行流程的依据,最常用的是4个:CF、OF、SF和ZF。其中,CF表示无符号溢出,OF表示带符号溢出。11/14/2022