济南专业网站设计公司,wordpress正文标题样式,网站建设服务器的搭建方式,门户网站建设jz190目录
一、8088/8086的功能结构
1.总线接口部件#xff08;BIU#xff09;
2.执行部件#xff08;EU#xff09;
二、8088/8086的寄存器结构#xff08;14个#xff09;
溢出标志的概念
溢出和进位的区别 8086CPU是Intel系列的16位微处理器#xff0c;他有16根数据…目录
一、8088/8086的功能结构
1.总线接口部件BIU
2.执行部件EU
二、8088/8086的寄存器结构14个
溢出标志的概念
溢出和进位的区别 8086CPU是Intel系列的16位微处理器他有16根数据线和20根地址线所以可寻址的地址空间是2^20 1MB 8088CPU是准16位微处理器有20根地址线它的内部寄存器、内部运算部件以及内部操作都是按16位设计的但对外的数据总线只有8位在处理一个16位数据时8088需要两步操作因而称8088是准十六位微处理器。继8086之后推出 8088一次只能拉一个字节八位数据线而8086既可以拉一个字节也可以拉两个字节并行拉。 一、8088/8086的功能结构 8088/8086CPU的内部结构从功能上分成两个单元。如图 总线接口单元BIU(Bus Interface Unit) 执行单元EUExecution Unit 二个单元协同工作 流水线技术两个功能部件并行工作减少CPU为取指令而等待的时间提高CPU的利用率和系统运行速度。 88/86两个单元的功能 1.总线接口部件BIU 1功能 从内存取指令送到指令队列CPU执行指令时总线接口部件BIU要配合执行部件EU从指定的内存单元或者外设端口取数据或将数据送到指定的内存单元或者外设的端口。 2组成 4个段地址寄存器 CS16位代码段寄存器DS16位数据段寄存器ES16位附加段寄存器SS16位堆栈段寄存器 16位指令指针寄存器IP20位的地址加法器4/6字节的指令队列缓冲器8086为6个8088是4个I/O总线控制电路 38086/8088的BIU指令队列和20位地址加法器的作用 指令队列缓冲器 8086的指令队列缓冲器为6个字节8088的指令队列缓冲器为4个字节。无论8086还是8088.都会在执行指令的同时从内存中取下一条指令或者几条指令取来的指令就放在指令队列缓冲器中。这样一般情况下CPU执行完一条指令就可以立即执行下一条指令称为流水线技术减少了CPU为取指令而等待的时间从而提高了CPU的效率。 采用“先进先出”的原则减少了CPU为取指令而等待的时间降低了对存储器存取速度的要求。 BIU从存储器中读出指令送入指令队列一旦指令队列中空出2个字节BIU将自动进行读指令的操作以将填满指令队列只要收到EU送来的操作数地址BIU将立即形成这个操作数的物理地址完成读/写操作。遇到转移类指令BIU将指令队列中剩余的指令作废重新从存储器新的单元地址取指令并送入指令队列。 地址加法器用来产生20位地址。上面已提到8086可用20位地址寻址1MB的内存空间但8086内部所有的寄存器都是16位的所以需要一个附加的机构来根据16位寄存器提供的信息计算出20位的物理地址这个机构就是20位的地址加法器。 2.执行部件EU 1功能 从指令队列中取出指令 对指令进行译码发出相应的传送数据或算数运算的控制信号 接收由总线接口部件传送来的数据或把数据传送到总线接口部件进行算数运算 2组成 4个通用寄存器AX,BX,CX,DX。 4个通用寄存器既可以作为16位寄存器用也可以作为8位寄存器用。分别为AH,AL,BH,BL,CH,CL,DH,DL。其中AX寄存器又称为累加器8086指令系统中有许多指令通过累加器的动作来执行,AX为16位累加器AL为8位累加器。 4个专用寄存器BP、SP、SI、DI 基质指针寄存器BP堆栈指针寄存器SP源变址寄存器SI目的变址寄存器DI 标志寄存器FR 标志寄存器共有16位就用了9位其中7位未用。其中6个标志位反映CPU指令运行后的运行状态信息分别为SF、ZF、PF、CF、AF、OF。这些标志位用于根据指令执行后的操作结果进行判断转移。3个控制标志分别为DF、IF和TF。控制标志可由编程员通过指令进行设置有专门的指令对控制标志置0或置1。 算数逻辑单元ALU它是16位的运算器可用于8位或16位二进制算术和逻辑运算也可按指令的寻址方式计算寻址存储器所需的16位偏移量。 数据暂存寄存器它协助ALU完成运算暂存参加运算的数据。 EU控制电路从总线接口的指令队列取出指令操作码通过译码电路分析发出相应的控制命令控制ALU数据总线送到相应的寄存器。同时标志寄存器PSW根据运算结果改变状态。 8088/8086两个单元的协同功能 1.BIU总线接口单元负责CPU对主存和外设接口进行访问取、送 1从内存取指令送指令队列 4从内存或I/O接口取操作数 7从BIU送结果送到内存/外存 2.EU执行部件负责指令的译码、执行和数据的运算 2从指令队列取指令送控制器分析、译码。 3在运算器处理加工 5操作数送ALU在ALU处理 6送结果到BIU 二、8088/8086的寄存器结构14个 8088/8086微处理器包含8个通用寄存器4个通用数据寄存器、4个指针和变址寄存器、1个指令指针寄存器、4个段寄存器和1个标志寄存器。 1.通用寄存器 88/86有8个通用的16位寄存器在EU。 数据寄存器AX、BX、CX、DX变址寄存器SI、DI指针寄存器SP、BP 1数据寄存器 通用数据寄存器包括4个16位的寄存器AX、BX、CX、DX他们即可以作为16位寄存器使用也可以分为两个8位寄存器使用即高8位寄存器AH、BH、CH、DX的低8位寄存器AL、BL、CL、DL。这些寄存器既可以作为算术、逻辑运算的源操作数向ALU提供参与运算的原始数据也可以作为目标操作数保存运算的中间结果或最后结果。 【注意】8086/8088CPU的14个寄存器中除了这4个16位寄存器能分别当作两个8位寄存器来用之外其他寄存器都不能这样使用。 AX累加器Accumulator用该寄存器存放运算结果可提高指令的执行速度。此外所有的I/O指令都使用该寄存器与外设端口交换信息。BX基址寄存器Base address Register8086/8088CPU中有两个基址寄存器BX和BP。BX用来存放操作数在内存中数据段内的偏移地址BP用来存放操作数在堆栈段内的偏移地址。CX计数寄存器Counter在设计循环程序时使用该寄存器存放循环次数可使程序指令简化有利于提高程序的运行速度。DX数据寄存器Data register在寄存器间接寻址的I/O指令中存放I/O端口地址在做双字长乘除法运算时DX与AX一起存放一个双字长操作数其中DX存放高16位数。 2指针及变址寄存器 指针及变址寄存器分为两个指针寄存器SPstack pointer、BPbase pointer和两个变址寄存器SIsource index、DIdestination index这组寄存器通常用来存放存储器单元的16位偏移地址即相对于段起始地址的距离简称编译地址 指针及变址寄存器都是16位编码范围仅为 0000H~FFFFH。 指针寄存器 在进行堆栈操作的过程中SP用来指示堆栈栈顶的偏移地址称为堆栈指针而BP则用来存放位于堆栈段中的一个数据区的“基址”的偏移量称为基址指针。 SP堆栈指针Stack Pointer在使用堆栈操作指令PUSH 或 POP对堆栈进行操作时每执行一次进栈或出栈操作系统会自动将SP的内容减2或加2以使其始终指向栈顶。BP基址指针Base Pointer作为通用寄存器它可以用来存放数据但更经常更重要的用途是存放操作数在堆栈段内的偏移地址。 变址寄存器 SI、DI用来存放当前数据所在存储单元的偏移地址。在串操作指令中SI用来存放源操作数地址的偏移量称为源变址寄存器DI用来存放目标操作数地址的偏移量称为目标变址寄存器。 SI源地址寄存器Source IndexDI目的地址寄存器Destination Index 这两个寄存器通常用在字符串操作时存放操作数的偏移地址其中SI存放源串在数据段内的偏移地址DI存放目的串在附加数据段内的偏移地址。 2.段寄存器在BIU 在8086CPU中有4个16位的段寄存器。这些寄存器指令了一个特定的现行段用来存放各段的段基址。 8086/8088CPU中内存空间是1MB20位地址线但寄存器只有16位因此1MB被分成若干逻辑段最长是64KB因为8088/8086中寄存器是16位的。这些逻辑段是动态的。 CS代码段寄存器Code SegmentSS堆栈段寄存器Stack SegmentDS数据段寄存器Data SegmentES附加段寄存器Extra Segment在串指令中目的操作数指明必须在现行附加段中 当用户用指令设定了他们的初值后实际上已经确定了一个64KB的存储区段。 其中代码段寄存器CS用来存放当前使用的代码段的段基址用户变址的程序必须存放在代码段中CPU将会依次从代码段中取出指令代码并执行。 数据段寄存器DS用来存放当前使用的数据段的段基址程序运行所需的原始数据以及运算的结果应存放在数据段中。 附加段寄存器ES用来存放当前使用的附加段的段基址它通常也用来存放数据但在数据串操作时用来存放目标数据串此时DS用来存放源数据串。 堆栈段寄存器SS用来存放当前使用的堆栈段的段基址所有的堆栈操作的数据均保存在这个段中。 3.指令指针寄存器IP IP为16位指令指针IP的内容总是指向BIU将要取的下一条指令代码的16位偏移地址。当取出1个字节指令代码后IP自动加1并指向下一条指令代码的偏移地址。它的内容是由BIU来修改的用户不能通过指令预置或修改IP的内容但有些指令的执行可以修改它的内容也可以将其内容压入堆栈或由堆栈中弹出。 IP指令指针寄存器Intsruction Pointer IP寄存器是一个专用寄存器CPU专用 由CS代码段寄存器IP指令指针寄存器确定 下一条指令的地址。 4.标志寄存器FR在EU中 8086CPU中有一个16位的状态标志寄存器FRflag registr用来存放下一条要读取的指令在代码段内的偏移地址。用户程序不能直接访问IP。但是只使用了9位。其中6位为状态标志位用来反映算数运算或逻辑运算结果的状态3位为控制位用来控制CPU的操作。 这种特殊的寄存器在8086CPU中被称为标志寄存器flag。8086CPU的标志寄存器有16位其中存储的信息通常又被称为程序状态字PSW。 1状态标志位 名称 描述 CFCarry Flag进位标志位 当进行加减运算时 若最高位发生进位或借位则CF为1否则为0。该标志位通常用于判断无符号数运算结果是否超出了计算机所能表示的无符号数的范围。 PFParity Flag奇偶标志位 当指令执行结果的低8位中含有偶数个1时PF为1否则为0。 AFAuxiliary Flag辅助进位标志位 当执行一条加法或减法运算指令时若结果的低字节的低4位向高4位有进位或借位则AF1否则为0。 ZFZero Flag零标志位 若当前的运算结果为0则ZF1否则为0。 SFSign Flag符号标志位 若运算结果的最高位为1SF1否则为0。 OFOverflow Flag溢出标志位 根据最高位的进位和次高位的进位是否相同来确定。两者不同为1否则为0 当运算结果超出了带符号数所能表示的数值范围即溢出时OF1否则为0。该标志通常用来判断有符号数运算结果是否溢出。 溢出标志的概念 研究处理器内部以补码表示有符号数8位整数范围是-128~12716位整数范围是-32768~32767如果运算结果超出这个范围就产生了溢出有溢出说明有符号数的运算结果不正确 溢出判断规则 真值超范围同号相加异号相减正 正 — 负 负 负 - 正双进位 注意默认运算是补码的运算一定要变成真值再运算。补码变成原码的方式是正数的补码与原码一致负数的补码符号位不变其他位按位取反加1 溢出和进位的区别 OF溢出和CF进位意义不同溢出标志表示有符号数运算结果是否超出范围运算结果已经不正确进位标志标志无符号数运算结果是否超出范围运算结果仍然正确 2三位控制位 控制标志位有三个用于控制CPU的操作由程序设置或清除。 名称 描述 作用 TFTrap Flag跟踪陷阱标志位 是为测试程序的方便而设置。若将TF 1CPU处于单步工作方式 。 单步标志没有对应指令 处理器在每条指令执行结束时产生一个编号为1的内部中断 TF1单步中断 逐条指令调试程序的方法就是单步调试 IFInterrupt Flag中断允许标志位 是用来控制可屏蔽中断的控制标志位。若将IF 1表示允许CPU接受外部从INTR可屏蔽中断请求信号引脚上发来的可屏蔽中断请求若用CLI指令将IF 0则禁止CPU接受可屏蔽中断请求信号。 控制可屏蔽中断是否响应 CLIIF 0禁止中断 STIIF 1允许中断 DFDirection Flag方向标志位 若将DF 1串操作按减地址方式进行也就是说从高地址开始每操作一次地址自动递减若DF 0否则按增地址方式进行。 串操作指令控制地址的变化方向CLDDF 0地址自动增加 STDDF 1地址自动减少