《微机原理与单片机应用课件:第4章1-2 8086(8088)微处理器》由会员分享,可在线阅读,更多相关《微机原理与单片机应用课件:第4章1-2 8086(8088)微处理器(41页珍藏版)》请在金锄头文库上搜索。
1、第四章 16位微处理器4.1 16位微处理器概述 计算机发展至今已经历了四代,第四代是大规计算机发展至今已经历了四代,第四代是大规模集成电路发展后的产物,由于微电子技术的发展,模集成电路发展后的产物,由于微电子技术的发展,已使得结构复杂,功能强大的计算机中央处理器已使得结构复杂,功能强大的计算机中央处理器CPU集成在一个芯片上,构成了所谓的微处理器集成在一个芯片上,构成了所谓的微处理器MPU 4004/800880808088/80868038680486PentiumCore Duo80186/802864.2.1 8086/8088 CPU的结构8086 CPU从功能上可分为两部分:总线接
2、口部件(bus interface unit, BIU)执行部件(execution unit, EU)4.2 8086/8088微处理器AH ALBH BLCH CLDH DL SP BP DI SI通通用用寄寄存存器器运算寄存器运算寄存器ALU标志寄存器标志寄存器EU控制系统控制系统1 2 3 4 5 6 CS DS SS ES IP内部寄存器内部寄存器总线总线控制控制逻辑逻辑地址加地址加法器法器20位地址总线位地址总线16位数据总线位数据总线8位位指令队列缓冲器指令队列缓冲器外外部部总总线线执行单元执行单元(EU)总线接口单元总线接口单元(BIU)8086CPU8086CPU结构图结构图
3、AXBXCXDX16位位专专用用寄寄存存器器内部总线4 4.2.1 .2.1 执行单元执行单元 EUEU 功能:负责指令的执行。功能:负责指令的执行。(1)从指令队列中取出指令。)从指令队列中取出指令。(2)对指令进行译码,发出相应的控制信号。)对指令进行译码,发出相应的控制信号。(3)接收由总线接口单元送来的数据或发送数据至接口。)接收由总线接口单元送来的数据或发送数据至接口。(4)利用内部寄存器和)利用内部寄存器和ALU进行数据处理。进行数据处理。4 4.2.1 .2.1 总线接口单元总线接口单元 BIUBIU 功能:功能: 负责负责CPUCPU与存储器、与存储器、I/OI/O端端口之间的
4、数据传送。口之间的数据传送。(1 1)取指令送到指令队列。)取指令送到指令队列。(2 2)CPUCPU执行指令时,到指定的位置取数据,并将其送至指令执行指令时,到指定的位置取数据,并将其送至指令 要求的位置单元中。要求的位置单元中。指令队列缓冲器:在执行指令的同时,从内存中取下一条或者下几条指令,并放入指令队列缓冲器中。CPU执行完一条指令后,可以立即执行下一条指令(流水线技术),而无需轮番取指令和执行指令,从而提高CPU效率。每当8086的指令队列中有2个空字节,8088指令队列中有1个空字节时,总线接口单元就会自动取指令至队列中。 当队列已满,执行单元又不使用总线时,总线接口单元进入空闲状
5、态。 执行转移指令、调用指令、返回指令时,先清空队列内容,再将要执行的指令放入队列中。4.2.2 8086/8088的寄存器的寄存器2 2个控制寄存器:个控制寄存器: IP, FIP, F(或(或FRFR)4 4个段寄存器:个段寄存器:CS, DS, SS, ESCS, DS, SS, ES8 8个通用寄存器:个通用寄存器:AXAX,BXBX,CXCX,DX, DX, SP,BP,SI,DISP,BP,SI,DI(1616位位 )AHALBHBLCHCLDHDLSPBPSIDIIPF或FRCSDSSSESAXBXCXDX累加器(accumulator)基址寄存器(base register)计
6、数寄存器(count register)数据寄存器(data register)堆栈指示器(stack point)基址指示器(base point)源变址寄存器(source index)目的变址寄存器(destination index)代码段寄存器(code segment)数据段寄存器(data segment)堆栈段寄存器(stack segment)附加段寄存器(extra segment)指令指示器(instruction point)状态标志寄存器(status flags)寄存器专门用途AX,AL在乘法、除法指令中,作累加器;在输入、输出指令中,作数据寄存器AH在非压缩BCD
7、数调整指令中,作目的寄存器;在LAHF(SAHF)指令中,作目的(源)寄存器AL在BCD数运算指令和调整指令中,作累加器;在XLAT指令中,作数据表的位移量BX作间址和基址寄存器CX在循环控制指令和串操作指令中,作计数器CL在移位指令中,作移位位数计数器DX在输入、输出指令中,作间址寄存器;在乘法、除法指令中,作辅助累加器BP作间址和基址寄存器SP作堆栈指示器SI作间址和变址寄存器;在串操作指令中,作源字符串的间址或变址寄存器DI作间址和变址寄存器;在串操作指令中,作目的字符串的间址或变址寄存器OUT DX,ALMOV AX,3456HADD AL,AHDAAMOV AL, 200MOV BL
8、, 4MUL BLMOV CX,10L1:LOOP L1MOV AX, 1234hPUSH AXPOP DX 关于标志寄存器F(或FR) 标志寄存器的格式及各位的含义标志寄存器的格式及各位的含义1514131211109876543210OF DF IF TF SF ZFAFPFCF状态标志方向标志中断标志跟踪标志Trace Flag控制标志进位标志奇偶标志半进位标志零标志符号标志溢出标志n状态标志:表示前面的操作执行后,算术逻辑部件处于怎样一种状态。例如,是否产生了进位,是否发生了溢出等等。程序中,可以通过对某个状态标志的测试,决定后面的走向及操作。(1) 状态标志:例如: STATE: I
9、N AL, 0DAH; TEST AL,02H; JZ STATE零标志ZF(Zero Flag)若运算结果为0,则ZF1;否则ZF0。这两条指令执行后,ZF1。例1:MOV AL,4 SUB AL,4例2:XOR AX,AX 执行后,ZF也一定为1。进位标志CF(Carry Flag)它反映:加法时,最高位(字节操作时的D7位,字操作时的D15位)是否有进位产生。减法时,最高位(字节操作时的D7位,字操作时的D15位)是否有借位产生。例:(AH)=10000001(AL)=10000000执行:ADDAL,AH10000001+)10000000100000001CF=1奇偶标志PF(Par
10、ity Flag)若运算结果低8位中“1”的个数为偶数,则PF1;否则PF0。n例:MOV AL,2n ADD AL,1 ; 00000011n 执行后,PF位为1辅助进位AF(AUXILIARYCARRYFLAG)反映8位量的低四位(或16位量的低位字节)向高位有无进位(借位)情况,有则AF=1,无则AF=0。AF位一般用于BCD运算例:10011001或1001000100011011+)00101010+)0110001000100001110000111111001100111100有进位AF=1无进位AF=0符号标志SF(SIGNFLAG)反映带符号数运算结果的符号位情况,当数据用补
11、码表示时,运算结果最高位为0表示正数,最高位为1表示负数SF与运算结果的最高位相同,刚好可以用来表示该数的正负SF=1负数SF=0正数 溢出标志OF(overflowflag)主要用来反映带符号数运算是否超过机器能表示的数值范围,超过OF=1带符号数(补码表示负数)00000000-01111111(0-+127)10000000-111111111(-128-1)即一个字节带符号数表示范围为-128127同样,二个字节带符号表示为-3276832767溢出标志OF(overflowflag)例:00011010(1AH=26)+)01010110(56H=86)01110000(70H=11
12、2)CF=0:这两个数如作为无符号数相加,则没有进位(不超过255)OF=0:如作为带符号数相加,也没有溢出(26+86=112均没有超过)为什么?溢出标志OF(overflowflag)例:01011010(5AH=90)+)01010110(56H=86)10110000(B0=176) 把该两数作无符号数看,则两数相加正好无进位 CF=0若把该两数当作带符号数,则两数相加,无法再用位二进制带符号数表示(-128127),则肯定要溢出从计算结果也可以看出,两个正数相加,结果得一负数,(B0H=-80)则结果肯定溢出了(不正确)超出一个字节表示的范围 OF=1如何知道?(2)控制计算机CPU
13、的标志 方 向 标 志 DF( DIRECTIONFLAG)在作字符串操作(例如使用MOVSB指令)时,每执行一条操作指令,源、目的地址会自动调整n当DF设为=0时(用CLD指令)串操作过程地址会不断增加n当DF设为=1时(用STD指令)串操作过程地址会不断减少(2)控制计算机CPU的标志 中断允许标志IF(InterruptenableFlag)用于设置系统是否允许响应外部的可屏蔽中断。nIF=1表示允许响应,用STI指令nIF=0表示不允许,用CLI指令(2)控制计算机CPU的标志跟踪标志TF(陷阱标志)TRAPFALGnTF=1时,微处理每执行完一条指令便会自动产生一个内部中断,转去执行
14、一个内部中断服务子程序,用来检查每条指令的执行情况,称为“单步执行”方式,常用于程序的调试。nTF=0时,CPU正常执行程序。标志寄存器F(FR)标志寄存器的格式及各位的含义标志寄存器的格式及各位的含义1514131211109876543210OFDFIFTFSFZFAFPFCF状态标志方向标志中断标志跟踪标志Trace Flag控制标志进位标志奇偶标志半进位标志零标志符号标志溢出标志关于段寄存器为什么需要段寄存器?它与8086/8088的存储结构有关AH ALBH BLCH CLDH DL SP BP DI SI通通用用寄寄存存器器运算寄存器运算寄存器ALU标志寄存器标志寄存器EU控制系统
15、控制系统1 2 3 4 5 6 CS DS SS ES IP内部寄存器内部寄存器总线总线控制控制逻辑逻辑地址加地址加法器法器20位地址总线位地址总线16位数据总线位数据总线8位位指令队列缓冲器指令队列缓冲器外外部部总总线线执行单元执行单元(EU)总线接口单元总线接口单元(BIU)8086CPU8086CPU结构图结构图AXBXCXDX16位位专专用用寄寄存存器器内部总线16位代码段寄存器16位数据段寄存器16位堆栈段寄存器16位指令寄存器IP20位的地址加法器16位附加段寄存器关于关于 8088与与8086的区别的区别 8086和8088本质上是相同的,其内部采用16位结构。两者EU完全一样,
16、BIU略有不同:8086指令队列指令队列6字节,字节,8088指令队列指令队列4字节字节8086是是真真正正的的16位位CPU,内内部部数数据据总总线线是是16位位的的,同同BIU相连的外部数据总线也是相连的外部数据总线也是16位位8088是是准准16 位位CPU,内内部部数数据据总总线线是是16位位的的。同同BIU相相连连的的外外部部数数据据总总线线却却是是8位位的的,在在处处理理一一个个外外部部16位数据时,位数据时,8088需要两步操作而需要两步操作而8086只需要一步。只需要一步。8086和和8088 CPU的的内内部部都都采采用用16位位字字进进行行操操作作及及存存储储寻寻址址,两两
17、者者软软件件完完全全兼兼容容,程程序序执执行行也也完完全全相相同同。然然而而,由由于于8088要要比比8086有有较较多多的的外外部部存存取取操操作作,所所以,对相同的程序,它执行得较慢。以,对相同的程序,它执行得较慢。IBM Portable PC 5155Model:model 68Introduced:February 1984Price:US $4225.Weight:30 poundsCPU:Intel 8088 4.77MHzRAM:256K, 640K maxDisplay:9-inch amber displayCGA graphics, 80 X 25 textStorage
18、:Two 360KB 5.25-inch disk drivesPorts:1 parallel, 1 serial, CGA videoOS:IBM PC-DOS Version 2.10 (disk) 第一台个人电脑数据与指令的存储与访问地址地址内内 容容0(00H)00000100B(4)1(01H)10000000B(128)2(02H)00010001B(17) 255(FFH)00001111B (15) 地址是数地址是数地址是数地址是数据存放的据存放的据存放的据存放的门牌号码门牌号码门牌号码门牌号码, ,是标明数是标明数是标明数是标明数据所在位据所在位据所在位据所在位置的唯一置的
19、唯一置的唯一置的唯一代号代号代号代号每个地每个地每个地每个地址空间址空间址空间址空间可以存可以存可以存可以存放放放放8 8位二位二位二位二进制数进制数进制数进制数内存示意图内存示意图所有所有所有所有CPUCPU可以访问的数可以访问的数可以访问的数可以访问的数据与指令都以二进制数据与指令都以二进制数据与指令都以二进制数据与指令都以二进制数的形式存放在内存中的形式存放在内存中的形式存放在内存中的形式存放在内存中4 4.2.3 .2.3 存储器结构存储器结构4 4.2.3 .2.3 存储器结构存储器结构 由于由于8086/80888086/8088有有2020条地址线,可以寻址条地址线,可以寻址2
20、22020(1M1M)字节,)字节,CPUCPU送到地址总线(送到地址总线(ABAB)上的)上的2020位的地址称为位的地址称为物理地址。物理地址。 物理地址.60000H60001H60002H60003H60004H.12HF0H1BH08H 存储器的操作完全存储器的操作完全存储器的操作完全存储器的操作完全基于物理地址。基于物理地址。基于物理地址。基于物理地址。问题:问题:问题:问题:8086/80888086/80888086/80888086/8088的内部总线和的内部总线和的内部总线和的内部总线和内部寄存器均为内部寄存器均为内部寄存器均为内部寄存器均为16161616位,位,位,位,
21、如何寻找如何寻找如何寻找如何寻找20202020位地址?位地址?位地址?位地址?FFH解决方法:解决方法:解决方法:解决方法:存储器分段并辅以地址偏移量存储器分段并辅以地址偏移量4 4.2.3 .2.3 存储器结构存储器结构 8086/8088CPU8086/8088CPU把把1M1M字节的存储器空间划分为任字节的存储器空间划分为任意的一些存储段,一个存储段是存储器中可独立寻意的一些存储段,一个存储段是存储器中可独立寻址的一个逻辑单位,也称址的一个逻辑单位,也称逻辑段逻辑段,每个段的容量小,每个段的容量小于等于于等于64K64K字节。字节。每段起始地址规定最低每段起始地址规定最低4 4位为位为
22、0 0。高地址高地址高地址高地址段基址段基址段基址段基址段基址段基址段基址段基址段基址段基址段基址段基址段基址段基址段基址段基址最大最大最大最大64KB64KB,最小,最小,最小,最小16B16Bi-1i-1i-1i-1段段段段i i i i段段段段i+1i+1i+1i+1段段段段各段之间可以相互独各段之间可以相互独各段之间可以相互独各段之间可以相互独立,相互重叠,甚至立,相互重叠,甚至立,相互重叠,甚至立,相互重叠,甚至相互重合相互重合相互重合相互重合1、8086最少和最多可以分为多少个段?2、下列地址哪些可能是一个段的开始地址:134546H,67828H,1FF30H4 4.2.3 .2
23、.3 存储器结构存储器结构0150H4200H1CD0HB000H64KB代码代码64KB数据数据64KB附加附加64KB堆栈堆栈各段独立的分配方式举例各段独立的分配方式举例各段独立的分配方式举例各段独立的分配方式举例CSDSSSES段寄存器段寄存器存储器存储器01500H114FFH1CD00H2CCFFH42000H51FFFHB0000HBFFFFH0200H0400H0480HCSCSDSDSSSSSESES段寄存器段寄存器段寄存器段寄存器存储器存储器存储器存储器04000H04000H04800H04800H 段重叠的分配方式举例段重叠的分配方式举例02000H段地址段地址段所在位置
24、段所在位置CS0200H02000H-11FFFHDS0400H04000H-13FFFHSS0480H04800H-147FFH4 4.2.3 .2.3 存储器结构存储器结构 8086 8086 8086 8086存储器中的每个存储单元都可以用两个形式的地存储器中的每个存储单元都可以用两个形式的地存储器中的每个存储单元都可以用两个形式的地存储器中的每个存储单元都可以用两个形式的地址来表示:址来表示:址来表示:址来表示: 物理地址物理地址物理地址物理地址: : : : 用唯一的用唯一的用唯一的用唯一的20202020位二进制数所表示的地址,规定位二进制数所表示的地址,规定位二进制数所表示的地址
25、,规定位二进制数所表示的地址,规定了了了了1M1M1M1M字节存储空间中某个字节的地址字节存储空间中某个字节的地址字节存储空间中某个字节的地址字节存储空间中某个字节的地址 。 逻辑地址逻辑地址逻辑地址逻辑地址: : : : 在程序中使用,即在程序中使用,即在程序中使用,即在程序中使用,即: : : : 段基址:偏移地址段基址:偏移地址 。4 4.2.3 .2.3 存储器结构存储器结构 8086CPU8086CPU中有四个段地址寄存器:中有四个段地址寄存器:CSCS,DSDS,SSSS和和ESES,这四,这四个段地址寄存器存放了个段地址寄存器存放了CPUCPU当前可以寻址的四个段的基址,即当前可
26、以寻址的四个段的基址,即可以从这四个段寄存器规定的逻辑段中存取指令代码和数据。可以从这四个段寄存器规定的逻辑段中存取指令代码和数据。一旦这四个段寄存器的内容被设定,就规定了一旦这四个段寄存器的内容被设定,就规定了CPUCPU当前可寻址当前可寻址的段。的段。 段基址:段基址:段基址:段基址:段寄存器的段寄存器的段寄存器的段寄存器的1616位地址,它们决定了各段在内存中的位位地址,它们决定了各段在内存中的位位地址,它们决定了各段在内存中的位位地址,它们决定了各段在内存中的位置。置。置。置。偏移地址:偏移地址:偏移地址:偏移地址:每个段最多有每个段最多有每个段最多有每个段最多有6464KK个存储单元
27、,要区分这个存储单元,要区分这个存储单元,要区分这个存储单元,要区分这6464KK个单个单个单个单元就要使用元就要使用元就要使用元就要使用1616位段内偏移地址。位段内偏移地址。位段内偏移地址。位段内偏移地址。64K2 164 4.2.3 .2.3 存储器结构存储器结构物理地址物理地址物理地址物理地址由两部分组成:由两部分组成:由两部分组成:由两部分组成:段基址段基址段基址段基址和和和和偏移地址偏移地址偏移地址偏移地址。 8086/8088CPU 8086/8088CPU 8086/8088CPU 8086/8088CPU中有一个地址加法器,它将段寄存器提供中有一个地址加法器,它将段寄存器提供
28、中有一个地址加法器,它将段寄存器提供中有一个地址加法器,它将段寄存器提供的段基址乘以的段基址乘以的段基址乘以的段基址乘以16161616,即左移,即左移,即左移,即左移4 4 4 4位,然后与位,然后与位,然后与位,然后与16161616位的偏移地址相加,位的偏移地址相加,位的偏移地址相加,位的偏移地址相加,并锁存在物理地址锁存器中。如图所示。并锁存在物理地址锁存器中。如图所示。并锁存在物理地址锁存器中。如图所示。并锁存在物理地址锁存器中。如图所示。物理地址物理地址物理地址物理地址 = = = = 段基址段基址段基址段基址 * * * * 16 + 16 + 16 + 16 + 偏移地址偏移地
29、址偏移地址偏移地址段寄存器值段寄存器值偏移量偏移量+物理地址物理地址16位位4位位16位位20位位存储器物理地址的计算方法存储器物理地址的计算方法段基址:段基址:段基址:段基址:CSCS、DSDS、ESES、 SSSS。偏移地址:偏移地址:偏移地址:偏移地址:IPIP、DIDI、SISI、 BP BP、SPSP等。等。等。等。4 4.2.3 .2.3 存储器结构存储器结构存储器寻址方式偏移地址偏移地址段基址段基址000015 0+段基址段基址存储器存储器所选存储单元所选存储单元物理地址物理地址15 019 0地址加法器地址加法器偏移地址偏移地址偏移地址偏移地址4 4.2.3 .2.3 存储器结
30、构存储器结构60002H00H12H60000H偏移地址=0002H逻辑地址逻辑地址: 段基址段基址和和段内段内偏移地址偏移地址组成。组成。 格式为格式为:段基址段基址:偏移地址偏移地址 6000H:0002H4 4.2.3 .2.3 存储器结构存储器结构习题:习题:已知已知CS=1055HCS=1055H,DS=250AHDS=250AH,ES=2EF0HES=2EF0H,SS=8FF0HSS=8FF0H,各,各段的容量均为段的容量均为64K64K,DSDS段有一操作数,其偏移地址段有一操作数,其偏移地址=0204=0204H H,1)1)画出各段在内存中的分布;画出各段在内存中的分布;2)
31、2)在图中指出各段首地址;在图中指出各段首地址;3)3)求操作数的物理地址。求操作数的物理地址。10550H250A0H2EF00H8FF00HCSSS CSDSES解:解:解:解:各段分布及段首址见右图所示。各段分布及段首址见右图所示。各段分布及段首址见右图所示。各段分布及段首址见右图所示。操作数的物理地址为:操作数的物理地址为:操作数的物理地址为:操作数的物理地址为:250250AHAH 16 + 0204H = 252A4H16 + 0204H = 252A4H00000H00000HFFFFFHFFFFFH CS 0000 IP代码段代码段 DS或或ES 0000 SI、DI SS 0000 SP数据段数据段附加段附加段堆栈段堆栈段段寄存器和偏移地址寄存器组合关系段寄存器和偏移地址寄存器组合关系4.2.3 存储器结构段寄存器与偏移量寄存器的组合和替换作业4.1 、4.2、4.3、4.4