3)加1指令INC(单操作数指令) 格式: INC reg/mem 功能:类似于C语言中的++操作:对指定的 操作数加1 例: INC AL INC SI INC BYTE PTR BX+4 注:本指令不影响CF标志
1 格式:INC reg/mem 功能:类似于C语言中的++操作:对指定的 操作数加1 例: INC AL INC SI INC BYTE PTR[BX+4] 注:本指令不影响CF标志。 3) 加1指令INC(单操作数指令)
ADD/ADC对条件标志位( CF/OF/ZE/SF)的影响: SF=1结果为负 ZF=1结果为0 否则 0否则 CF=1和的最高有效位有向高位的进位 0否则 OF 1两个操作数符号相同,而结果符号与之相反 0否则 CF位表示无符号数相加的溢出。 OF位表示带符号数相加的溢出
2 ADD/ADC对条件标志位(CF/OF/ZF/SF)的影响: CF位表示无符号数相加的溢出。 OF位表示带符号数相加的溢出。 1 结果为负 0 否则 SF= 1 结果为0 0 否则 ZF= 1 和的最高有效位有向高位的进位 0 否则 CF= 1 两个操作数符号相同,而结果符号与之相反 0 否则 OF=
2.减法指令 (1)不考虑借位的减法指令SUB 格式: sub dest,src 操作:dest←(dest)-(src) 注:1.源和目的操作数不能同时为存储器操作数 2.立即数不能作为目的操作数 指令例子: SUB AL, 60H Sub BX+20H, DX SUB AX,CⅩ
3 (1) 不考虑借位的减法指令SUB 格式: SUB dest, src 操作: dest←(dest)-(src) 注:1.源和目的操作数不能同时为存储器操作数 2.立即数不能作为目的操作数 指令例子: SUB AL,60H SUB [BX+20H],DX SUB AX,CX 2. 减法指令
(2)考虑借位的减法指令SBB SB指令主要用于多字节的减法。 格式: sbb dest SrC 操作:dest←(dest)-(src)-(CF) 指令例子: SBB AX, CX SBb WORD PTRSI, 2080H SBB SI, DX
4 SBB指令主要用于多字节的减法。 格式: SBB dest, src 操作: dest←(dest)-(src)-(CF) 指令例子: SBB AX,CX SBB WORD PTR[SI],2080H SBB [SI],DX (2) 考虑借位的减法指令SBB
例:x、y、z均为32位数,分别存放在地址为X, X+2;Y,Y+2;Z,Z+2的存储单元中,用指令序列 实现W<x+y+24-,结果放在W,W+2单元中 MOV AX.X MOV DXX+2 ADD AX, Y ADC DX, Y+2 X+y ADD AX 24 ADC DXO ;x+y+24 SUB AX, Z SBB DX, Z+2 x+y+24-Z MOV W.AX MOW+2,DX;结果存入W,W+2单元
5 例:x、y、z均为32位数,分别存放在地址为X, X+2;Y,Y+2;Z,Z+2的存储单元中,用指令序列 实现wx+y+24-z,结果放在W,W+2单元中。 MOV AX, X MOV DX, X+2 ADD AX, Y ADC DX, Y+2 ; x+y ADD AX, 24 ADC DX, 0 ; x+y+24 SUB AX, Z SBB DX, Z+2 ; x+y+24-z MOV W, AX MOV W+2, DX ; 结果存入W, W+2单元
(3)减1指令DEC 作用类似于C语言中的?一-操作符。 格式: DEC opr 操作:Opr←(opr) 指令例子: DEC CL DEC BYTE PTR DI+2 DEC SI
6 作用类似于C语言中的”--”操作符。 格式:DEC opr 操作:opr←(opr)-1 指令例子: DEC CL DEC BYTE PTR[DI+2] DEC SI (3) 减1指令DEC
(4)求补指令NEG 格式: NeG opr 操作:opr←0-(opr) 对一个操作数取补码相当于用0减去此操作 数,故利用NEG指令可得到负数的绝对值。 例:若(AL)=OFCH,则执行 NEG AL后, (AL)=04H,CF=1 本例中,OFCH为-4的补码,执行求补指令后, 即得到4(-4的绝对值)
7 格式: NEG opr 操作: opr← 0-(opr) 对一个操作数取补码相当于用0减去此操作 数,故利用NEG指令可得到负数的绝对值。 例:若(AL)=0FCH,则执行 NEG AL 后, (AL)=04H,CF=1 本例中,0FCH为-4的补码,执行求补指令后, 即得到4(-4的绝对值)。 (4) 求补指令NEG
SUB/SBB对标志位(CF/ OF//SE)的影响 cF=(1被减数的最高有效位有向高位的借位 0否则 OF 两个操作数符号相反,而结果的符号与减数相同 0否则 CF=1表示无符号数减法溢出。 OF=1表示带符号数减法溢出。 NEG指令对CF/OF的影响: CF:操作数为0时,求补的结果使CF=0,否则CF=1 OF:字节运算对128求补或字运算对-32768求补时OF=1, 否则OF=0
8 SUB/SBB对标志位(CF/OF/ZF/SF)的影响 CF=1表示无符号数减法溢出。 OF=1表示带符号数减法溢出。 NEG指令对CF/OF的影响: CF:操作数为0时,求补的结果使CF=0,否则CF=1。 OF:字节运算对-128求补或字运算对-32768求补时OF=1, 否则OF=0。 1 被减数的最高有效位有向高位的借位 0 否则 CF= 1 两个操作数符号相反,而结果的符号与减数相同 0 否则 OF=
(5)比较指令CMP 格式: cmp dest,src 操作:(dest)-(src) CMP也是执行两个操作数相减,但结果不送目 标操作数,其结果只反映在标志位上。 指令例子: CMP AL, OAH cMP CX, SI CMP DI, [BX+03
9 格式: CMP dest, src 操作: (dest)-(src) CMP也是执行两个操作数相减,但结果不送目 标操作数,其结果只反映在标志位上。 指令例子: CMP AL,0AH CMP CX,SI CMP DI,[BX+03] (5) 比较指令CMP
根据标志位来判断比较的结果 1)根据zF判断两个数是否相等。若zF=1,则两 数相等。 2)若两个数不相等,则分两种情况考虑: ①比较的是两个无符号数 若cF=0,则dest>src 若CF=1,则destsre 若OF⊕SF=1,则dest<sre
10 根据标志位来判断比较的结果 1)根据ZF判断两个数是否相等。若ZF=1,则两 数相等。 2)若两个数不相等,则分两种情况考虑: ①比较的是两个无符号数 若CF=0,则dest>src; 若CF=1,则dest<src。 ②比较的是两个有符号数 若OF⊕SF=0,则dest>src; 若OF⊕SF=1,则dest<src