计算机组成原理与汇编语言实验指导书
(2)对OF、CF、AF无定义,根据AL的寄存器的值设置SF、ZF、PF; (3)调整方法:
(AL)=0AH×(AH)+(AL) (AH) =0 例:(AX)=0504H (BL)=03H
(1) (AL)*(BL)
MUL BL ;(AX)=000CH
AAM ;(AH)=01H (AL)=02H
(2) (AX)/(BL)
AAD ;(AH)=00H (AL)=36H
DIV BL ;(AH)=00H (AL)=12H AAA ;(AH)=01H (AL)=08H
6. 逻辑运算指令
★AND 逻辑―与‖指令
格式:AND dest, src
功能:目的操作数dest与源操作数src按位进行与运算,结果保存在目的操作数dest中。 说明
(1) src可以取立即数、寄存器、存储器;dest可以取寄存器、存储器;src、dest
不能同时为存储器操作数; (2) 对标志位的影响:CF=OF=0, AF未定义,SF、PF、ZF根据运算结果进
行设置; (3)―与‖指令的用途:
? 清CF、OF,自己―与‖自己,操作数不变,CF=OF=0; 例:AND AL,AL ;结果:操作数不变,CF=OF=0 ?
使操作数中若干位保持不变,若干位与―1‖相与;而若干位置为―0?―的场合,
若干位与―0‖?相与;
AND AL, 0FH
(AL)=03H,(AL)0~3不变,(AL)4~7=00H,屏蔽高4位。
例: 若(AL)=43H
★TEST 测试指令 格式:TEST dest,src
功能:目的操作数dest与源操作数src按位进行与运算,结果不保存,只根据运算结果设置相应的标志位。 说明
(1) 参考AND指令说明;
(2) 应用:常常用来检测一些条件是否满足,但又不希望改变原有的操作数,常在此指令后边加一条条件转移指令。
例:判断内存单元A单元中数据的奇偶性 设: (XWANG )= 0AEH
- 16 -
计算机组成原理与汇编语言实验指导书
程序: MOV AL,XWANG
TEST AL,01H JZ EVEN ??
;(AL)=0AEH
;结果=0为偶数转EVEN
奇数处理 ?? EVEN:偶数处理
功能:检测(AL)的最低位是否为0,若为0转EVEN ★OR 逻辑―或‖指令
格式:OR dset, src
功能:目的操作数dest和源操作数src按位进行或运算,运算结果保存在dest中。 说明
(1)src可以取立即数、寄存器、存储器;dest可以取寄存器、存储器;src、dest
不能同时为存储器操作数; (2)对标志位的影响:CF=OF=0, AF未定义,SF、PF、ZF根据运算结果进行设置;
(3)与指令的用途:
? 清CF , 自己与自己―或‖,操作数不变,CF=0 例: OR AL,AL ;(AL)不变,CF=0 ? ?
使某个操作数若干位保持不变,若干位与―0‖或 ;而若干位置1,若干位
与―1‖或 。
将两个操作数信息组合。
若(AL)=03H,用OR指令组合使(AL)=33H=‘3‘?。 OR AL,30H ;(AL)=33H ★XOR 逻辑―异或‖指令 格式:XOR dset, src
功能:目的操作数dest和源操作数src按位进行异或运算,运算结果保存在dest中。 说明
(1) src可以取立即数、寄存器、存储器;dest可以取寄存器、存储器;src、dest
不能同时为存储器操作数; (2) 对标志位的影响:CF=OF=0, AF未定义,SF、PF、ZF根据运算结果进
行设置; (3) 异或指令的用途:
? 用途:对某些特定位求反,某些特定位与―1‖??
其余位保持不变,保持不变与―0‖?? 。
例:将(AL)中的第1、3、5、7位求反,0、2、4、6位保持不变。
MOV AL,0FH XOR AL,0AAH ★NOT 逻辑―非‖指令 格式:NOT dest
- 17 -
计算机组成原理与汇编语言实验指导书
功能:对目的操作数dest按位进行求反运算,运算结果保存在dest中。
说明
(1) 操作数可以为寄存器、存储器,不能是立即数。
(2) NOT对dest进行求反,未位加1,则可以得到dest的补码。 (3) 对标志位无影响。 7. 移位指令
★SHL/SAL 逻辑左移/算术左移指令 格式:SHL/SAL dest,cnt
功能:目的操作数dest中的各位二进制数分别向左边移动cnt位,最后移出的最高位放入CF标志位,低位补cnt个0。如图所示: 说明
CF 0
(1)SHL/SAL指令每移动1位,相当于无符号数乘以2; ★SHR 逻辑右移指令 格式:SHR dest,cnt
功能:目的操作数dest中的各位二进制数分别向右边移动cnt位,最后移出的最低位放入CF标志位,高位补cnt个0。如图所示:
说明
0 CF (1)SHR指令每移动1位,相当于无符号数除以2; ★SAR 算术右移指令
格式:SAR dest,cnt
功能:目的操作数dest中的各位二进制数分别向右边移动cnt位,最后移出的最低位放入CF标志位,高位补cnt-1个0,最高位保持不变。如图所示:
CF说明
(1)SAR指令每移动1位,相当于无符号数除以2;
★ROL 不含CF循环左移指令 格式:ROL dest,cnt
功能:目的操作数dest中的各位二进制数分别向左边循环移动cnt位,最后移出的最高位放入CF标志位和最低位。如图所示:
说明
CF - 18 -
计算机组成原理与汇编语言实验指导书
(1) 移动8次后操作数还原;
(2) 对OF、CF的设置规定如下:
? 左循环移动1次后:
如果移位后,最高有效位与CF不等,则:OF = 1,否则:(无变化时)OF = 0
CF等于移位前dest中符号位;
? 左循环移动多次后:
OF 值不定。CF=从目标操作数移出的最后一位。
? 对SF、ZF、PF、AF无定义。 ★ROR 不含CF循环右移指令 格式:ROR dest,cnt
功能:目的操作数dest中的各位二进制数分别向右边循环移动cnt位,最后移出的最低位放入CF标志位和最高位。如图所示:
说明
(1)移动8次后操作数还原;
(2)对OF、CF的设置规定如下:
? 右循环移动1次后:
如果移位后,最高位与次高位不相等,则OF=1,否则:OF=0。
CF等于移位前dest中最低位二进制数; ? 右循环移动多次后:
OF 值不定。CF=从目标操作数移出的最后一位。 ? 对SF、ZF、PF、AF无定义。 ★RCL 含CF循环左移指令 格式:RCL dest,cnt
功能:连同CF标志位一起,CF作为最高位,dest作为低8位,9位二进制数循环向左边移动cnt位,如图所示:
CF
CF
说明
(1) 左移9次后操作数还原; (2) 对CF和OF的影响见ROL; ★RCR 含CF循环右移指令 格式:RCR dest,cnt
功能:连同CF标志位一起,CF作为最低位,dest作为高8位,9位二进制数循环向右边移动cnt位,如图所示:
- 19 - CF
计算机组成原理与汇编语言实验指导书
说明
(1)右移9次后操作数还原;
(2)对CF和OF的影响见ROR;
三、算术逻辑运算和移位指令的有关说明
1. 不论程序中给出的是何种进制的数值,在程序执行时,运算指令都按照二进制数的运算规律进行数值的运算,运算的结果都为二进制数; 2. 加法与减法运算OF、CF的讨论:
加法:
OF=1,表示两个同符号数相加,结果符号与其相反,产生溢出,即运算结果错误; OF=0,表示两个同符号数相加,结果符号与其相同,不产生溢出;或两个异号数相加,不可能溢出。
CF=1,表示两个无符号数相加产生溢出,但结果并没有错,只是结果放不下。 CF=0,表示两个无符号数相加不产生溢出,结果正确; 减法:
OF=1,表示两个带符号数符号相反,进行减法运算,结果符号与减数相同,则运算结果发生溢出。
OF=0,表示两个带符号数符号相反,或两个带符号数符号相同,进行减法运算,运算结果不发生溢出;
CF=1,表示两个不带符号数进行减法运算,结果发生溢出。即CF=1,表示减数>被减数,有借位;CF=0,表示被减数>减数,无借位; 3. 用SAR指令与用IDIV指令做除法的区别:
用SAR指令做除法(对负数向下舍入):
MOV AX ,81H SAR AX,1 MOV AX,81H MOV CL,2
;(AX) = -127 ;(AX)= - 64
;(AX)= -127
用IDIV指令做除法(IDIV指令对负数向上舍入) :
IDIV CL
四、例题讲解
;(AL)= -63 ,(AH)= -1
1. 应用举例,求绝对值:在内存中,从WANG开始存放100个带符号数,求各数的绝对值存于XIAO的开始单元。 LEA
SI,WANG
LEA DI,XIAO
MOV CX,100 MOV AL,[SI]
OR AL,AL
;(AL)内容不变,置标志
CHECK:
JNS NEXT ;SF=0转NEXT
- 20 -