
中职计算机原理(主编瞿正刚等_北理工版)课件模块三_指令系统_6.ppt
23页任务3 8086指令系统,3.3.3算术运算类指令 8086的算术运算类指令包括加、减、乘、除4种基本运算指令,以及进行BCD码十进制数运算的指令 算术运算指令涉及无符号数和带符号数两种类型的数据加减运算采取同一套指令,乘除运算有各自不同的指令加减法运算在执行过程中有可能产生溢出,对于无符号数,如果加法运算最高位向前产生进位,减法运算最高位向前有借位,则表示出现溢出,用CF标志位可检测无符号数是否溢出对于带符号数,采用补码运算,符号位参加运算,溢出则表示运算结果发生错误,用OF标志位可检测带符号数是否溢出下一页,返回,上一页,任务3 8086指令系统,算术运算指令会影响标志位,其规则如下 ①运算结果向前产生进位或借位时,CF=1 ②最高位向前进位和次高位向前进位不同时,0F=1 ③若运算结果为0,ZF =1 ④若运算结果最高位为1,SF=1 ⑤若运算结果中有偶数个1,PF=1 算术运算指令有20条,分为5种类型,可对4种类型的数据进行运算,即无符号二进制数、带符号二进制数、无符号压缩型BCD码和无符号非压缩型BCD码二进制数可以是8位或16位,十进制数以字节为单位参加运算对于单操作数指令不允许使用立即数;对于双操作数指令至少有一个操作数在寄存器中,另一个操作数可以使用任意寻址方式;立即数不能作为目的操作数。
运算结果影响状态标志位下一页,返回,上一页,任务3 8086指令系统,加法指令 1)加法指令ADD 格式:ADD DST, SRC 功能:DST← (DST)+(SRC) 说明: ①源/目的操作数地址如图3-19所示,其中目的操作数不能使用立即数,两存储器单元之间不能直接进行加法运算,允许段跨越;源/目的操作数位数必须相同,可以是8位或者16位 ② ADD指令不区分两个加数是无符号数还是带符号数,运算结果的二进制形式相同,影响状态标志位举例如下下一页,返回,上一页,图3-19加法运算源/目的操作数地址,返回,任务3 8086指令系统,ADD AL,25H ;AL寄存器指明操作是字节操作 ADD AL, [BX] ;AL寄存器指明操作是字节操作 ADD WORD PTR [ BX ] ,12H ;WORD PTR指明内存操作数为字操作数 又如指令ADD AX,BX,设执行前(AX) = 1234H, ( BX)=0F7C9H,则执行后(AX)=09FDH,OF=0,SF=0,ZF=0,AF=0,PF=0,CF=1。
2)带进位加法指令ADC 格式:ADC DST,SRC 功能: DST← (DST)+(SRC) 说明:进位位CF的值加到两数和的最低位,其他与ADD指令相同下一页,返回,上一页,任务3 8086指令系统,[例3-2]试编写程序,计算双字4A750000H +78912365H之和 解:双字操作,由寄存器DX和AX组成32位累加器,先用ADD指令进行低字运算,再用ADC指令进行高字运算其程序如下 MOV AX,OOOOH MOV DX,4A75H ADD AX ,2365 H ADC DX,7891H 3)加1指令INC 格式:INC DST 功能:DST← (DST)+1下一页,返回,上一页,任务3 8086指令系统,说明:操作数可以是除立即数之外的其他寻址方式,可以是字节,也可以是字,不区分无符号数还是带符号数允许段跨越;影响除CF之外的其他状态标志位 2.减法指令 1)减法指令SUB 格式:SUB DST,SRC 功能:DST← (DST)-(SRC) 说明: ①源/目的操作数地址如图3-19所示,目的操作数不能使用立即数,两存储器单元不能直接进行减法运算,允许段跨越;源/目的操作数位数必须相同,可以是8位,也可以是16位。
下一页,返回,上一页,任务3 8086指令系统,② SUB指令不区分操作数是无符号数还是带符号数,运算结果的二进制形式相同,影响状态标志位举例如下 SUB AX,[BX] 设执行前(AX) =578FH, ( DS) = 1000H, ( BX) -2000H, ( 12000H) -7890H,则执行后(AX)=ODEFFH,OF=0,SF=1,ZF=0,AF=0,PF=1,CF=1 2)带借位减法指令SBB 格式:SBB DST,SRC 功能:DST← (DST)-(SRC)-CF 说明:被减数减去减数,再减进位位CF的值,其他与减法指令SUB相同下一页,返回,上一页,任务3 8086指令系统,3)减1指令DEC 格式:DEC DST 功能:DST← (DST)-1 说明:同INC指令例如,指令DEC CX 4)求补指令NEG 格式:NEG DST 功能:DST←O-(DST) 说明:操作数同INC指令,影响所有状态标志位,操作数为零时CF=1,其他情况下CF=0例如,指令NEG AX,设执行前(AX) = OFFFFH,则执行后(AX) =OOOIH,OF=O,SF=0,ZF=0,AF=1,PF=0,CF=1。
下一页,返回,上一页,任务3 8086指令系统,5)比较指令CMP 格式:CMP DST, SRC 功能:(DST)-(SRC)置状态标志位 说明:进行减法运算,不送结果,仅置状态标志位 3.乘法指令 1)无符号数乘法指令MUL 格式:MUL SRC 功能:AX ← (AL) x (SRC) ;字节操作DX,AX← (AX)x(SRC) ;字操作,下一页,返回,上一页,任务3 8086指令系统,说明: ①源/目的操作数均为无符号数 ②目的操作数必须是累加器AX或AL;源操作数可以是除立即数之外的其他寻址方式,允许段跨越 ③除OF和CF之外的状态标志无定义;执行MUL指令后,若乘积的高字/高字节为0,则OF=CF=O;否则,OF=CF=1 [例3-3]将ADDR1和ADDR2两个字节单元的无符号数相乘,乘积存放在ADDR3字单元中 解:使用无符号指令,程序如下 MOV AL,ADDR1 MUL ADDR2 MOV ADDR3,AX,下一页,返回,上一页,任务3 8086指令系统,2)带符号数乘法指令IMUL 格式:IMUL SRC 功能:操作数为带符号数,其他与MUL相同 说明: ①源/目的操作数均为带符号数。
②同MUL指令 ③除OF和CF之外的标志无定义;执行IMUL指令后,若乘积的高字/高字节是符号扩展位时,则OF=CF=O;否则,OF=CF=1 4.除法指令 1)无符号数除法指令DIV 格式:DIV SRC 功能:AL← (AX) /(SRC)的商AH ←余数;AX ←(DX,AX)/(SRC)的商DX ←余数下一页,返回,上一页,任务3 8086指令系统,说明: ①进行字节运算时,16位的被除数存放在AX中,进行字运算时32位的被除数存放在DX,AX中;若被除数的长度不是除数的2倍,被除数高位补0;除数可以是除立即数之外的其他寻址方式,允许段跨越 ②所有状态标志位无定义 2)带符号数除法指令IDIV 格式:IDIV SRC 功能:操作数是带符号数,其他与DIV相同 说明:被除数的长度不是除数的2倍时,被除数高位符号扩展,其他与DIV指令相同下一页,返回,上一页,任务3 8086指令系统,[例3一4]设(AX) =0400H, ( BL) =OB4H,执行指令DIV BL和IDIV BL 解:①执行指令DIV BL 由于(AX)和(BL)为无符号数,因此指令DIV BL执行后,结果如下。
(AL)=OS H AL←商 (AH)=7CH AH ←余数 ②执行指令IDIV BL 由于(AX)和(BL)为带符号的补码数,因此指令IDIV BL执行后,结果如下 (AL)=0 F3 H=-13D AL ←商 (AH)=24H =36D AH ←余数 在进行除法运算时,若商溢出,直接转入0型中断处理 3 ) CBW符号位扩展指令,下一页,返回,上一页,任务3 8086指令系统,格式:CBW字节转换为字; CWD字转换为双字 功能:字节扩展AH(AL)的符号位;字扩展DX(AX)的符号位 说明:源/目操作数地址隐含为AH与AL,DX与AX,不影响状态标志位 5.十进制调整指令 BCD码数据按一般算术运算指令操作后,必须用调整指令对其进行修正,该类指令共有6条 1)非压缩BCD码加法调整指令AAA 格式:AAA 功能:AL←把AL中的和调整成非压缩BCD码格式AH ←(AH)+调整产生的进位值下一页,返回,上一页,任务3 8086指令系统,说明:两加数为非压缩BCD码,在执行指令ADD ,ADC ,INC之后结果在寄存器AL中; 影响状态标志CF和AF,其余标志位无定义。
举例如下 ADD AL,BL AAA 2)压缩BCD码加法调整指令DAA 格式:DAA 功能:AL←把AL中的和调整成压缩BCD码格式 说明:两加数为压缩BCD码,在执行指令ADD ,ADC , INC之后结果在寄存器AL中;状态标志OF无定义,影响其余状态标志位举例如下 ADD AL,BL DAA,下一页,返回,上一页,任务3 8086指令系统,3)非压缩BCD码减法调整指令AAS 格式:AAS 功能:AL←把AL中的差调整成非压缩BCD码格式;AH← (AH)调整产生的借位 说明:两操作数为非压缩BCD码,执行指令SUB,SBB,DEC之后结果在寄存器AL中;影响状态标志CF和AF,其余标志位无定义 4)压缩BCD码减法调整指令DAS 格式:DAS 功能:(AL) ←把AL中的差调整成压缩BCD码格式 说明:两操作数为压缩BCD码,执行指令SUB,SBB,DEC之后结果在寄存器AL中;状态标志OF无定义,影响其余标志位下一页,返回,上一页,任务3 8086指令系统,5)非压缩BCD码乘法调整指令AAM 格式:AAM 功能:AX←把AL中的乘积调整成非压缩BCD码格式 说明:两乘数为非压缩BCD码,执行指令MUL之后结果在寄存器AL中;调整后十位数在AH中,个位数在AL中;影响状态标志SF,ZF和PF,其余标志位无定义。
举例如下 MUL AL,BL AAM 6)非压缩BCD码除法调整指令AAD 格式:AAD 功能:AL ← 10 x (AHD+(AL) AH ← 0 说明:,下一页,返回,上一页,任务3 8086指令系统,①在指令DIV之前使用,被除数是两位非压缩BCD码,存放在AX中,AH中存放十位数字,AL中存放个位数字,且高4位均为0;除数是一位非压缩的BCD码,高4位为调整结果在AL中,AH中清0;执行其后的DIV指令后,AL中为一位非压缩BCD码的商,AH中为一位BCD码的余数 ②影响状态标志SF,ZF和PF,其余OF,CF和AF标志位无定义 3.3.4控制转移类指令 一般情况下,程序是按指令顺序地逐条执行的,但实际上经常需要改变程序的执行流程控制转移类指令用来改变程序执行的方向,即修改IP和CS的值下一页,返回,上一页,任务3 8086指令系统,按转移位置可将转移指令分为段内转移和段间转移若指令给出改变IP中内容的信息,转移的目标位置和转移指令在同一个代码段,则称为段内转移;若指令给出改变IP中内容的信息,又给出改变CS中内容的信息,转移的目标位置和转移指令不在同一个代码段,则称为段间转移。
根据转移指令的功能,可分为无条件转移指令、条件转移指令、循环控制指令、子程序调用和返回指令等 1.无条件转移指令 无条件转移(JMP)指令中作为转移目的地址的操作数,在汇编语言格式中可直接使用符号地址在汇编之后可得到相应的段地址及偏移量 JMP指令控制处理机转移到指定的位置去执行程序,指令中必须给出转移位置的目标地址,通常有如下5种形式下一页,返回,上一页,。
