2019大学汇编课件第章.ppt
《2019大学汇编课件第章.ppt》由会员分享,可在线阅读,更多相关《2019大学汇编课件第章.ppt(50页珍藏版)》请在三一文库上搜索。
1、2算术运算类指令 算术运算类指令包括加、减、乘、除4种指令。这类指令可以对字节、字或双字数据进行运算,参加运算的数可以是无符号数或带符号数。由于80x86提供十进制数运算校正指令,因此参加运算的数也可以是BCD码表示的十进制数。这类指令中既有双操作数指令,也有单操作数指令。如前所述,双操作数指令的两个操作数不能同时为存储器操作数,且只有源操作数可为立即数。单操作数指令不允许使用立即数寻址方式。 (1)加法运算指令 ADD(ADD) 加法 ADC(ADD with Carry) 带进位加法 INC(INCrement) 加1, ADD加法指令 指令格式:ADD DEST,SRC 指令功能:DES
2、T (SRC)+( DEST),即源操作数与目的操作数相加,其和送入目的地址中。并根据相加结果设置FLAGS的OF、SF、ZF、AF、PF和CF标志位。该指令执行后,源操作数保持不变。 【例4-29】 加法指令的常用格式有: ADD BX,SI ADD DA_WORD,0F8CH ADD DL,TABBX,下面以指令“ADD DL,0A4H”为例,给出该指令的相加及标志位设置过程。设DL的内容为0E5H:,结果不为零,则ZF 0; 结果无溢出,则OF 0; 结果中有奇数个1,则PF 0。,需要指出,溢出位OF表示带符号数的溢出,它是根据数的符号及其变化来设置的。而CF位可以表示无符号数的溢出。
3、,执行下面两条指令后,标志寄存器中CF、AF、ZF、SF 和OF、PF分别是什么状态? MOV AL,91 ADD AL,0BAH,在实模式下,假设(DS)=1234H,(SI)=124H, (12464H)=30ABH,(12484H)=464H,有以下 程序段: LEA SI,SI MOV AX,SI MOV SI+22H,1200H LDS SI,SI+20H ADD AX,SI 上述程序段执行后,(DS)=?(SI)=?(AX)=?, ADC带进位加法指令 指令格式:ADC DEST,SRC 指令功能:DEST (SRC)+( DEST)+ CF,即在完成两个操作数相加的同时,将标志位
4、CF的值加上,求出的和数送入目的地址中;并根据相加的结果设置标志位OF、SF、ZF、AF、PF和CF。 【例4-30】 在8086/80286中实现两个双精度数的加法。有一个32位无符号数存放在DX(高16位)、AX(低16位)中,若要加上常数76F1A23H,则用以下指令来实现: ADD AX,1A23H ADC DX,76FH 其中第一条指令完成把16位常数加在AX中,若产生进位,则记录在CF中。由ADC指令在完成高16位相加的同时,将低16位的进位也加上。, INC加1指令 指令格式:INC DEST 指令功能:DEST (DEST)+ 1,即目的操作数加1后送回目的地址中,并根据执行结
5、果设置标志位OF、SF、ZF、AF和PF,但不影响CF。 INC指令只有一个操作数,操作数可以是字节、字或双字,且被当作无符号数。,(2)减法运算指令 SUB(SUBtract) 减法。 SBB(SuBtract with Borrow) 带借位减法。 DEC(DECrement) 减1。 NEG(NEGate) 求补。 CMP(CoMPare) 比较。, SUB减法指令 指令格式:SUB DEST,SRC 指令功能:DEST (DEST)( SRC),即完成从目的操作数中减去源操作数,其差值送入目的地址中;并按相减结果设置标志位OF、SF、ZF、AF、PF和CF。 【例4-32】 SUB指令
6、的常用格式如下: SUB AL,3FH SUB BX,AX,下面以指令“SUB AL,DAB”为例,给出该指令的相减及设置标志位过程。设AL内容为B7H,DAB字节单元内容为A8H:,结果不为零,则ZF 0; 结果无溢出,则OF 0; 结果中有偶数个1,则PF 1。, SBB带借位减法指令 指令格式:SBB DEST,SRC 指令功能:DEST (DEST)( SRC) CF,即在完成两个操作数相减的同时,还要减去借位位CF,相减结果送入目的地址中;并设置标志位OF、SF、ZF、AF、PF和CF。, DEC减1指令 指令格式:DEC DEST 指令功能:DEST (DEST)1,即目的操作数减
7、1后送回目的地址中;并根据执行结果设置标志位OF、SF、ZF、AF和PF,但不影响CF。, NEG求补指令 指令格式:NEG DEST 指令功能:DEST 0 ( DEST),即用零减去目的操作数,相减结果送回目的地址中;并按结果设置标志位OF、SF、ZF、AF、PF和CF。 NEG指令属单操作数指令,操作数可以是字节、字或双字,且被当作补码表示的带符号数。 如果字节操作数是128、字操作数是32768,在执行NEG指令后,操作数不变,但溢出标志OF置1。这是由于+128或 +32768超出了8位或16位带符号数的表示范围,即产生了溢出。如操作数为零,求负的结果仍为零,则标志位CF置0;否则C
8、F置1。,NEG AL NEG BL 以上指令执行后,AL中为负数25H的补码: (AL) DBH 11011011B。 BL中则为正数:(BL) 58H 01011000B。,【例4-34】 设AL中存放一正数:(AL) 25H 00100101B。BL中存放负数58H的补码:(BL) A8H 10101000B。可用以下指令获得AL、BL中数的负数:,假设(AX)=0FFFFH,有以下程序段: INC AX NEG AX DEC AX NEG AX 上述程序段执行后,(AX)=?, CMP比较指令 指令格式:CMP DEST,SRC 指令功能:(DEST)( SRC),两个操作数相减后,仅
9、按相减结果设置标志位OF、SF、ZF、AF、PF和CF,而不保留两数相减的差。 CMP指令与SUB指令的不同之处是,运算结果不送回目的地址中。因此CMP指令执行后,两个操作数都不变,只影响状态标志位。CMP指令后往往跟着一个条件转移指令,根据比较结果产生不同的程序分支。例如: CMP AL,BL JZ EQL CMP指令可利用所设标志位的状态来反映两个操作数的大小。CMP指令执行后,若ZF 1,表示(DEST)(SRC)。对于无符号数,若CF 0,表示(DEST)(SRC);若CF 1,则(DEST)(SRC)。,(3)乘法运算指令 MUL(unsigned MULtiple) 无符号数乘法。
10、 IMUL(sIgned MULtiple) 带符号数乘法。, MUL无符号数乘法指令 指令格式:MUL SRC 指令功能: 字节操作数 AX (AL)*(SRC) 字操作数 DX:AX (AX)*(SRC),其中(SRC)是乘法运算的一个操作数,它只能在通用寄存器或存储单元中(不能是立即数),而另一个操作数隐含在 AL(字节乘)、AX(字乘)或EAX(双字乘)寄存器中。,MUL指令只影响标志寄存器中CF、OF标志位。MUL指令执行后,如果乘积的高一半为0,即AH(字节乘)、DX(字乘法)或EAX(双字乘)全为0,则CF 0和OF 0;否则CF 1,OF 1(表示AH、DX或EDX中有乘积的有
11、效数字)。, IMUL带符号数乘法指令 指令格式:IMUL SRC 指令功能:与MUL相同,但操作数和乘积必须是带符号数且用补码表示,而MUL的操作数和乘积均是无符号数。 执行IMUL指令后,如果乘积的高一半是低一半的符号扩展,则CF和OF均为0;否则均为1。 【例4-35】 设(AL) 0B4H 76D,(BL) 11H 17D; 执行指令“IMUL BL”后: 乘积为(AX) 0FAF4H 1292D,CF OF 1。 【例4-36】 设(AL) 0AH 10D,(BL) 11H 17D; 执行指令“MUL BL“后: 乘积为(AX) 00AAH 0170D,CF OF 0。,(4)除法运
12、算指令 DIV(unsigned DIVide) 无符号数除法。 IDIV(sIgned DIVide) 带符号数除法。 DIV无符号数除法指令 指令格式:DIV SRC 指令功能:将隐含存放在AX(字节除)、DX:AX(字除)或EDX:EAX(双字除)中的被除数除以除数(SRC),除后的商和余数送入隐含指定的寄存器中。 字节操作:AL (AX)/( SRC)的商 AH (AX)/( SRC)的余数 字操作:AX (DX:AX)/( SRC)的商 DX (DX:AX)/( SRC)的余数 DIV指令中的被除数和除数必须是无符号数,其商和余数也是无符号数。,DIV指令对标志寄存器无有效标志结果。
13、但是以下两种情况之一,将产生0型中断(除法出错中断)转入除法出错中断处理。 除数为0,即(SRC)= 0。 商溢出,即(AL)中的商0FFH,(AX)中的商0FFFFH IDIV带符号数除法指令 指令格式:IDIV SRC 指令功能:与DIV相同,但操作数、商和余数必须是带符号数且用补码表示,余数的符号与被除数的符号相同。 带符号数除法的商中,最大的正数商是+127(7FH)、+32767(7FFFH)或+65535(7FFFFFFFH),最小的负数商是127(81H)、32767(8001H)或65535(80000001H)。同DIV指令一样,当除数(SRC) 0或商超出上述的最大值或最小
14、值时,均产生0型中断。,由于除法指令的字节操作要求被除数为16位,字操作要求被除数为32位,双字操作要求被除数为64位,因此往往需要用符号扩展的方法取得除法指令所需要的被除数格式。,【例4-39】 两个8位带符号数分别放在BYTE1、BYTE2字节存储单元中,将BYTE1内容除以BYTE2内容,商放在QUOT字节单元中,可用以下指令实现: MOV AL,BYTE1 CBW IDIV BYTE2 MOV QUOT,AL,假设DAW1和DAW2分别是两个字单元的符号地址,请按 下列要求写出指令序列: (1)DAW1和DAW2两个字数据相乘(用MUL)。 MOV AX,DAW1 MUL DAW2 (
15、2)DAW1除以23(用DIV)。 MOV AX,DAW1 MOV BL,23 DIV BL,3逻辑类指令 这类指令包括逻辑运算指令、位测试指令、位扫描指令和移位指令。 (1)逻辑运算指令 逻辑运算指令共有5条,其指令格式及功能分别如下: AND逻辑与指令 指令格式:AND DEST,SRC 指令功能:DEST(SRC)(DEST) OR逻辑或指令 指令格式:OR DEST,SRC 指令功能:DEST(SRC)(DEST),XOR逻辑异或指令 指令格式:XOR DEST,SRC 指令功能:DEST(SRC)(DEST) NOT逻辑非指令 指令格式:NOT DEST 指令功能:DEST (DES
16、T) TEST测试指令 指令格式:TEST DEST,SRC 指令功能:(SRC)(DEST) 上述指令对操作数都是按位进行逻辑运算的,操作数可以是字节、字或双字。NOT指令对标志位无影响,其余4条指令影响的标志位是SF、ZF、PF,置CF、OF为0,AF不确定。TEST指令与AND指令的不同之处是,运算结果不送回目的地址中。因此TEST指令执行后,两个操作数都不变,只影响标志位。,这些指令常用于对操作数的某些位进行分离、组合或设置,例如: AND AL,0F0H ;分离出AL中的高4位 OR AL,80H ;将AL中最高位置1 XOR AX,AX ;将AX内容清零 XOR AL,01H ;将
17、AL中最低位变反 【例4-40】可用以下程序段实现将标志寄存器的第8位TF位 置1: PUSHF POP AX OR AX,100H PUSH AX POPF,假设(AX)=0FF60H,有以下程序段: STC MOV DX,96 XOR DH,0FFH SBB AX,DX 上述程序段执行后,(AX)=?CF=?,(4)移位指令 移位指令可按操作数的个数分为单操作数移位指令(8条)和双操作数移位指令(2条)。80386及其后继机型增加的双精度移位指令就是双操作数移位指令。 SHL(SHift logical Left) 逻辑左移。 SAL(Shift Arithmetic Left) 算术左移
18、。 SHR(SHift logical Right) 逻辑右移。 SAR(Shift Arithmetic Right) 算术右移。 ROL(ROtate Left) 循环左移。 ROR(ROtate Right) 循环右移。 RCL(Rotate Left through Carry) 带进位循环左移。 RCR(Rotate Right through Carry) 带进位循环右移。, 单操作数移位指令 这种移位指令共有8条,它们可以对通用寄存器或存储单元中的操作数进行指定移位,即一次可只移一位或按CL中的内容规定移位次数(位数)。移位指令可分为:算术移位指令、逻辑移位指令和循环移位指令。这
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2019 大学 汇编 课件
链接地址:https://www.31doc.com/p-2775818.html