自动化科学与电气工程学院微机原理2020/6/11第3章8086/8088微处理器及其系统•1.8086/8088微处理器结构–微处理器功能结构–寄存器结构(编程结构)•2.8086/8088存储器组织•3.8086/8088工作方式–时序和引脚信号–最大和最小模式•4.8086/8088寻址方式•5.8086/8088指令系统自动化科学与电气工程学院微机原理2020/6/12第3章8086/8088微处理器及其系统92种基本指令,全部公开,六个功能组(六大类)一、数据传送(Datatransfer)二、算术运算(Arithmetic)三、逻辑运算和移位指令(Logic&Shift)四、串操作(Stringmanipulation)五、控制转移(ControlTransfer)六、处理器控制(ProcessorControl)自动化科学与电气工程学院微机原理2020/6/13第3章8086/8088微处理器及其系统8086/8088指令一览表–逻辑移位/串处理指令类型助记符逻辑移位逻辑运算AND,TEST,OR,XOR,NOT移位运算SHL,SAL,SHR,SAR循环移位ROL,ROR,RCL,RCR串处理串操作MOVS,CMPS,SCAS,LODS,STOS重复控制REP,REPE/REPZ,REPNE/REPNZ自动化科学与电气工程学院微机原理2020/6/145.8086/8088指令系统三、逻辑运算和移位指令(Logic&Shift)–逻辑运算指令格式–逻辑与ANDD,S;DEST∧SRC→DEST–逻辑或ORD,S;DEST∨SRC→DEST–异或XORD,S;DEST⊕SRC→DEST–逻辑非NOTD;DEST→DEST–TESTTESTD,S;DEST∧SRC1.两个操作数要满足类型组合:D(R或M),S(R/M/N)2.TEST不改变目标操作数内容,其后常紧跟条件转移指令以实现判断分支,AND将运算结果送目标操作数3.逻辑操作按位进行自动化科学与电气工程学院微机原理2020/6/155.8086/8088指令系统三、逻辑运算和移位指令(Logic&Shift)–逻辑运算指令应用•AND指令通常用于将操作数的某些位清0ANDAL,0FCH;AL的低2位清0,其余保持不变•TEST指令常用于“取出”操作数的某一位来进行判断TESTAL,20H;取AL的D5位•OR指令通常用于将操作数的某些位置1ORAL,80H;AL的D7位置1,其余位保持不变•XOR指令通常用于将操作数的某些位取反XORAL,0FH;AL的低4位取反,高4位保持不变•NOT指令按位取反MOVBX,8A51H;(1000101001010001)NOTBX;BX=75AEH(0111010110101110)自动化科学与电气工程学院微机原理2020/6/165.8086/8088指令系统三、逻辑运算和移位指令(Logic&Shift)–移位指令格式:SAL/SAR/SHL/SHROPRD,1;移1位SAL/SAR/SHL/SHROPRD,CL;移CL次自动化科学与电气工程学院微机原理2020/6/175.8086/8088指令系统三、逻辑运算和移位指令(Logic&Shift)–循环移位指令格式:ROL/ROR/RCL/RCR操作数,1;移1位ROL/ROR/RCL/RCR操作数,CL;移位CL次自动化科学与电气工程学院微机原理2020/6/185.8086/8088指令系统三、逻辑运算和移位指令(Logic&Shift)–小结•AND、TEST、OR、XOR指令对标志位的影响:固定使CF=OF=0;根据运算结果改变SF、ZF、PF。•NOT指令形式上只有一个操作数;不影响任何标志位。•SAL、SAR、SHL、SHR指令的使用方法相同,对标志位的影响也相同:移出位给CF;根据结果改变SF、ZF、PF;当移位次数为1时,影响OF。•ROL、ROR、RCL、RCR的使用方法相同,对标志位的影响相同:移出位给CF;当移位次数为1时,影响OF。•SHR/SAR每移1位,可视为分别将无符号数和带符号数除以2;使用SHL/SAL每移1位,可视为将数值乘以2。自动化科学与电气工程学院微机原理2020/6/195.8086/8088指令系统思考–将两个非压缩BCD码(高位在BL,低位在AL)合并成压缩BCD码送AL。MOVCL,4;将计数值送CLSHLBL,CL;将高位移到BL的高4位ANDAL,0FH;清零AL高4位ORAL,BL;合并AL和BL形成压缩BCD码–分析下面的程序段所实现的功能(可以用别的指令实现吗)SHLAL,1;将AL中数左移1位,得2XMOVBL,AL;2X保存在BL中MOVCL,2;移位次数置入CL中SHLAL,CL;2X左移2位,得8XADDAL,BL;2X加上8X,所以AL中为10X自动化科学与电气工程学院微机原理2020/6/1105.8086/8088指令系统四、串操作(Stringmanipulation)–串内存中一段地址连续的字节或字存储单元。通常用于存放同一类数据。数据源:源串;数据结果:目的串。–串操作对串中各项进行操作(传送、比较、检索、装入、存储),也叫数据块操作。串操作指令是86/88实现内存之间数据传送的一组指令。–串操作重复前缀加在串操作指令之前,根据不同条件判断是否重复执行串操作。可以实现对整个串的同一种操作。自动化科学与电气工程学院微机原理2020/6/1115.8086/8088指令系统四、串操作(Stringmanipulation)在同一个段内实现字符串传送时,应该设置DS和ES为同一数值,仍由SI和DI分别指出源串操作数和目的操作数的偏移地址。串操作指令是唯一的一组源操作数和目的操作数都在存储单元的指令。方向标志DF决定指针的修改方向—DF=0,指针加;DF=1,指针减。串元素的类型决定修改量——字节串,指针加减1;字串,指针加/减2。加有重复前缀时,固定使用CX计录并修改重复次数,再根据CX值及标志位ZF判断是否重复进行串操作。前缀本身不影响任何标志位。DS:SI——默认的源串指针,可段超越ES:DI——固定的目标串指针,不允许段超越DFCX自动化科学与电气工程学院微机原理2020/6/1125.8086/8088指令系统四、串操作(Stringmanipulation)–串传送MOVS(Movestring)MOVSD,S;((ES):(DI)←((DS):(SI))MOVSB(字节);(SI)←(SI)±1,(DI)←(DI)±1,MOVSW(字);(SI)←(SI)±2,(DI)←(DI)±2,REPCLD,DF=0,SI/DI增加;STD,DF=1,SI/DI递减MOV单指令不能完成存储单元之间的数据传送;MOVS指令就是为解决存储单元之间数据传送而设置的MOVSB/MOVSW隐含了源、目的操作数自动化科学与电气工程学院微机原理2020/6/1135.8086/8088指令系统思考:重叠串操作34H,0F2H,1CH,89H,76H,6BHSIDISTD;设DF=16B76891CF2346B76891CF234XXMOVCX,5;串操作次数MOVSI,1005MOVDI,1007REPMOVSB4000H:1000H4000H:1006H4000H:1004H4000H:1005H4000H:1003H4000H:1004H4000H:1002H4000H:1003H4000H:1001H4000H:1000H4000H:1002H自动化科学与电气工程学院微机原理2020/6/1145.8086/8088指令系统四、串操作(Stringmanipulation)–CMPS(Comparestring)串比较指令CMPSD,S;((ES):(DI)-(DS):(SI)),结果不存,置标志CMPSB;(字节)(SI)(SI)±1,(DI)←(DI)±1CMPSW;(字)(SI)(SI)±2,(DI)(DI)±2与前缀REPZ连用两数相减,只影响标志,不影响操作数,其它操作规定与MOVS同。–SCAS(Scanstring)串扫描、搜索指令SCASSCASB;(字节)(AL)-((ES):(DI)),(DI)(DI)±1SCASW;(字)(AX)-((ES):(DI)),(DI)(DI)±2与前缀REPNE连用(DI)—字符串起始地址,(AL)或(AX)—关键字两数相减,只影响标志,不影响操作数,其它特性同MOVS自动化科学与电气工程学院微机原理2020/6/1155.8086/8088指令系统四、串操作(Stringmanipulation)–LODS(Loadfromstring)读串指令LODS;(字节)(AL)((DS):(SI)),(SI)(SI)±1;(字)(AX)((DS):(SI)),(SI)(SI)±2LODSB;(字节)(AL)((DS):(SI)),(SI)(SI)±1LODSW;(字)(AX)((DS):(SI)),(SI)(SI)±2–STOS(Storeintostring)存入串指令STOS;(字节)((ES):(DI))(AL),(DI)(DI)±1;(字)((ES):(DI))(AX),(DI)(DI)±2STOSB;(字节)((ES):(DI))(AL),(DI)(DI)±1STOSW;(字)((ES):(DI))(AX),(DI)(DI)±2与REP联用时,(CX)←缓冲区长度。用来建立一串相同的值,初始清零。自动化科学与电气工程学院微机原理2020/6/1165.8086/8088指令系统四、串操作(Stringmanipulation)–PRACTICEANDPROGRESS–STOSB/LODSBStore‘a’to15memorycells,withstartaddressES:DI3000H:1230H,thenloadcharacteragain.–CMPSB/SCASBComparestring‘aaA’with‘aaa’,checkflagbitCFSearchcharacter‘a’with‘china’,checkflagbitCF自动化科学与电气工程学院微机原理2020/6/117第3章8086/8088微处理器及其系统8086/8088指令一览表–控制转移指令类型助记符控制转移无条件转移JMP条件转移JE/JZ,JNE/JNZ,JS,JNS,JO,JNOJP,JNP,JC,JNC,JCXZJA/JNBE,JAE/JNB,JB/JNAEJBE/JNAJG/JNLE,JGE/JNL,JL/JNGE,JLE/JNG循环控制LOOP,LOOPE/LOOPZ,LOOPNE/LOOPNZ过程调用CALL,RET中断指令INT,INTO,IRET处理机控制CLC,STC,CMC,CLD,STD,CLI,STINOP,HLT,WAIT,ESC,LOCK自动化科学与电气工程学院微机原理2020/6/1185.8086/8088指令系统五、控制转移指令概述–控制转移指令对IP(或CS:IP)进行强制性修改,只有一个操作数,通过该操作数给出目标地址—新的IP(或CS:IP)•段内转移(CS不变,IP改变)(IP)←(IP)当前+OPR(DISP)–短转移(short)相对偏移量为1字节,取值范围-128~+127,操作数为8位(正值向后跳转,负值向前跳转)–近转移(near)相对偏移量为1个字,取值范围-32768~+32767,操作数为16位(正值向后跳转,负值向前跳转)•段间转移(CS改变,IP改变)–远转移(far)目标地址与正常顺序IP值不在同一个代码段内自动化科学与电气工程学院微机原理2020/6/1195.8086/8088指令系统•五、控制转移指令-无条件转移JMP–指令格式:JMP目标标号(操作数/目标地址)–操作数(目标地址)的给出方式:•段内直接给出:JMP(NE