第四章 典型CPU及指令系统举例.ppt
第四章 典型CPU及指令系统举例,学习内容:,41 8086/8088 CPU的结构42 主存储器43 8086/8088堆栈44 8086/8088指令系统45 提高CPU性能的一些措施,学习目标,理解8086/8088CPU的寄存器结构、主存储器、堆栈结构。掌握8086/8088指令系统的寻址方式。(本章的重点内容)理解8086/8088指令类型。了解提高CPU性能的一些措施与当前常用的实际CPU基本组成。,重点难点:8086/8088指令系统的寻址方式。课时安排:6课时。媒体使用:使用多媒体投影,主要采用PowerPoint准备的电子教案。,§4.1 8086/8088CPU,§4.1.1 8086/8088CPU的结构1. 8086/8088内部结构:8086/8088CPU采用指令流水线结构,将取指令(或取操作数)与执行指令的功能分别由两个独立部件实现,即总线接口部件BIU与执行部件EU,主要任务是完成CPU与主存储器或I/O之间的信息传送。,主要任务是执行指令,1、执行部件EU:包括一个16位算术逻辑部件ALU、一组通用寄存器、暂存器、标志寄存器和EU控制器。2、EU主要任务是执行指令。3、执行部件EU功能见教材P114。,总线接口部件BIU见教材P115。,1、总线接口部件BIU:包括一段寄存器、指令指针、6字节的指令队列、20位总线地址形成部件和总线控制逻辑。2、BIU主要任务是完成CPU与主存储器或I/O端口之间的信息传送。3、总线接口BIU功能见教材P115。,2. 8086/8088主存地址的形成,段基值:在BIU中设置段寄存器,用以存放20位段起始地址的高16位,称为段基值。偏移量:由EU或指令指针IP提供段内的偏移量,即一个主存单元与所在段的段基址之间的字节距离。(16位)段基址:由段基值左移4位后,得到一个物理地址。,二者相加形成20位主存单元的物理地址。,2. 8086/8088主存地址的形成,2. 8086/8088主存地址的形成,我们把提供一个20位地址的两个寄存器中的值分别称之为:20位寄存器中的值称之为段基址(Segment base value)16位寄存器中的值称之为偏移量(Offset)或有效地址(Effective address)段基址是由四个段寄存器提供20位的高16位,低四位补0形成的偏移量是由CPU内的EU部分提供的,§4.1. 8086/8088寄存器,1. 段寄存器:CS(代码段寄存器)用来存放程序的指令代码序列,用来存放当前代码段段首址的高16位,即段基值。DS(数据段寄存器)存放程序的有关数据,用来存放当前数据段的段基值。SS(堆栈段寄存器)用来存放按后进先出顺序存取的信息。存放当前堆栈段的段基值。ES(附加段寄存器)存放运算结果或辅助数据,存放当前附加段的段基值。,1.段寄存器,8086/8088CPU,2 . 通用寄存器(1)地址指针寄存(2)数据寄存器3. 用于控制的寄存器(1)指令指针IP:(2)标志寄存器FR,作用类似于PC,当现行指令执行完毕,由IP提供下一条指令地址,§4.2 主存储器§4.2.1 8086/8088主存储器的特点,8086/8088CPU有20条地址引出线,因此具有1M字节(210*210=220)的寻址能力,即可以在1M个字节单元中寻找出所需的一个存储单元。在8086/8088主存中,一个字节数据占用一个存储单元。一个字(Word)数据(16位)则占用二个相邻的存储单元,数的低8位(低字节)存放在低地址单元;高8位(高字节)存放在高地址单元,并以低字节所在存储单元地址作为字数据的单元地址。,§4.2.2 主存储器的段结构,8086/8088把1MB主存空间按需要划分为若干段(segment)。每个段都由连续的字节单元组成,最大长度为64K(即65536),可作为独立寻址的逻辑单位。一个段起始单元的地址,称为对应段的段基址(20位)。,§4.2.2 主存储器的段结构,在程序中设置的段称为逻辑段。主存可分成任意多个段,但在某一时刻,一个程序只能访问4个段寄存器指向的当前段的内容。4个段寄存器CS、DS、SS和ES,分别保存代码段、数据段、堆栈段和附加段这4个当前段的段基址的高16位段基值。,§4.2.3 逻辑地址与物理地址,逻辑地址段基值:偏移量(书写形式)(1)段基值:由某个段寄存器(CS,DS,SS,ES)给出,它是段基址的高16位。(2)偏移量:(也称偏移地址)由IP或EU按寻址方式产生的有效地址提供,它是段内某存储单元与段基址之间的字节距离。物理地址是指实际的20位主存单元地址,1MB主存空间的每个存储单元只对应惟一的物理地址,其范围为00000HFFFFFH。,逻辑地址物理地址的转换方式: 将段基值左移4位形成20位段基址,再加上偏移量,产生20位物理地址。逻辑地址的来源CPU在执行指令时,是按指令所需的操作类型从不同的来源获得存储单元的逻辑地址,然后形成对应的物理地址以访问主存。(具体内容见教材的P124表4-2逻辑地址的来源),§4.3 8086/8088堆栈,§4.3.1 堆栈组织8086/8088的堆栈是由SS指定的一段存储区(64KB)构成,并采用向上(地址码减小)生成方式,由堆栈指针SP指向栈顶。SS提供堆栈段的段基值,SP的内容为栈顶单元相对堆栈段段基址的字节距离(偏移量)。8086/8088堆栈规定以字(2个字节)为单位进行存取。,§4.3.2 堆栈操作,堆栈组织,§4.3.2 堆栈操作,先设置堆栈,主要是对堆栈段寄存器SS物堆栈指针SP赋初值。对堆栈的操作均在栈顶进行的,其基本操作的压栈出栈,压 栈,压栈-用压栈指令PUSH可以将通用寄存器、段寄存器或字存储单元内容压入堆栈。执行压栈指令PUSH的操作过程分二步进行:(1)(SP)-2SP;首先修改栈顶指针,SP减2以指向空字单元(即新栈顶)(2)数据(SP);将寄存器或存储单元内容送入SP指向的空字单元中,(AL)=34H,(AH)=12H,(BH)=56H,(BL)=78H,BX,AX,56,78,12,34,(SP)-2SP;(AX) (SP),压栈之前(SP),(SP)-2SP;(BX) (SP),压栈指令,出栈,出栈-用弹出指令POP可以将当前栈顶字单元内容取出送到通用寄存器、段寄存器或字存储单元中。执行出栈指令POP的操作过程分二步进行:(1)(SP)寄存器/字单元;将栈顶单元内容送到指定的寄存器或字单元(2)(SP)+2SP;修改栈顶指针,SP加2以指向新栈顶,BX,AX,56,78,12,34,(BL)=78H,(BH)=56H,(AL)=34H,(AH)=12H,(SP) BX;(SP)+2SP,(SP) AX;(SP)+2SP,出栈之后(SP),AX,BX,堆栈操作-1.压栈2.出栈,§4.4 8086/8088指令系统,§4.4.1 8086/8088寻址方式1 . 寄存器寻址方式:指令所需的操作数存放在CPU的寄存器(通用寄存器或段寄存器)中,通过指令中给出寄存器地址去找到操作数。,寻址过程:例:(BX) =1234H MOV AX,BX :将BX中的内 容送到AX中 (AX) =1234H,操作码 REC,操作数S,Ri,是指令代码中的寻址字段,表示操作数的寄存器地址,2. 立即数寻址方式,立即数寻址方式:指令所需的操作数直接在指令代码中,随着取指令一起取到BIU的指令队列中。,操作码,操作码,F5H,12H,34H,一条指令,一条指令,AX,AX,(A)MOV AX,1234H,(B)MOV AL,0F5H,3. 存储器寻址方式,在汇编语言程序中,一个存储单元的地址采用逻辑地址来表示:(形式:段基值:偏移量)段基值:是由某个段寄存器提供,由指令隐含给出。偏移量:是指存放操作数的存储单元与段起始(段基址)之间的字节距离,字由CPU的EU按指令中操作数的寻址方式计算而得到,又称为有效地址EA。有效地址EA:由位移量、基地址、变址量三个地址分量的某种组合求得。,段基址,段基值左移四位,段基值,(1)直接寻址方式,定义:指令所需的操作数存放在存储单元中,操作数的有效地址EA直接由指令代码中的位移量提供。寻址过程:在源程序中,直接寻址方式可用数值地址或符号地址来表示。,EA,用数值地址表示:在采用直接寻址方式的汇编指令中,用数值表示操作数的有效地址,则操作数所在段的段寄存器必须指明,不能缺省。MOV BX,DS:1000H完成将当前数据段偏移1000H个字节的字单元内容1234H送入BX中。,用符号地址表示:在源程序中,常用符号地址表示存放操作数的存储单元,所以在汇编指令中,可用符号地址表示的直接寻址方式来存取操作数。若指令中不必给出数据段寄存器名,即隐含使用DS;其他须指定。例题:P130,(2)寄存器间接寻址方式,寄存器间接寻址方式:指令所需的操作数在存储单元中,操作数的有效地址EA直接从基址寄存器(BP或BX)或变址寄存器(SI或DI)中获得。见P131的图4-22 寄存器间接寻址方式。若以BX,SI或DI间接寻址时,隐含使用的段寄存器是DS,若以BP间接寻址时,隐含使用的段寄存器是SS。,SI,DI,BX,BP,OR,OR,OR,EA,寻址过程,是指令代码中的寻址字段,寄存器间接寻址方式实际上是将有效地址事先存放在一个寄存器中,如同一个地址指针。因此在程序中只要修改间址寄存器的内容,就可以用一条指令访问不同的存储单元。,(2)寄存器间接寻址方式,变址寻址和基址寻址方式:指令所需的操作数在存储单元中,操作数的有效地址EA是基址寄存器(BP或BX)或变址寄存器(SI或DI)的内容与指令中给出的位移量(8位或16或)两个地址分量之和。使用SI或DI称为变址寻址。使用BX或BP称为基址寻址。,(3)变址寻址和基址寻址方式,变址寻址和基址寻址方式,SI,DI,BX,BP,OR,OR,OR,+,EA,寻址方式的使用格式:变址或基址寻址方式用来访问顺序存放在主存中的一维数组、表格、字符串等。典型用法:是将指令中不能修改的位移量作为基准地址,而变址或基址寄存器内容作为修改量例题4-1:见教材132页。,(4)基址变址寻址方式,SI,DI,BP,BX,OR,OR,+,EA,寻址过程,寻址方式的使用格式:基址变址寻址方式用来访问存放在主存中的二维数组。(其寻址方式中有两地址分量可在程序执行过程中进行修改)例题4-2:见教材133-134页。,上半部分表示由CPU的执行部件EU根据寻址方式计算有效地址EA。,下半部分表示由总线接口部件BIU形成操作数的物理地址。按操作数的物理地址就可直接访问操作数的存储单元。,4. 串操作寻址方式,串操作寻址方式:串操作指令规定:隐含使用SI作为在数据段中的源串(即源操作数)的地址指针隐含使用DI作为在附加段中的目的串的地址指针。,SI,DI,源串有效地址EA,目的串有效地址EA,5. I/O端口寻址,了解,§4.4.2 8086/8088指令,8086/8088指令按操作数地址划分: 双操作数指令:OPR DEST,SRC 单操作数指令:OPR DEST 无操作数指令:OPR,8086/8088指令按功能划分: 传送类指令 算术运算类指令 位操作类指令 串操作类指令 程序转移类指令 处理器控制类指令,一、传送类指令,分类:(仅存标志指令SAHF、标志出栈指令POPF对标位有影响)数据传送类指令交换指令标志位传送指令地址传送指令,1数据传送类指令(Move),格式:MOV DEST,SRC功能: DEST(SRC)将源地址的内容(源操作数)传送到目的地址中。传送指令执行后源操作数保持不变。,1数据传送类指令(Move),注意:MOV指令中的两个操作数可同为字或字节,但两者位数必须一致。目的操作数不能为立即数。两个操作数不能同时为存储器操作数。MOV指令中立即数不能直接传送给段寄存器,而且段寄存器之间也不能直接传送数据,但可以通过寄存器实现间接传送。一条MOV指令不能完成两个存储单元之间的数据传送,但可以用两条指令来实现。,数据传送指令(Move)(指令中只允许两个操作数的其中一个在主存储器中,立即数不能直接送段寄存器,段寄存器也不能之间直接传送),MOV指令错误例子举例,2交换指令(Excahange),格式:XCHG DEST , SRC功能:将源地址的内容(源操作数)与目的地址的内容(目的操作数)相互交换。,通用寄存器AX BX CX DX SI DI BP SP,存储器,图4-30 CXHG指令的数据交换,注意:数据交换只能在通用寄存器之间或通用寄存器与存储单元之间进行。交换指令不能使用段寄存器,也不能使用立即数。,3标志位传送指令,(1)取标志指令(LAHF)格式:LAHF功能:AH (FR)7-0,将标志寄存器FR低8位内容传送到AH寄存器中。见如下图(一一对应)76543210,这种指令用于对标志寄存器进行存取操作,共4条指令且都是无操作数指令,AH,FR低8位,(2)存标志指令格式:SAHF功能:(FR)7-0 AH,将AH寄存器的内容传送给标志寄存器FR低8位。(3)标志压栈指令(PUSHF)格式:PUSHF 功能:PUSHF指令先将栈顶指针SP内容减2指向空字单元,然后把16位标志寄存器FR的所有内容送到SP指向的新栈顶字单元中。,(4)标志压栈指令(POPF)格式:POPF 功能:POPF指令先SP指向的栈顶字单元的内容弹出标志寄存器中,然后SP内容加2指向新的栈顶。各标志位的状态由堆栈弹出字的对应位内容决定。,地址传送指令(了解),(1)装入有效地址指令LEA格式:LEA DEST,SRC功能:DEST SRC的EA,即将源操作数的有效地址EA传送到目的地址(16位通用寄存器)中。(2)装入地址指针指令LDS 格式:LDS DEST,SRC LES DEST,SRC 功能:是从作地址指针的4个存储单元中,同时取出段基值与偏移量(即源操作数),分别送到段寄存器DS(ES)和通用寄存器中。,二、算术运算类指令,1加法运算指令(1)加法指令(ADD)格式:ADD DSET,SRC功能:DEST (SRC)+(DEST),影响OF,SF,ZF,AF,PF和CF标志位。见教材P141页,例4-8注意各标志位的变化。,(1)加法指令ADD,例:ADD DL,0A4H,(2)带进位加法指令(ADC),格式:ADC DSET,SRC功能:DEST (SRC)+(DEST)+CF,即在完成两个操作数相加的同时,将标志位CF加上,求出的和数送入目的地址中。影响OF,SF,ZF,AF,PF和CF标志位。注意:ADC主要用于大于16位数的相加运算。,例4-9 有一个32位无符号数存放在DX(高16位)、AX(低16位)中,若要加上常数76F1A23H,则用以下指令来实现:ADD AX,1A23H;ADC DX,76FH;,完成把16位常数加在AX中,若产生进位,则记录在CF中。,由ADC指令在完成高16位相加的同时,将低16位进位(即CF中的数)也加上。,DX,AX,CF,DH DL AH AL,(3)加1指令(INC),格式:INC DSET功能:DEST (DEST)+1,即目的操作数加1后送回目的地址中,影响OF,SF,ZF,AF和PF,但不影响CF。注意:操作数只能在通用寄存器或存储单元中,不能是立即数。INC指令主要用于计数器的计数或修改地址指针。,2. 减法运算指令,(1)减法指令(SUB)格式:SUB DEST,SRC功能: DEST (DEST)(SRC),即完成从目的操作数中减去源操作数,其差值送入目的地址中。影响OF,SF,ZF,AF和PF,但不影响CF。例:有2个字节单元A、B,可用指令实现(A)(B) A 。 MOV AL,B SUB A,AL,减法指令SUB,(2)带借位减法指令(SBB),格式:SBB DEST,SRC功能: DEST (DEST)-(SRC)-CF,即在完成2个操作数相减的同时,还要减去借位CF,影响OF,SF,ZF,AF和PF,但不影响CF。注意:用于大于16位数的相减运算,将低位部分的相减的借位引入高位部分的减法。,(3)减1指令(DEC),格式:DEC DSET功能:DEST (DEST)-1,即目的操作数减1后送回目的地址中,影响OF,SF,ZF,AF和PF,但不影响CF。注意:操作数只能在通用寄存器或存储单元中,不能是立即数。DEC指令主要用于计数器的计数或修改地址指针,但它的计数或修改方向与INC指令相反。,(4)求负指令(NEG),格式:NEG DSET功能:DEST 0- (DEST),即用0减去目的操作数,相减结果送回目的地址中。影响OF,SF,ZF,AF和PF,但不影响CF。见教材P143例4-13例4-14,(5)比较指令(CMP),格式:CMP DSET,SRC功能:(DEST)-(SRC),两个操作数相减后,仅按相减结果设置标志位OF,SF,ZF,AF,PF和CF,但不保留差。CMP和SUB之间的区别:运算结果不送回目的地址中,因此CMP指令执行后,两个操作数都不变,只影响状态标志位。CMP主要是利用所设标志位的状态来反映两个操作数的大小。,3. 乘法运算指令,(1)无符号数乘法指令(MUL)格式:MUL OPRD功能: 注意:(OPRD)是乘法运算的一个操作数,只能在通用寄存器或存储单元中,另一个操作安息则隐含在AL或AX寄存器中。(2)带符号数乘法指令(IMUL) 该指令中的操作数及积均为带符号且用补码表示。,字节无称号数相乘:AX (OPRD)*(AL)字无称号数相乘:AX (OPRD)*(AX),4. 除法运算指令,(1)无符号数除法指令(DIV)格式:DIV OPRD功能: 注意:DIV指令对标志寄存器无有效标志结果,有两种情况将产生0型中断,转入除法出错中断处理。(除数为0或商溢出),字节除法:AL (AX)/(OPRD)字无称号数相除:AX (DX:AX)/(OPRD),(2)带符号数除法指令(IDIV)格式:IDIV OPRD功能:该指令中的操作数、商及余数均带符且用补码表示,其余均与DIV操作相同。(3)字节/字符号扩展指令格式:CBW;扩展AL中的符号位至AH中 CWD;扩展AX中的符号位至DX中两个指令主要用在除法指令前,形成双倍长度的被除数,对标志寄存器均无影响。,5. BCD码校正指令,(1)非组合型加法校正指令AAA(2)组合型加法校正指令DAA(3)非组合型减法校正指令AAS(4)组合型减法校正指令DAS,BCD十进制:先用二进制数的加减、乘除指令对BCD码进行运算,接着用BCD码校正指令对运算结果进行校正。,例题请参见教材P147。,三、位操作类指令,1.逻辑运算指令(1)逻辑与指令(二1为1)格式:AND DEST,SRC功能:DEST (SRC)(DEST)(2)逻辑或指令(有1为1)格式:OR DEST,SRC功能:DEST (SRC) (DEST),这些指令常用于对操作数的某些位进行分离、组合或设置,三、位操作类指令,(3)逻辑异或指令(同为0,异为1)格式:XOR DEST,SRC功能:DEST (SRC)O(DEST)(4)逻辑非指令格式:NOT DEST功能:DEST (DEST),例1: AND AL,0F0H;分离出AL中的高4 位OR AL,80H;将AL中最高位置“1”XOR AX,AX;将AX内容清零XOR AL,01H;将AL中最低位变反例2:实现将标志寄存器的第8位TF位置1。PUSHF;标志压栈指令(将16位标志寄存FR的内容送入栈顶单元)POP AX;出栈,即(栈顶单元)AXOR AX,100H;将AX中第8位置1,其余不变PUSH AXPOPF,;通过堆栈将修改的结果送回标志寄存器中,2. 测试指令( Test),格式:TEST DEST,SRC功能:(SRC)(DEST);将源操作数与目的操作数进行按位逻辑与运算,仅按结果设置标志位SF,ZF,PF,相与的结果不保存。,3. 移位/循环移位指令,移位指令分算术移位、逻辑移位和循环移位,共8条指令,其特点是:具有相同的指令格式:OPR DESR,COUNT每条指令都是单操作数指令,即只需一个操作数DESTDEST只能是8/16位通用寄存器或存储器操作数,不能是立即数COUNT表示移位的次数,移位一次,为1;移位多次,则须有CL替代,CL中存放移位的次数。,(1)算术移位指令,格式:算术左移指令 SAL DEST,COUNT;将DEST指定的操作数左移COUNT,最高位移入CF中,最低位补0算术右移指令 SAR DEST,COUNT;将DEST指定的操作数右移COUNT,最高符号位保持不变,连同符号位依次右移,最低位移入CF中算术移位指令主要用于对带符号数的移位,左移一位相当于乘2;右移一位相当于除2。,(2)逻辑移位指令,格式:逻辑左移指令 SHL DEST,COUNT逻辑右移指令 SHR DEST,COUNT功能:将DEST指定的8/16位寄存器或存储器操作数移位COUNT。SHL最高位移入CF中,最低位补0SHR最低位移入CF中,最高位补0,(3)循环移位指令,格式:循环左移指令 ROL DEST,COUNT循环右移指令 ROR DEST,COUNT带进位循环左移指令 RCL DEST,COUNT带进位循环右移指令 RCR DEST,COUNT功能:将DEST指定的8/16位寄存器或存储器操作数移位COUNT。ROL/ROR将操作数循环左移/右移RCL/RCR将操作数和CF一起循环左移/右移见示意图4-39,(3)循环移位指令,循环,带进位循环,例:要求把CL中的数(0-15)所指定AX中的位分离出来,可用以下程序段实现。设CL=2MOV BX,1H ;(BX)=(0000,0001) 2SHL BX,CL;(BX)=(0000,0100) 2AND AX,BX;(AX)=(0000,0 00)2或者:MOV BX,100H;(BX)=(0000,0100)2AND AX,BX;(AX)=(0000,0 00)2,逻辑右移SHR,四、串操作类指令,“串”是指存储器中一序列字或字节单元,其内容是字符或数据。串操作是对这一序列或字单元的内容进行某种操作。,1 . 取串指令,指令格式:LODS源串指令功能:(1)AX/AL (DS:(SI)(2)SI (SI)±1或2(3)对标志寄存器无影响,2 . 存串指令,指令格式:STOS目的串/STOSB/STOSW指令功能:(1)ES:(DI) (AX)/(AL)(2)DI (DI)±1或2(3)对标志寄存器无影响,3 .串比较指令,指令格式:MOVS目的串、源串/MOVSB/MOVSW指令功能:(1)(ES:(DI) (DS:(SI)(2)SI (SI)±1或2,DI (DI)±1或2(3)对标志寄存器无影响,4. 串比较指令,指令格式:CMPSI源串,目的串/CMPSB/CMPSW指令功能:(1)(DS:(SI)(ES:(DI)(2) SI (SI)±1或2, DI (DI)±1或2(3)影响标志位OF,SF,ZF,AF,PF,CF,5 .串搜索指令,指令格式:SCAS目的串/SCASB/SCASW指令功能:(1)(AX/AL)(ES:(DI)(2)DI (DI)±1或2(3)影响标志位OF,SF,ZF,AF,PF,CF,6. 重复前缀指令(3条),指令格式:REP重复执行串操作指令的条件是:(CX)0指令格式:REPE/REPZ重复执行串操作指令的条件是:(CX)0AND ZF=1指令格式:REPNE/REPNZ重复执行串操作指令的条件是:(CX)0 AND ZF=1,五、处理器控制指令,1. 标志位操作指令2. 与外部事件同步的指令3. 空操作指令,§4.5 提高CPU性能的一些措施,了解自学,作业:,见教材P164,T3-27做在书上作业:做在作业本上1、编写一程序段,将AL的低4位与BL的低4位互换,AL和BL的高4位保持不变。2、编写计算5X-Y+10多项式值的程序段。说明:多项式值存于AX中,X、Y是无符号数,设中间和最后结果不超过16位二进制数。,