
微机系统与接口课件:CH2_2第二章微型计算机指令系统(续).ppt
59页东南大学东南大学微机系统与接口微机系统与接口第二章第二章 微型计算机指令系统微型计算机指令系统(续续)Ø数据传送数据传送 (DATA TRANSFER) 通用通用/ I/O /目标地址传送目标地址传送/标志传送标志传送Ø算术运算算术运算(Arithmetic) 整型数据处理整型数据处理Ø逻辑运算与位操作逻辑运算与位操作(Logic) 逻辑数据处理逻辑数据处理Ø串操作串操作(String Manipulation) 字符型数据处理字符型数据处理Ø转移控制转移控制(Control Transfer) 程序流控制处理程序流控制处理ØMPU控制控制(Processor Control) 系统控制管理系统控制管理8086/8088指令系统指令系统(六大类)1东南大学东南大学微机系统与接口微机系统与接口数据传送与寻址方式数据传送与寻址方式ØMOV AL,100; MOV CX,2000H;; ØMOV DS, AX;;MOV CX,,BX;;MOV SI,,DXØMOV AX,,[2000H ] ;MOV AL,,BUFFER(内存)(内存);; MOV CS:[2000H], 30HØMOV AX,, [SI];; MOV BL,, [DI];; MOV AX,SS:[SI] MOV CH,,[BX];; MOV [BP],,SIØMOV SI,,[SI+6];;MOV DL,,TABLE[DI] MOV [BX+100],AL;;MOV DX,,TABLE[BP]ØMOV[BX][SI]COUNT,,AL; MOV DX,[BX][DI+900H]; MOV DX,,[BP+DI+COUNT]ØPUSH ES:[2000H] LEA SI,[BP+DI]COUNT POP ES LDS SI, [DI]COUNT所有数据传输指令所有数据传输指令不应影响标志位不应影响标志位2东南大学东南大学微机系统与接口微机系统与接口数据传送与寻址方式数据传送与寻址方式非法数据传送指令非法数据传送指令:两个操作数的类型不一致两个操作数的类型不一致例如源操作数是字节,而目的操作数是字;或相反例如源操作数是字节,而目的操作数是字;或相反两个操作数不能都是存储器两个操作数不能都是存储器传送指令很灵活,但主存之间的直接传送却不允许传送指令很灵活,但主存之间的直接传送却不允许段寄存器的操作有一些限制段寄存器的操作有一些限制段寄存器属专用寄存器,对他们的操作能力有限段寄存器属专用寄存器,对他们的操作能力有限寻址方式寻址方式:存储器操作数的类型需要明确存储器操作数的类型需要明确默认段寄存器默认段寄存器默认操作数默认操作数3东南大学东南大学微机系统与接口微机系统与接口标志状态寄存器标志状态寄存器Flagsv3个个控制标志位控制标志位v6个算术和逻辑运算结果特征个算术和逻辑运算结果特征奇奇偶偶位位==1偶偶借借进进位位半半进进位位溢溢出出标标志志跟跟踪踪符符号号位位零零标标志志位位中中断断允允许许==1方方向向4东南大学东南大学微机系统与接口微机系统与接口算术运算(算术运算(Arithmetic)指令)指令(1))ADD (Addition))加加法法:8位位/16位位操操作作数数, 影影响响FLAGS ADD dest,src; (dest)←(dest)+(src) ADD AX,[BX]; ADD CL,10H;ADD SP,2;; ADD [2000H], AL; ADD WORD PTR[BX], 20例例 : AL=7EH AH=5BH; ADD AL,AH AL=D9H注注意意::源源操操作作数数和和目目标标操操作作数数不不能能同同时时为为存存储储器器;;不不能能对对段段寄寄存器进行加法运算,存器进行加法运算,段寄存器不能段寄存器不能参加加减法、乘除法运算。
参加加减法、乘除法运算问题:如何影响标志位?CF=1 作为无符号数相加进位(字节作为无符号数相加进位(字节/字字>256/65536))OF=1 当作为有符号数相加溢出(当作为有符号数相加溢出(-128~127/-32768~32767))5东南大学东南大学微机系统与接口微机系统与接口例例 AL=7EH(01111110B) AH=5BH; (01011011B)ADD AL,AH AL=D9H(11011001B)影响标志位:影响标志位:CF=0(加法、无进位)(加法、无进位);;PF=0 (1的个数为奇数注:非逻辑运算,不必关注的个数为奇数注:非逻辑运算,不必关注) ;;AF=1((低低4位向高位向高4位有进位发生)位有进位发生);ZF=0(结果不为零)(结果不为零);SF=1(结果的最高位(结果的最高位MSB为为1));OF=1(运算的结果超过了(运算的结果超过了127127,超出了带符号数的范围),超出了带符号数的范围)。
算术运算(算术运算(Arithmetic)指令)指令(1))6东南大学东南大学微机系统与接口微机系统与接口算术运算(算术运算(Arithmetic)指令)指令(1))ADD (Addition))加法加法:8位位/16位操作数位操作数, 影响 影响FLAGS 3AH + 72H==ACH,没有进位:,没有进位:CF = 0 结果不是零:结果不是零:ZF = 0 最高位最高位D7==1::SF = 1 产生溢出:产生溢出:OF = 1 ACH==10101100B 4个个1,,偶数个偶数个1::PF =1 BBH + 72H=(=(1))2DH,有进位:,有进位:CF = 18EH + 72H=(=(1))00H,结果是零:,结果是零:ZF = 1 最高位最高位D7==0::SF = 0 BBH + 72H=(=(1))2DH,没有溢出:,没有溢出:OF = 0 *应该利用哪个标志,由程序员来决定应该利用哪个标志,由程序员来决定如果将参加运算的操如果将参加运算的操作数认为是无符号数,就应该关心进位;认为是有符号数,作数认为是无符号数,就应该关心进位;认为是有符号数,则要注意是否溢出。
则要注意是否溢出7东南大学东南大学微机系统与接口微机系统与接口ØADC (ADD with Carry) (dest)←(dest)+(src)+(CF) 例:例:MOV BX, OFFSET FIRST;; L2 多位数连加多位数连加: LH MOV SI,OFFSET SECOND ;;L1 MOV AX, [SI];;L1 ADD [BX], AX;;L1+L2(L2) MOV AX, [SI+2];H1 ADC [BX+2],AX;;H1+H2(H2) 类似类似P65例例2.2 5字节字节 ADC指指令令主主要要用用于于多多字字节节数数据据的的加加法法运运算算,,如如果果低低字字节节相相加加时时产产生生进进位位,,则则在在下下一一次次高高字字节节相相加加时时应应将将这这个个进进位位加加进进去去 算术运算(算术运算(Arithmetic)指令)指令(2))??问题问题1:++运算符:++运算符 专用指令:专用指令:目标操作数加目标操作数加1??问题问题2:如何在二进制运算基:如何在二进制运算基础上实现十进制础上实现十进制BCD运算-指令运算-指令 H1 L1 + H2 L28东南大学东南大学微机系统与接口微机系统与接口INC (Increment by 1) (dest)(dest)+1 加一操作加一操作 INC AX; INC DL; INC WORD PTR ES:[2000H] INC BYTE PTR[BX]; INC WORD PTR CS:[DI+20]INC指令的操作数不能为段寄存器指令的操作数不能为段寄存器BYTE PTR或WORD PTR指定随后的存储器操作数的类型为字节或字 伪操作PTRINC指令通常用于循环程序中修改地址。
算术运算(算术运算(Arithmetic)指令)指令(2))9东南大学东南大学微机系统与接口微机系统与接口 算术运算(算术运算(Arithmetic)指令)指令(3))AAA*(ASCII adjust for Addition) 非压缩非压缩BCD加法调整加法调整(单字节)只对(单字节)只对Unpacked BCD (00-09H)有意义有意义;; 隐含操作数为 隐含操作数为:AL,AH等等效效::IF((((AL))&(0FH)>9))OR ((AF))=1 THEN (AL)+6; AH+1;AF=CF=1; (AL)&0FH ELSE (AL)&0FH; 例例:MOV AH,0 MOV AL,7 MOV BL,8 ADD AL,BL;(AL=0FH); AAA; (AL+6=21=10101;10101 &0FH=0101=5) (AH=1,AL=5) 调调整整前前相相加加结结果果放放在在AL中中,,调调整整后后,,非非压压缩缩BCD的的结结果果的的低低位位放放在在AL中中,,高高位位在在AH中中BCD码码调调整整指指令令,,使使CPU能能够够对对用用BCD码码表表示示的的十十进进制制数数进进行行加加减减乘乘除除运运算算,,并并将将结果调整成正确的结果调整成正确的BCD值。
值打打*指令一般指令一般了解了解10东南大学东南大学微机系统与接口微机系统与接口 算术运算(算术运算(Arithmetic)指令)指令(3))AAA*(ASCII adjust for Addition) 非压缩非压缩BCD加法调整加法调整P67例例2.3 4609+3875=? LEA SI,STRING1LEA BX,STRING2LEA DI,SUMCLCMOV AL,[SI]ADC AL,[BX]AAAMOV [DI],AL MOV AL,[SI+1]ADC AL,[BX+1]AAAMOV [DI+1],AL….. String1(SI)String2(BX)SUM0900060405070803041. ASCII码码BCD带进位带进位(CF)加加—AAA调整调整2. 顺序顺序--罗列罗列(穷举穷举)结构结构11东南大学东南大学微机系统与接口微机系统与接口 算术运算(算术运算(Arithmetic)指令)指令(3))AAA*(ASCII adjust for Addition) P67例例2.3 4609+3875=? LEA SI,STRING1 LEA BX,STRING2 LEA DI,SUM MOV CX,4 CLCNEXT::MOV AL,[SI] ADC AL,[BX] AAA MOV [DI],AL INC SI INC BX INC DI DEC CX JNZ NEXT 3. (循环循环/条件指令条件指令)结构结构 String1(SI)String2(BX)SUM‘9’‘0’‘6’‘4’‘5’‘7’‘8’‘3’04090006040507080304 × √12东南大学东南大学微机系统与接口微机系统与接口算术运算(算术运算(Arithmetic)指令)指令(4))DAA*(Decimal adjust for Addition) 压缩压缩BCD加法调整加法调整隐隐含含操操作作数数是是AL。
DAA只只对对AL的的内内容容进进行行调调整整,,不不会会改改变变AH两两个个BCD码码相相加加后后可可能能得得到到不不正正确确的的BCD结结果果,,可可用用DAA指指令令对对AL寄寄存存器中的器中的“和和”进行调整,即可得到预期的结果进行调整,即可得到预期的结果单字节)只对(单字节)只对Packed BCD (00-99H) 有意义有意义;;等效:等效:IF((((AL))&(0FH)>9))OR ((AF))=1 THEN (AL)+6; AF=1; IF((((AL))>9F ))OR((CF))=1 THEN (AL)+60H; CF=1;例例: 68+59=? 127 得到得到压缩压缩BCD码码MOV AL,68H; MOV BL,59H;ADD AL,BL;(AL=C1H 不正确不正确 ,AF=1);DAA;(CF=1=AF , AL=27H, 可连加可连加)上例的上例的DAA调整,相当于加调整,相当于加66H,,即相当于即相当于ADD AL,66H打打*指令一般了解指令一般了解13东南大学东南大学微机系统与接口微机系统与接口算术运算(算术运算(Arithmetic)指令)指令(5)) 减法 减法 乘法 乘法 除法除法SUB/SBB/DEC/ MUL/AAM DIV/AAD AAS/DAS*(调整) (调整) IMUL(有符号乘有符号乘) IDIV (有符号除有符号除) 例例:减法:不允许两个存储器相减。
减法:不允许两个存储器相减8位或位或16位位(注:注:CF=1 借位)借位) SUB AL,CH; (dest)←←(dest)-(src) SUB BYTE PTR[2000H], 20 SBB AX, [BP+1000] ;; (dest)←←(dest)-(src)-(CF) 带借位的减指令主要用于多字节的减法带借位的减指令主要用于多字节的减法 DEC SI; (dest)←←(dest)-1 DEC BYTE PTR [SI]; 打打*指令一般了解指令一般了解14东南大学东南大学微机系统与接口微机系统与接口 当无符号数的较小数减较大数,因不够减而产生借位,此时CF=1; 带符号数相减如果结果溢出,则OF=1.算术运算(算术运算(Arithmetic)指令)指令(5))15东南大学东南大学微机系统与接口微机系统与接口算术运算(算术运算(Arithmetic)指令)指令(6))ØNEG (Negate) 8位位/16位求补位求补(改变符号改变符号)绝对值不变绝对值不变NEG dest; (dest)←0-(dest)影响影响6个运算标志位个运算标志位例例:NEG AL; NEG BX; NEG BYTE PTR CS:[2000H]AL=30HNEG AL D0HØCMP (Compare) (dest)-(src)影响影响6个运算标志位个运算标志位例例: CMP AL,CH; CMP AX,[BX]; CMP BYTE PTR[2000H], 20 JC NEXT ; 利用利用FLAGS结果结果,无符号数比较无符号数比较 JG NEXT ; 有符号数比较有符号数比较16东南大学东南大学微机系统与接口微机系统与接口算术运算(算术运算(Arithmetic)指令)指令(7))16位无符号数乘法位无符号数乘法 MUL src; 默认默认AX*(src) 积积= DX(高高16位)位)|AX(低低16位位)8位无符号数乘法位无符号数乘法 MUL src; 默认默认AL* (src) 积积= AX(16位位) MUL指指令令对对CF和和OF有有影影响响::若若运运算算结结果果的的高高半半部部分分(AH或或DX中中)为为0,则,则CF=OF=0,否则否则CF=OF=1 例:例:AL=42H(66),CL=28H (40) MUL CLAX=0A50H(2640) AX,,0A50H,, CX=0333H MUL CX DX/AX=0020H/ 0FDF0H17东南大学东南大学微机系统与接口微机系统与接口算术运算(算术运算(Arithmetic)指令)指令(7))16位无符号数除法位无符号数除法 DIV src; 默认被除数默认被除数DX(高高16位)位)|AX(低低16位位) /src(16位位) 结果结果 DX=余数余数(16位位) AX=商商(16位位) 8位无符号数除法位无符号数除法 DIV src; 默默认认被被除除数数AX(16位位)/src(字字节节))结结果果 AH=余余数数(8位位) AL=商商(8位位) 不不允允许许两两个个字字长长相相等等的的操操作作数数相相除除,,若若被被除除数数和和除除数数的的字字长长相等,则须在相等,则须在DIV指令前将被除数的高位扩展指令前将被除数的高位扩展8个零或个零或16个零。
个零例:DX=20H,AX=0FDF2H SI=333H DIV SIAX=0A50H DX=0002H CL=42H DIV CL 0028H 注意:注意:除除0/溢出溢出(字节除:(字节除:商商>255 OR 字字:商商>65535)除)除零中断零中断18东南大学东南大学微机系统与接口微机系统与接口算术运算(算术运算(Arithmetic)指令)指令(8))ØIMUL/IDIV 有符号数乘有符号数乘/除法除法 IMUL src; 字节乘法字节乘法 (AX) ←(src)*AL; 字乘法字乘法 (DX:AX) ←(src)*AX IDIV src; 字节除法字节除法 (AL) ←(AX)/(src) (AH) ←(AX)%(src) 字除法字除法 (AX) ←(DX:AX)/(src) (DX) ←(DX:AX)%(src) 指指令令将将两两个个操操作作数数均均按按带带符符号号数数处处理理,,8位位和和16位位带带符符号号数数的的取取值值范范围围是是-128~+127 –32768~+32767. 指指令令对对CF和和OF有有影影响响::若若运运算算结结果果的的高高半半部部分分(AH或或DX中中)仅仅为为低低半半部部分分符符号号位位的的扩扩展展,,则则CF=OF=0,否否则则若若高半部分包含运算的有效数字则高半部分包含运算的有效数字则CF=OF=1。
注意:注意:除除0/溢出溢出(字节除:商超出(字节除:商超出(-128~+127) OR 字字:商商超出超出(-32768~+32767))除零除零中断中断若被除数和除数的字长若被除数和除数的字长相等,则须在相等,则须在IDIV指令指令前将被除数的符号位扩前将被除数的符号位扩展,使之成为展,使之成为16位或位或32位数19东南大学东南大学微机系统与接口微机系统与接口ØCBW/CWD 扩展字长扩展字长(字节字节字字; 字字双字双字)无符号数:高位添加足够个数的零无符号数:高位添加足够个数的零有符号数:高位添加足够个数的符号位有符号数:高位添加足够个数的符号位CBW:将一个字节扩展成为字将一个字节扩展成为字,隐含操作数:隐含操作数:AL AH CWD:将一个字扩展成为双字将一个字扩展成为双字,隐含操作数:隐含操作数:AX DX比较比较MOV AL,4FH 和和 MOV AL,0F8H CBW CBW算术运算(算术运算(Arithmetic)指令)指令(8))20东南大学东南大学微机系统与接口微机系统与接口算术运算(算术运算(Arithmetic)指令)指令(8))ØAAM* (ASCII adjust for Multiply) AL寄寄存存器器中中的的二二进进制制数转换成不压缩数转换成不压缩BCD码,十位放在码,十位放在AH中,个位放在中,个位放在AL中。
中 隐含操作数:隐含操作数:AL AH 等等效效::AH(AL)/10; ((商商));; (AL)(AL)%10 (余余数数) 根据根据AL中的结果改变中的结果改变SF,,ZF,,PF 单字节单字节!例:例:7*9=??MOV AL,07H ;(AL)=07HMOV BL,09H ;(BL)=09HMUL BL ;(AX)=07H*09H=003FHAAM ;(AH)=06H,(AL)=03H,(SF)=0,(ZF)=0,(PF)=1打打*指令一般了解指令一般了解21东南大学东南大学微机系统与接口微机系统与接口ØAAD*(( ASCII adjust for Divide)):Unpacked BCD调整调整隐含操作数:隐含操作数:AL AH AAD与其它ASCII调整指令不同,AAD不是在除法之后,而是在除法之前进行调整,然后用DIV进行除法,所得之商还需要用AAM进行调整,才能得到正确的非压缩BCD码的结果。
ØAL=AH*10+AL;AH=0 单字节单字节!((AX HEX) 注意:注意:AAD----DIV((B))----AAM例:例:73/2=?MOV AX,0703H ;(AH)=07H,(AL)=03HMOV BL,02H ;(BL)=02HAAD ;(AL)=49H(即十进制数即十进制数73)DIV BL ;(AL)=24H(商商),(AH)=01H(余数余数)AAM ;(AH)=03H,(AL)=06H 算术运算(算术运算(Arithmetic)指令)指令(8)22东南大学东南大学微机系统与接口微机系统与接口8086/8088指令系统指令系统(六大类六大类)Ø数据传送数据传送 通用通用/ 输入输出输入输出 / 目标地址传送目标地址传送/标志传送标志传送 Ø算术运算算术运算 整型数据处理整型数据处理Ø逻辑运算与位操作逻辑运算与位操作 逻辑数据处理逻辑数据处理Ø串操作串操作 字符型数据处理字符型数据处理Ø转移控制转移控制 程序流控制处理(条件程序流控制处理(条件/无条件)无条件)ØMPU控制控制 系统控制管理系统控制管理23东南大学东南大学微机系统与接口微机系统与接口逻辑运算与移位(逻辑运算与移位(Logical & shifting))逻逻 辑辑 运运 算算AND dest,src; AND AX, [BX]; AND CL,08HOR dest, src; OR AL,55H; OR WORD PTR [BX], DXXOR dest, src (logical Exclsive or )⊕ ⊕ XOR AX,AX; XOR CL, [BX]TEST dest,src 逻辑与测试,逻辑与测试,仅影响标志位仅影响标志位 TEST AL,80H; TEST AX,0FFFFH;;ZF= AND AL,80H; AND AX,0FFFFH.TEST与与AND指指令令 的的差差别别. 常常用用于于位位判判别别,,与与条条件件转转移移指指令令一一起起,,共共同同完完成成对对特特定位状态的判断,并实现相应的程序转移。
定位状态的判断,并实现相应的程序转移NOT dest ;将操作数按位取反将操作数按位取反 B:dest=255-dest; W:dest=65535-dest NOT AL; NOT WORD PTR [BX] NOT BYTE PTR ES: [2000H] 24东南大学东南大学微机系统与接口微机系统与接口逻辑运算与移位(逻辑运算与移位(Logical & shifting))逻逻 辑辑 运运 算算—位操作位操作/判别判别. 8086/8088无直接位操作:无直接位操作: 如如 SETB/CLRB/JB/JNB置位(置置位(置1))可采用可采用OR指令指令 OR AL, 80H ;BIT7=1 OR CL, 04H 复位(清复位(清0))可采用可采用AND 指令指令 AND AL, 7FH ;BIT7=0实现某些位求反,可采用实现某些位求反,可采用XOR 指令指令如:如:MOV AL, 0FH; ((AL))=((00001111B)) XOR AL, 0AAH;((AL))=((10100101B)实现了)实现了BIT1,,3,,5,,7位求反位求反XORXOR的另一个用途:将寄存器的内容清零的另一个用途:将寄存器的内容清零 XOR AX,AXXOR AX,AX25东南大学东南大学微机系统与接口微机系统与接口逻辑运算与移位(逻辑运算与移位(Logical & shifting))逻辑移位逻辑移位( Logical shifting)SHL/SAL ((SHift logical Left/Shift Arithmetic Left)) 1位位/CL位位 相相当当于于无无符符号号数数*2/无无符符号号数数*2的的CL次方位次方位 SHL/SAL dest,1 ; SHL AL,1; SHL CX,1 SHL/SAL dest,CL SHL WORD PTR[BX],CL CF dest(MSB… LSB) 0 移一次移一次 当当 移位后移位后MSB≠CF则则OF=1SHR((Shift logical right))相当于无符号数相当于无符号数/2SHR dest, 1(CL) 0dest(MSB…LSB)CF移一次移一次 当移位后新的最高位和次高位不等则当移位后新的最高位和次高位不等则OF=126东南大学东南大学微机系统与接口微机系统与接口逻辑运算与移位(逻辑运算与移位(Logical & shifting))算术移位(算术移位(Arithmetic Shifting)SAR(Shift Arithmetic right) 带符号带符号/2SAR dest, 1; SAR dest,CL MSBdest(MSB…LSB)CF算术右移和逻辑右移区别:算术右移最高位保持不变算术右移和逻辑右移区别:算术右移最高位保持不变 MOV AL, 10001000B; SAR AL,1 ;10001000B=(88H= -78H) /2 AL=11000100B(C4H=-60= - 3CH) 27东南大学东南大学微机系统与接口微机系统与接口z由于移位指令可以实现乘2的若干次方,且移位指令比乘法除法指令速度快得多,一般用移位指令代替乘法除法指令,速度可提高10倍甚至更多。
逻辑运算与移位(逻辑运算与移位(Logical & shifting))28东南大学东南大学微机系统与接口微机系统与接口逻辑运算与移位(逻辑运算与移位(Logical & shifting))循循环环移移位位指指令令(Rotate Shifting) 8位位或或16位位操操作作数数移移位位/循循环环 不带进位标志不带进位标志CFROL((Rotate left))ROL dest 1/CLAL=10001000B ROL AL, 1 AL= ROR(Rotate right)ROR dest 1/CLROR WORD PTR[BX], CLCFCF00010001B CF=1AL=10001000BROR AL, 1 AL=01000100B CF=0 AL=84H 48H (高低四位交换高低四位交换, ,右移右移四位)四位)29东南大学东南大学微机系统与接口微机系统与接口逻辑运算与移位(逻辑运算与移位(Logical & shifting))循环移位指令循环移位指令(Rotate Shifting)RCL(Rotate Through Carry Flag left)带进位标志带进位标志CFRCL dest 1/CLRCR(Rotate Through Carry Flag right)RCR dest 1/CLCFDmax …… D1 D030东南大学东南大学微机系统与接口微机系统与接口8086/8088指令系统指令系统(六大类六大类)Ø数据传送数据传送 通用通用/ 输入输出输入输出 / 目标地址传送目标地址传送/标志传送标志传送 Ø算术运算算术运算 整型数据处理整型数据处理Ø逻辑运算与位操作逻辑运算与位操作 逻辑数据处理逻辑数据处理Ø串操作串操作 字符型数据处理字符型数据处理Ø转移控制转移控制 程序流控制处理(条件程序流控制处理(条件/无条件)无条件)ØMPU控制控制 系统控制管理系统控制管理31东南大学东南大学微机系统与接口微机系统与接口标志控制寄存器标志控制寄存器Flags (位位)Ø TF 跟踪标志位跟踪标志位 TF= 1,使,使CPU处于单步执行指令处于单步执行指令的工作方式。
这种方式便于进行程序的调试每执的工作方式这种方式便于进行程序的调试每执行一条指令后,自动产生一次内部中断,从而使用行一条指令后,自动产生一次内部中断,从而使用户能逐条指令地检查程序户能逐条指令地检查程序Ø IF 中断允许标志位中断允许标志位 IF= l使使CPU可以响应可屏蔽中可以响应可屏蔽中断请求 IF= 0使使CPU禁止响应可屏蔽中断请求禁止响应可屏蔽中断请求ØDF 方向标志位方向标志位 DF= l 使串操作按减地址方式进行使串操作按减地址方式进行也就是说,从高地址开始,每操作一次地址减小一也就是说,从高地址开始,每操作一次地址减小一次DF==0使串操作按增地址方式进行使串操作按增地址方式进行 3个控制标志位个控制标志位32东南大学东南大学微机系统与接口微机系统与接口串操作(串操作(String Manipulation))MOVSB-W/CMPSB-W/ SCANSB-W/LODSB/STOSWSIDIB/WB/WCX个单元个单元(字节或(字节或字)即重字)即重复循环的复循环的次数由次数由CX决定决定方向+DF=0SI=src pointer (DS) DI=dest pointer(ES) DF控控制制INC((DF=0))/DEC B+-1/W+-2重复前缀:重复前缀: REP(Z)=REPEREPNZ=REPNE33东南大学东南大学微机系统与接口微机系统与接口z串操作总是用SI存放原操作数偏移地址,用DI存放目标操作数偏移地址。
原操作数默认在DS段中,可段超越;目标操作数默认在ES段中,不允许段超越z串操作指令可以带操作数,也可在指令助记符后加“B”或“W”,不允许再写操作数MOVSB DEST,ES:SRC ╳ ╳串操作(串操作(String Manipulation))34东南大学东南大学微机系统与接口微机系统与接口串操作功能与默认操作数串操作功能与默认操作数REP MOVS ((CX次)次) REPE((Z))CMPS/SCAS (重复至(重复至CX=0或或ZF=0))REPNE((ZF=0))Repeat while (CX≠0 )and (ZF=0)以以指令结果与指令结果与CX计数为条件计数为条件 MOVSB /W----((ES):(DI))((DS): ( SI))不影响标志位不影响标志位CMPSB/W----((ES):(DI)) - ((DS): ( SI)) 影响标志位影响标志位SCASB/W---- (AL)/(AX)–((ES): (DI)) 影响标志位影响标志位 LODSB/W(load String): (AL/AX)((DS): (SI)) STOSB/W(Store string) : (AL/AX)((ES): (DI)) 35东南大学东南大学微机系统与接口微机系统与接口8086/8088指令系统指令系统(六大类六大类)Ø数据传送数据传送 通用通用/ 输入输出输入输出 / 目标地址传送目标地址传送/标志传送标志传送 Ø算术运算算术运算 整型数据处理整型数据处理Ø逻辑运算与位操作逻辑运算与位操作 逻辑数据处理逻辑数据处理Ø串操作串操作 字符型数据处理字符型数据处理Ø转移控制转移控制 程序流控制处理(条件程序流控制处理(条件/无条件)无条件)ØMPU控制控制 系统控制管理系统控制管理36东南大学东南大学微机系统与接口微机系统与接口转移控制转移控制(Control Transfer) ----程程序流控制序流控制两大类两大类:•转移控制转移控制(Control Transfer)•过程调用(过程调用( Call a procedure )转移控制要点转移控制要点:⑴ ⑴ 转移到新地址转移到新地址-CS:IP⑵ ⑵ 什么条件下转移什么条件下转移37东南大学东南大学微机系统与接口微机系统与接口转移控制转移控制 ((Control Transfer)-程序流程序流转移指令转移指令---无条件跳转无条件跳转(Unconditional Jump)CS:IP= Instruction Pointer 下条指令地址(指针)下条指令地址(指针) 1.段内直接短转移:段内直接短转移:JMP SHORT_LABEL; 近近短短跳跳转转 当当前前IP的的–128~+127内内 IP=IP+disp8 38东南大学东南大学微机系统与接口微机系统与接口2.段内直接转移段内直接转移 JMP((JUMP))NEAR_LABEL IP=IP+disp16段内段内跳转跳转3.段内间接转移段内间接转移JMP reg16 ;(IP) (reg16)JMP MEN16 ;(IP) (mem16) 4.段间直接转移段间直接转移JMP FAR_LABEL; 段间地址段间地址 CS:IP=新地址新地址IP OFFSET FAR_LABEL ; CS SEG FAR_LABEL 转移控制转移控制 ((Control Transfer)-程序流程序流39东南大学东南大学微机系统与接口微机系统与接口5.段间间接转移段间间接转移JMP mem32 ;(IP) (mem32) ;(CS) (mem32+2)段内跳转应为16位地址段间跳转应为32位地址JMP SHORT JMP NEAR PTR JMP 2000H; JMP BX; JMP 0FFFFH::0 (热启动热启动)JMP FAR PTR TABLE[SI]; JMP NEAR PTR [BP][DI]转移控制转移控制 ((Control Transfer)-程序流程序流40东南大学东南大学微机系统与接口微机系统与接口转移控制转移控制 ((Control Transfer)转移指令转移指令---条件跳转条件跳转(conditional Jump) (利用利用CMP,TEST,计算计算,移位指令等结果改变程序流移位指令等结果改变程序流) JCC SHORT_LABEL; 限近短跳转限近短跳转 IP –128+127满满足足条条件件 IP=IP+disp8,,否否则则顺顺序序执执行行 ((IF ELSE) JZ/JE --JNZ/JNE (ZF)=1 --(ZF)=0 JS --JNS (SF)=1 --(SF)=0 JP/JPE --JNP/JPO (PF)=1 --(PF)=0 JO --JNO (OF)=1 --(OF)=0 JC --JNC (CF)=1 --(CF)=041东南大学东南大学微机系统与接口微机系统与接口转移控制转移控制 ((Control Transfer)转移指令转移指令---条件跳转条件跳转(conditional Jump) Unsigned大小比较大小比较 P98表表2.7JB/JNAE --JNB/JAE (CF)=1 -(CF)=0 JA/JNBE --JNA/JBE (CF)=0&((ZF)=0 --(CF)=1 OR (ZF)=1 signed大小比较大小比较JG/JNLE --JNG/JLE (SF)=(OF) &(ZF)=0 ---(SF)≠(OF)OR(ZF)=1 JL/JNGE --JNL/JGE (SF) ≠(OF) &(ZF)=0 ---(SF)= (OF) OR((ZF))=142东南大学东南大学微机系统与接口微机系统与接口转移控制转移控制 ((Control Transfer)LOOP short_label ; loop CX times 循环控制循环控制 (Loop) LOOPZ/LOOPE short_label; ((loop while zero/equal)) 循环直到循环直到(CX)=0 or (ZF=0)LOOPNE/LOOPNZ short_label; (Loop while NZ/NE) 循环直到循环直到(CX)=0 or (ZF=1) JCXZ if CX=0 Jump to (Jump On CX Zero) CX为零控制调转为零控制调转. Do while/ while Do/ For (i=0;i<100;i++)43东南大学东南大学微机系统与接口微机系统与接口过程调用指令过程调用指令 (( Call a procedure )过过程程((Procedure));;如如果果一一些些程程序序模模块块需需要要在在不不同同地地方方多多次次反反复复地地出出现现使使用用,,则则可可以以将将这这些些程程序序模模块块设设计计成成过过程程,,每每次次需需要要时时进进行行调调用用。
过过程程结结束束后再返回原来调用的地方(下一条指令)后再返回原来调用的地方(下一条指令)相相当当于于高高级级语语言言中中的的子子程程序序Subroutine,,或或函函数数function),),缩短源程序代码总长度缩短源程序代码总长度利利于于实实现现模模块块化化的的程程序序设设计计,,便便于于编编制制、、调调试试和和维护维护------需要利用堆栈技术需要利用堆栈技术,控制与传递参数控制与传递参数44东南大学东南大学微机系统与接口微机系统与接口栈底过程调用指令过程调用指令 (( Call a procedure )CALL 段内段内\段间段间:直接直接/间接调用(过程间接调用(过程/子程序子程序Subroutine) RET (RETF) 过过程程返返回回 (分分远远近近,,产产生生不不同同RET码码(C3/CBH)不但CS:IP发生变化(新地址),而且堆栈SP及其内容均及其内容均发生变化45东南大学东南大学微机系统与接口微机系统与接口过程调用指令过程调用指令 (( Call a procedure )段内直接调用段内直接调用 CALL NEAR_PROC; (SP)(SP)-2,((SP)+1,(SP))(IP); (IP)(IP)+proc_disp段内间接调用段内间接调用 CALL reg16/mem16 …. (SP)(SP)-2,((SP)+1,(SP))(IP); (IP)reg16/mem16段间直接调用段间直接调用 CALL FAR_PROC; (SP)(SP)-2,((SP)+1,(SP))(CS); (CS)SEG F_PROC (SP)(SP)-2,((SP)+1,(SP))(IP); (IP)OFFSET F_PROC段间间接调用段间间接调用 CALL MEM32; (SP)(SP)-2,((SP)+1,(SP))(CS);(CS)MEM32+2, (SP)(SP)-2,((SP)+1,(SP))(IP); (IP)MEM32 例:例:CALL 2000H; CALL BX; CALL NEAR PTR ES:[SI] CALL 2000:3000H; CALL FAR PTR[2000H]46东南大学东南大学微机系统与接口微机系统与接口过程返回指令过程返回指令 (( Return From Call )从近过程返回:从近过程返回:RET(C3H ); (IP)((SP)+1:(SP)), (SP)(SP)+2RET pop_value ;(C2H data_low data_high) (IP)((SP)+1:(SP)), (SP)(SP)+2; (SP)(SP)+pop_value =ADD SP,Pop_value 可可带带一一个个弹弹出出值值,,0~64k的的立立即即数数,,表表示示返返回回时时从从堆堆栈栈舍舍弃弃的的字节数。
字节数从远过程返回:从远过程返回:RETF (CBH) ; (IP)((SP)+1:(SP)), (SP)(SP)+2(CS)((SP)+1:(SP)), (SP)(SP)+2 RETF pop_value ; (CAH data_low data_high) IP:CS弹出弹出 (SP)(SP)+pop_value47东南大学东南大学微机系统与接口微机系统与接口8086/8088指令系统指令系统(各类重点)•数据传送数据传送(DATA TRANSFER) 重点:寻址(重点:寻址(20位地址,段寄存器)位地址,段寄存器)•算术运算算术运算(Arithmetic) 关注:标志位关注:标志位•逻辑运算与位操作逻辑运算与位操作(Logic) 简单(数据处理)简单(数据处理)•串操作串操作(String Manipulation) 特殊操作(硬记)特殊操作(硬记)•转移控制转移控制(Control Transfer) 程序流控制(重要)程序流控制(重要)•MPU控制控制(Processor Control) 系统控制(重要)系统控制(重要)48东南大学东南大学微机系统与接口微机系统与接口中断中断(Interrupt)控制控制CPU与外设交换信息的一种方式与外设交换信息的一种方式==》》硬件手段硬件手段影响和改变影响和改变CPU执行程序的顺序(程序流)执行程序的顺序(程序流)49东南大学东南大学微机系统与接口微机系统与接口标志控制寄存器标志控制寄存器Flags (位位)Ø TF 跟踪标志位跟踪标志位 TF= 1,使,使CPU处于单步执行指令处于单步执行指令的工作方式。
这种方式便于进行程序的调试每执的工作方式这种方式便于进行程序的调试每执行一条指令后,自动产生一次内部中断,从而使用行一条指令后,自动产生一次内部中断,从而使用户能逐条指令地检查程序户能逐条指令地检查程序Ø IF 中断允许标志位中断允许标志位 IF= l使使CPU可以响应可屏蔽中可以响应可屏蔽中断请求 IF= 0使使CPU禁止响应可屏蔽中断请求禁止响应可屏蔽中断请求ØDF 方向标志位方向标志位 DF= l 使串操作按减地址方式进行使串操作按减地址方式进行也就是说,从高地址开始,每操作一次地址减小一也就是说,从高地址开始,每操作一次地址减小一次DF==0使串操作按增地址方式进行使串操作按增地址方式进行 3个控制标志位个控制标志位50东南大学东南大学微机系统与接口微机系统与接口8088中断结构中断结构•直接执行软件中断直接执行软件中断/指令执行结果指令执行结果•除零除零(INT 00H)•单步单步(INT 1) IF=1 TF=1•溢出溢出(INTO INT 04H)•软件中断调用软件中断调用(INT xxH)•非屏蔽中断非屏蔽中断NMI(Non-Maskable Interrupt)•可屏蔽中断可屏蔽中断INTR((IF=1)内部中断外部中断51东南大学东南大学微机系统与接口微机系统与接口中断方式下中断方式下CPU执行程序流程执行程序流程52东南大学东南大学微机系统与接口微机系统与接口8086/8088中断过程中断过程保护断点保护断点((F入栈;入栈;IF=0 TF=0;; CS、、IP入栈;入栈;中断服务中断服务(中断类型号:(中断类型号: n ))((0::4*n取向量取向量 CS:IP));返回断点返回断点((IRET:依次弹出:依次弹出IP、、CS、、F))53东南大学东南大学微机系统与接口微机系统与接口运行程序运行程序(数据数据)分段存储分段存储54东南大学东南大学微机系统与接口微机系统与接口中断指令中断指令 Interrupt软件中断软件中断: : 8086 8086支持在程序中安排一条中断指支持在程序中安排一条中断指令引起中断过程令引起中断过程( (服务服务),),对应中断服务对应中断服务(Service)(Service)程序程序软件中断程序编号软件中断程序编号n(n=0-FFH),n(n=0-FFH),可通过中断向可通过中断向量量( (矢量矢量) )重新定向重新定向8086/8088:中中断断0-FFH(0~255), 每每个个占占用用4字字节节中中断断向向量量(CS:IP)对应向量存储区对应向量存储区: 0000:0000~03FFHn号中断向量存储在号中断向量存储在0000:4*n~0000:4*n+3单元单元55东南大学东南大学微机系统与接口微机系统与接口中断指令中断指令 InterruptINT((Interrupt)) INT n ; (SP)(SP)-2,((SP)+1,(SP))(FLAGS); (IF)0 (TF)0 (SP)(SP)-2,((SP)+1,(SP))(CS); (CS)[0:n*4+2] 书书P252 (SP)(SP)-2,((SP)+1,(SP))(IP); (IP)[0:n*4]IRET(Interrupt Return) (IP) ((SP)+1,(SP)),, (SP)(SP)++2 (CS) ((SP)+1,(SP)),, (SP)(SP)++2 (FALGS)((SP)+1,(SP)), (SP)(SP)++2 特例:特例:INTO (Interrupt if overflow) ==INT 4(CS)(0:12H),(IP)(0:10H) 单字节指令单字节指令 (n中中 断断 类类 型型 号号)―――中中 断断 向向 量量xxxxCS:xxxxIP56东南大学东南大学微机系统与接口微机系统与接口MPU控制控制 ((Processor Control)CLC((Clear Carry flag))CF=0STC(Set Carry flag) CF=1CMC(CoMplement Carry flag) CF=NOT CFCLD(CLear Direction flag) DF=0 UpSTD(SeT Direction Flag) DF=1 DownCLI(CLear Interrupt flag) IF=0STI(SeT Interrupt flag) IF=1 空操作空操作/暂停暂停NOP ;;No OPeration) ((3*T))空操作空操作 HLT((halt))CPU暂暂停停---((有有效效INTR/NMI/RESET使之退出)使之退出)57东南大学东南大学微机系统与接口微机系统与接口MPU控制(控制(Processor Control)WAIT((WAIT while TEST# pin not asserted)) 有效有效INTR/TEST#=0结束之结束之---作用:作用:CPU与外部硬件同步与外部硬件同步ESC((Escape)扩展指令:)扩展指令: ESC ext_op,srcESC ext_op,src;;ext_opext_op是其他处理器的一个操作码是其他处理器的一个操作码 CPUCPU访问一个存储器操作数并放在数据总线上,供其它处理器访问一个存储器操作数并放在数据总线上,供其它处理器 使用。
使用11011xxx 8087LOCK((lock bus))--指令前缀,可放在任何指令前面指令前缀,可放在任何指令前面 控制总线锁定信号,使控制总线锁定信号,使CPU的总线锁定信号线的总线锁定信号线LOCK维持低电平维持低电平(有效),(有效),直到执行完下一条指令,禁止其他处理器对总线进行直到执行完下一条指令,禁止其他处理器对总线进行访问在共享资源的多处理器系统中,必须提供一些手段对这些访问在共享资源的多处理器系统中,必须提供一些手段对这些资源的存取进行控制,资源的存取进行控制,LOCKLOCK就是一种手段就是一种手段58东南大学东南大学微机系统与接口微机系统与接口MPU控制控制 ((Processor Control)段超越、重复前缀段超越、重复前缀 段超越前缀段超越前缀ES::/CS::/DS::/SS MOV AL,[BX]; 8A 07 MOV AL,ES:[BX] 26 8A 07 重复前缀重复前缀REP/ REPE/REPZ/ REPNE/REPN MOVSB A4 REP MOVSB F3 A459。












