微机原理与接口技术的课件第3章.ppt
1,8086指令系统(2),2,三、逻辑运算和移位类,逻辑运算移位操作,非循环移位循环移位,3,逻辑运算和移位指令,4,指令类型,逻辑运算与,或,非,异或移位操作非循环移位,循环移位,5,一、逻辑运算,逻辑运算指令对操作数的要求大多与MOV指令相同。“非”运算指令要求操作数不能是立即数;除“非”运算指令外,其余指令的执行都会使标志位OF=CF=0,6,1.“与”指令:,格式:AND OPRD1,OPRD2操作:两操作数相“与”,结果送目标地址。注:与运算规则:见0为0,全1为1。例:MOV AX,5555H AND AX,0FFH;AX=0055H屏蔽高位,取出低位(高位清零);即对应位为0则清0,对应位为1则不变。,7,“与”指令的应用,实现两操作数按位相与的运算AND BL,SI使目标操作数的某些位不变,某些位清零AND AL,0FH在操作数不变的情况下使CF和OF清零AND AX,AX,8,2.“或”运算指令,格式:OR OPRD1,OPRD2操作:两操作数相“或”,结果送目标地址。或运算规则:见1为1,全0为0。例:MOV AX,8888H;OR AX,0FFH;AX=88FFH对应1位置1对应0位则不变。,9,“或”指令的应用,实现两操作数相“或”的运算OR AX,DI使某些位不变,某些位置“1”OR CL,0FH在不改变操作数的情况下使OF=CF=0OR AX,AX,10,3.“非”运算指令,格式:NOT OPRD操作:操作数按位取反再送回原地址注:指令中的操作数不能是立即数指令的执行对标志位无影响 例:MOV AX,1;NOT AX;AX=0FFFEH该指令只是执行求反操作,而不是求反码指令,对符号位也求反。该指令不影响标志位。,11,4.“异或”运算指令,格式:XOR OPRD1,OPRD2操作:两操作数相“异或”,结果送目标地址例:MOV AX,3333H;XOR AX,0FFH;AX=33CCH对应0不变,对应1求反。例:XOR AX,AX;AX=0 清零某一操作数和自身相“异或”,结果为零。,12,5.“测试”指令,格式:TEST OPRD1,OPRD2操作:执行“与”运算,但运算的结果不送回目标地址。应用:常用于测试某些位的状态,13,二、移位指令,非循环移位指令 循环移位指令,注:移动一位时由指令直接给出;移动两位及以上,则移位次数由CL指定。,14,1.非循环移位指令,逻辑左移算术左移逻辑右移算术右移,15,算术左移和逻辑左移,算术左移指令:SAL OPRD,1 SAL OPRD,CL逻辑左移指令:SHL OPRD,1 SHL OPRD,CL,有符号数,无符号数,移动一位后,若CF与最高位不相等,则OF=1;否则OF=0,16,1)算术左移和逻辑左移指令SAL/SHL,格式:SAL DST,CNT 或SHL DST,CNT 操作:CF 0 即将目的操作数的内容左移1位或CL所指定的位,每左移1位,左边的最高位移入CF位,而在右边的最低位补0.注:SAL指令与SHL指令操作一样,即机器码一样。例:MOV BL,0CH;BL=12(0CH)SHL BL,1;BL=24(18H)左移一位,等于对操作数(带符号或无符号)乘2运算,左移N次,则乘2N,但防止溢出.,17,逻辑右移SHR,格式:SHR OPRD,I SHR OPRD,CL,0,CF,无符号数的右移,移动一位后,若次高位与最高位不相等,则OF=1;否则OF=0,18,逻辑右移例:,MOV AL,68HMOV CL,2SHR AL,CL;AL=1AH,0,CF,0 1 1 0 1 0,AL,0,0,0,0 0 1 1 0 1 0 0,AL,CF,0,0,0 0 0 1 1 0 1 0,AL,CF,0,0,移动1次,移动2次,19,算术右移SAR,格式:SAR OPRD,I SAR OPRD,CL,有符号数的右移,CF,将目标操作数向右移1位或CL指定的位数,操作数最低位移入标志位CF,移空的位由最高位补充。(例3-31),20,非循环移位指令的应用,左移可实现乘法运算右移可实现除法运算,21,2.循环移位指令,不带进位位的循环移位带进位位的循环移位,左移 ROL右移 ROR,左移 RCL右移 RCR,指令格式、对操作数的要求与非循环移位指令相同,22,不带进位位的循环移位,CF,CF,23,(5)循环右移ROR,格式:ROR DST,CNT操作:CF 将(DST)右移CNT位,且将最低位移至最高位,移空的位由移出位补充。(6)循环左移ROL格式:ROL DST,CNT操作:CF 将(DST)左移CNT位,且将最高位移至最低位,移空的位由移出位补充。例:MOV AL,45H MOV CL,4 ROL AL,CL;AL=54H,高四位与低四位互换,使用ROR也一样。,24,带进位位的循环移位,CF,CF,25,(7)带进位循环右移,格式:RCR DST,CNT操作:CF将8位、16位寄存器或存储器内容左移,移空的位由CF位补充。(8)带进位循环右移格式:RCL DST,CNT操作:CF 将8位、16位寄存器或存储器内容右移,移空的位由CF位补充。此四条指令只影响CF,不影响其它标志。当想把一个寄存器或单元的内容,移至另一个单元时,常用带进位移.,26,循环移位指令的应用,用于对某些位状态的测试;高位部分和低位部分的交换;与非循环移位指令一起组成32位或更长字长数的移位。,27,串操作指令,28,串操作指令说明,针对数据块或字符串的操作;可实现存储器到存储器的数据传送;待操作的数据串称为源串,目标地址称为目标串。,29,串操作指令的特点,源串一般存放在数据段,偏移地址由SI指定。允许段重设;目标串必须在附加段,偏移地址由DI指定;指令自动修改地址指针,修改方向由DF决定。DF=0 DF=1数据块长度值由CX指定可增加自动重复前缀以实现自动修改CX内容。,增地址方向;,减地址方向;,30,重复前缀,无条件重复REP条件重复REPE 相等重复REPZ 为零重复REPNE 不相等重复REPNZ 不为零重复,CX0 ZF=1,CX0 ZF=0,CX0 重复,31,串操作指令流程,取源串地址,取目标串地址,设串长度,传送一个字节或字,修改地址指针,修改串长度值,传送完否?,N,Y,设操作方向,32,串操作指令,串传送 MOVS串比较 CMPS串扫描 SCAS串装入 LODS串送存 STOS,33,1.串传送指令,格式:MOVS OPRD1,OPRD2 MOVSB MOVSW串传送指令常与无条件重复前缀连用,34,串传送指令,对比用MOV指令和MOVS指令实现将200个字节数据从内存的一个区域送到另一个区域的程序段。,35,串传送指令例,用串传送指令实现200个字节数据的传送:LEA SI,MEM1 LEA DI,MEM2 MOV CX,200 CLD REP MOVSB HLT,36,2.串比较指令,格式:CMPS OPRD1,OPRD2 CMPSB CMPSW串比较指令常与条件重复前缀连用,指令的执 行不改变操作数,仅影响标志位。前缀的操作对标志位不影响,37,串比较指令例,测试200个字节数据是否传送正确:,LEA SI,MEM1LEA DI,MEM2MOV CX,200CLD REPE CMPSB TEST CX,00FFH,JZ STOP DEC SI MOV AL,SI MOV BX,SISTOP:HLT,38,3.串扫描指令,格式:SCAS OPRD SCASB SCASW执行与CMPS指令相似的操作,只是这里的源 操作数是AX或AL,目 标操作数,39,串扫描指令的应用,常用于在指定存储区域中寻找某个关键字。,40,串装入指令,格式:LODS OPRD LODSB LODSW操作:对字节:AL对 字:AX,源操作数,DS:SI,DS:SI,41,4.串装入指令,用于将内存某个区域的数据串依次装入累加器,以便显示或输出到接口。LODS指令一般不加重复前缀。,42,5.串存储指令,格式:STOS OPRD STOSB STOSW操作:对字节:AL对 字:AX,目 标操作数,ES:DI,ES:DI,43,串存储指令例 内存某个区域清零,设计思想:,区域首地址送ES:DI,串长度送CX,置方向标志DF,0送累加器AL,执行串送存指令,p132,44,程序控制指令,转移指令循环控制过程调用中断控制,45,一、转移指令,无条件转移指令 无条件转移到目标地址,执行新的指令有条件转移指令 在具备一定条件的情况下转移到目标地址,通过修改指令的偏移地址或段地址及偏移地址实现程序的转移,46,1.无条件转移指令,格式:JMP OPRD,目标地址,与JMP在同一代码段,与JMP不在同一代码段,原则上可实现在整个内存空间的转移,47,无条件段内转移,转移的目标地址在当前代码段内,段地址不改变。即:目标地址是16位偏移地址。,指令中直接给出目标地址,由指令中的寄存器或存储器操作数指出目标地址,段内直接转移,段内间接转移,48,段内直接转移,段内直接转移转移的目标地址由指令直接给出格式:JMP(NEAR)Label,近地址标号,说明:指令被汇编时,汇编程序会计算出JMP指令的下一条指令到Label所指示的目标地址之间的位移量(即相距多少个字节单元)操作:IP+位移量(16位或8位)新的IP,目标地址与JMP指令处于同一地址段范围之内(都在CS段)。,49,段内直接转移示图,JMP,Label,代码段,位移量,下一条要执行指令的偏移地址=当前IP+位移量,50,段内间接转移,段内间接转移转移的目标地址存放在某个16位寄存器或存储器 的某两个单元中格式:JMP OPRD操作:用指定的16位寄存器内容或存储器两单元内容内容作为转移目标的偏移地址,用其内容取代原来IP的内容,从而实现程序的转移。,16位的寄存器或存储器地址,51,段内间接转移例,例:JMP BX若:BX=1200H则:转移的目标地址=1200H,JMP,代码段,1200H,MOV,52,段内间接转移例,JMP WORD PTRBX 设:BX=1200H,JMP,代码段,数据段,BX=1200,XXH,XXH,IP,指令码,53,无条件段间转移,转移的目标地址不在当前代码段内。目标地址为32位,包括段地址和偏移地址。,指令中直接给出目标地址,由指令中的32位存储器操作数指出目标地址,段间直接转移,段间间接转移,54,段间直接转移,段间直接转移转移的目标地址由指令直接给出格式:JMP FAR PTR Label这种方式下,指令中给出转向地址的段地址和段内偏移量。发生转移时,用前者取代当前CS寄存器内容,用后者取代当前IP中的内容,从而使程序从一个代码段转移到另一个代码段,例:JMP FAR PTR LABEL;其中LABEL为转向的符号地址,它是另一代码段中距段首址的偏移量,FAR PTR为段间转移的运算符。,远地址标号,55,段间直接转移示图,JMP,Label,代码段1,Label与JMP之间的位移量,代码段2,XXH,XXH,XXH,XXH,IP,CS,56,段间间接转移,格式:JMP OPRD(32位的存储器地址)操作:指令中将给出一个存储器地址,用该存储器地址所指的连续的4个存储单元的内容(32位)来取代当前的IP和CS的内容。低字节两个单元的内容代替IP,高字节两个单元的内容代替CS。例如:JMP DWORD PTRBX+SI;用(BX)(SI)所指的存储器字单元内容取代(IP),用(BX)(SI)2所指的存储器字单元内容取代(CS)。DWORD PTR为双字指针运算符。,57,段间间接转移例,段间间接寻址转移的目标地址由指令中的32位操作数给出 例:JMP DWORD PTRBX,XXH,XXH,XXH,XXH,BX,IP,CS,JMP,指令码,代码段1,代码段2,数据段,58,2.条件转移指令,在满足一定条件下,程序转移到目标地址继续执行条件转移指令均为段内短转移,即转移 范围为:-128-+127,p136,59,1)单条件转移指令 JC;CF标志为1,则转移 JNC;CF标志为0,则转移 JE/JZ;ZF标志为1,则转移 JNE/JNZ;ZF标志为0,则转移 JS;SF标志为1,则转移 JNS;SF标志为0,则转移 JO;OF标志为1,则转移 JNO;OF标志为0,则转移 JP/JPE;PF标志为1,则转移 JNP/JPO;PF标志为0,则转移,2.条件转移指令,60,条件A处理,条件A判断,条件B处理,条件B判断,N,Y,Y,N,61,2)用于无符号数的条件转移指令 JA/JNBE;高于/不低于等于转移,CFZF0 JNA/JBE;不高于/低于等于转移,CFZF1 JB/JNAE;低于/不高于等于转移,CF1 JNB/JAE;不低于/高于等于转移,CF0,条件转移指令,62,3)用于带符号数的条件转移指令 JG/JNLE;大于/不小于等于转移,(SF OF)ZF0JGE/JNL;大于等于/不小于转移,(SF OF)0 JL/JNGE;小于/不大于等于转移,(SF OF)1 JLE/JNG;小于等于/不大于转移,(SF OF)ZF1,63,转移指令例,统计内存数据段中以TABLE为首地址的100个8位符号数中正数、负数和零元数的个数。,64,转移指令例(流程图),将存放各元素个数的单元清零,取首地址设串长度,取一个字节数,正数个数加1,零元素加1,为负?,为零?,负数个数加1,N,Y,N,Y,65,二、循环控制指令,循环范围:以当前IP为中心的-128+127范围内循环。循环次数由CX寄存器指定。循环指令:,LOOP*LOOPZ*LOOPNZ,无条件循环指令,条件循环指令,66,无条件循环指令,格式:LOOP LABEL循环条件:CX 0操作:DEC CX JNZ(ZF=0转移)符号地址,67,条件循环指令,格式:LOOPZ LABEL LOOPE LABEL循环条件:CX 0 ZF=1,格式:LOOPNZ LABEL LOOPNE LABEL循环条件:CX 0 ZF=0,68,三、过程调用和返回,用于调用一个子过程;子过程由程序员预先设计 并装入内存 子过程执行结束后要返回 原调用处,调用程序,断点,入口地址,入口地址,断点地址,子程序,69,调用指令的执行过程,保护断点;将调用指令的下一条指令的地址(断点)压入堆栈获取子过程的入口地址;子过程第1条指令的偏移地址执行子过程,含相应参数的保存及恢复;恢复断点,返回原程序。将断点偏移地址由堆栈弹出,70,过程调用,段内调用段间调用,段内直接调用段内间接调用,段间直接调用段间间接调用,71,1.段内调用,被调用程序与调用程序在同一代码段调用前只需保护断点的偏移地址格式:CALL NEAR PROC执行过程:,近过程名,代码段1,调用程序,被调用程序,代码段1,将断点的偏移地址压入堆栈 根据过程名找子程序入口,72,1).段内直接调用,格式:CALL NEAR 目标地址操作:PUSH(IP)(IP)+D16(16位的偏移量)(IP)说明:首先把子程序的返回地址(即CALL指令的下一条指令的地址)存入堆栈中,以便子程序返回主程序使用;然后转移到子程序的入口地址去继续执行。,73,2).段内间接调用,格式:CALL OPRD操作:PUSH(IP)(IP)(EA)说明:首先把子程序的返回地址(即CALL指令的下一条指令的地址)存入堆栈中,以便子程序返回主程序使用;然后转移到子程序的入口地址去继续执行。,求得的转向子程序的偏移地址,REG,MEM,74,段内调用例,(1)CALL TIMRE(2)CALL WORD PTRSI,直接调用,间接调用,44H,33H,CALL,代码段,数据段,设:SI=1200H CS=6000H,1200H,执行第(2)条指令后:,6000H,CS=,3344H,IP=,75,2.段间调用,子过程与原调用程序不在同一代码段先将断点的CS压栈,再压入IP。,调用前需保护断点的段基地址和偏移地址,76,1).段间直接调用,格式:CALL FAR 目标地址操作:PUSH(CS)PUSH(IP)(IP)目的操作数指定的偏移地址(CS)目的操作数指定的段地址说明:由于调用程序和子程序不在同一段内,因此返回地址的保存以及转向地址的设置都必须把段地址考虑在内。例:CALL 3000H:2000H直接给出了被调用过程的段地址和偏移地址“3000H:2000H”。,77,2).段间间接调用,格式例:CALL WORD PTR SI CALL BX操作:PUSH(CS)PUSH(IP)(IP)(EA)(CS)(EA+2)说明:目标地址存放在连续的四个存储单元中,低字节两个单元的内容代替IP,高字节两个单元的内容代替CS。,把子程序的返回地址存入堆栈,转移到子程序的入口地址,78,段间调用例,格式:CALL FAR PROC格式例:CALL FAR TIMRECALL DWORD PTRSI,XXH,XXH,CALL,代码段,数据段,SI,XXH,XXH,CS,IP,79,3.返回指令,功能:从堆栈中弹出断点地址,返回原程序格式:RET说明:和调用指令CALL 相对应的是返回指令RET。返回指令通常作为一个子程序或过程的最后一条指令,它用以返回到调用这个子程序的断点处。段内返回:格式:RET 操作:IP出栈段间返回:格式:RET 操作:IP先出栈,CS后出栈,80,四、中断指令,中断中断源中断的类型中断指令引起CPU产生一次中断的指令,81,中断的基本概念,什么是中断,我们从生活中的例子引入。看书的例子:你正在看书,突然电话铃响了,.。中断就是正常的工作被外部事件打断了。,82,中断源的概念,什么可以引起中断?生活中有很多事件可以引起中断:有人按了门铃,电话铃响了,你的闹钟铃响了,你烧的水开了.等等诸如此类的事件,我们把可以引起中断的事件称之为中断源。计算机中也有一些可以引起中断的事件,分为内部中断和外部中断。,83,计算机中的中断,中断是指由于某种随机事件的发生,计算机暂停现行程序的运行,转去执行另一程序,以处理发生的事件,处理完毕后又自动返回原来的程序继续运行。将能引起中断的事件称为中断源。CPU现行运行的程序称为主程序。处理随机事件的程序称为中断服务子程序。,84,中断技术的优点,分时操作 CPU可以同多个外设“同时”工作实时处理 CPU及时处理随机事件故障处理 电源掉电、存储出错、运算溢出,85,中断与过程调用:,中断是随机事件或异常事件引起,调用则是事 先已在程序中安排好;响应中断请求不仅要保护断点地址,还要保护 FLAGS内容;调用指令在指令中直接给出子程序入口地址,中断指令只给出中断向量码,入口地址则在向 量码指向的内存单元中。,86,1.中断指令,格式:INT n说明:n4,中断类型码n=0 255,n 4,XXH,XXH,XXH,XXH,入口的偏移地址,入口的段地址,存放中断服务子程序入口地址的单元的偏移地址,代码段,数据段,该单元在数据段,段地址=DS,87,中断指令 INT n,执行的操作:PUSH(FLAGS);将FR的内容压入堆栈TF 0IF 0PUSH(CS);将返回地址的段地址压入堆栈PUSH(IP);将返回地址的偏移地址压入堆栈(IP)(n*4);将中断服务程序的偏移地址存入IP寄存器(CS)(n*4+2);将中断服务程序的段地址存入CS寄存器n为类型号,值在0255之间。,将中断允许标志IF和单步标志TF清零,88,中断向量:是指中断服务程序的入口地址(包括偏移地址和段地址),一个中断向量占据4字节空间。中断向量表是8088系统内存中最低端1K字节空间,其中存放着256种类型的中断例行程序的入口地址,构成一个中断向量表。每个中断向量分配4个连续的字节单元,所以中断类型号乘以4得到一个单元地址,由此地址开始的前两个单元存放的是中断处理程序入口地址的偏移量,后两个单元存放的是中断处理程序入口地址的段地址。在中断响应过程中,CPU通过从接口电路获取的中断类型号(中断向量号)计算对应中断向量在表中的位置,并从中断向量表中获取中断向量,将程序流程转向中断服务程序的入口地址。,89,内容,地址,00000H,00004H,00008H,类型0的中断向量(除法错),类型1的中断向量(单步),类型2的中断向量(非屏蔽中断),类型3的中断向量(断点),类型4的中断向量(溢出中断INTO),0000CH,4*N,00010H,类型N的中断向量,8086微机的中断向量区(00000H003FFH),90,中断指令的执行过程,将FLAGS压入堆栈;将INT指令的下一条指令的CS、IP压栈;由n4得到存放中断向量的地址;将中断向量(中断服务程序入口地址)送CS和IP寄存器;转入中断服务程序。,91,中断指令的执行过程,n4,22H,11H,00H,67H,IP,CS,68122H,MOV,代码段,数据段,堆栈段,SP,FLAGSH,FLAGSL,IPH,CSL,CSH,IPL,SP,SP,SP,92,中断指令例,执行程序段:CS IP 6200H:0110H INT 21H6200H:0112H MOV AX,BX,12H,01H,00H,62H,SP=1200,FLAGSL,FLAGSH,SP=11FA,执行INT指令后,堆栈段,93,中断指令例,执行INT 21H指令后 IP=21H4 CS=(21H4)+2,0084H,23H,11H,00H,20H,IP,CS,数据段,代码段,XX,21123H,中断服务子程序,94,2.溢出中断指令,格式:INTO 若OF=1,则启动一个类型为4的中断过程,给出一个出错标志,如果OF=0,不做任何操作。INTO指令通常安排在有符号数加减运算指令之后。,相当于,INT 4,95,3.中断返回指令,格式:IRET中断服务程序的最后一条指令,负责,恢复断点恢复标志寄存器内容,96,六、处理器控制指令,对标志位的操作与外部设备的同步,说明见p143表,97,本章课外自学内容:,BCD码调整指令远地址指针指令LDS,LES条件循环指令LOOPZ,LOOPNZPentium新增指令,98,结束语:,掌握:指令的格式及意义;指令对操作数的要求及对标志位的影响;指令的应用。,