逻辑运算和移位指令
1.逻辑运算指令
(1)不是OPRD
此指令否定操作数,然后将结果返回给。操作数可以是寄存器或内存的内容。该指令对标志位没有影响。
例子:不全是
(2)与指令
该指令按阶段对两个操作数执行“与”的逻辑运算。即只有当阶段中的两个参与者都为“1”时,阶段AND结果才为“1”;否则,“与”的结果为“0”。“与”的结果被发回。
“与”指令可以执行字节操作或字操作。
“与”指令的一般格式是
和OPRD1,OPRD2
目标操作数OPRD1可以是累加器、任何通用寄存器或内存操作数。源操作数OPRD2可以是立即操作数、寄存器或存储器操作数。
示例:
和a1,0FH
BX安达克斯
英国石油公司
数据字
缓冲区[国际BX]
数据字,00FFH
英国石油公司,DX
(3)测试说明
该指令的运算功能与AND指令相同,结果会反映在标志位,但结果不会发回,即TEST指令不会改变操作数的值。这个指令通常是在你不想改变操作数的前提下。
用于检测某个或某些位的状态。
测试指令的一般格式是
测试OPRD,im;Im是一个即时号码。
立即数中的哪个位是1表示要测试哪个位。
例如,如果要检查AL中的最低位是否为1,如果为1,则传输。在这种情况下
您可以使用以下说明:
测试铝,01H
那里
…那里:MOV BL,05H
(4)或指令
“或”指令允许对字节或字进行异或运算。“或”指令使标志位cf=0,of=0;“或”运算的结果反映在标志位PF、SF和ZF中;自动对焦标志位未定义。
or指令的一般格式是
或操作数1,操作数2
目标操作数OPRD1可以是累加器、任何通用寄存器或内存操作数。源操作数OPRD2可以是立即操作数、寄存器或存储器操作数。
示例:
或铝,30H
或AX,00FFH
或BX,SI
或BX,数据字
或缓冲器
或缓冲器[BX国际标准],8000小时
操作数本身的“或”不会改变操作数的值,但可以将进位标志CF清零。
(5)异或指令
该指令对两个操作数进行按位异或运算,即异或运算的两个值不同时,结果为“1”;否则为0,返回运算结果。
异或指令的一般形式是
异或OPRD 1,运算2
目标操作数OPRD1可以是累加器、任何通用寄存器或内存操作数。源操作数可以是立即操作数、寄存器或内存操作数。
示例:
异或a1,0FH
BX异或
异或DX,SI
CX异或
异或缓冲器
异或缓冲器[BX系统],AX
当操作数本身为异或时,由于每一位都相同,异或结果必须为0,进位标志位也必须为0。这是将操作数清零的常用方法。
示例:
异或AX,AX
异或硅,硅
2.移位指令
088有三个换挡指令。算术左移和逻辑左移指令:SAL/SHL OPRD,m;m是移位数,可以是1,也可以是寄存器CL中的内容算术右移位指令:
OPRD特区
逻辑移位指令:OPRD,硕士
(1) SAL/SHL指令
这两条指令的运算结果完全一样。每移位一次,右边最低位加一个零,左边最高位移入标志位CF,如图3.16所示。
(2)合成孔径雷达指令
每次指令执行移位操作时,都会将操作数向右移位一位,但符号位保持不变,最低移位到标志位CF,如图3.17所示。
合成孔径雷达可以移动m指定的次数,结果会影响标志位CF、OF、PF、SF和ZF。
每次指令执行移位操作时,操作数向右移位一位,最低位移位到标志位CF,与SAR不同,左边最高位将填充0,如图3.18所示。该指令可以执行m指定的班次。
3.循环移位指令
088有四个循环移位指令:
左循环移位指令ROLOPRD,m
右循环移位指令ROROPRD,m
带进位的左循环移位指令
带进位的右循环移位指令
(1) ROL指令
每次指令移位时,总是将最高位移入进位位CF,同时也将操作数的最高位移入最低位,这样就形成了一个环,如图3.19(a)所示。
(2) ROR指令
每次指令移位时,总是将最低位移入进位标志位CF,也将最低位移入操作数的最高位,从而形成一个循环,如图3.19(b)所示。
(3) RCL指令
该指令是包含标志位CF的循环左移指令,每次移位,操作数的最高位被移位到进位标志位CF,而原始CF的内容被移位到操作数的最低位,从而形成一个大循环。
如图3.19(c)所示。
(4)RCR指令
该指令是包含进位标志位CF的右循环指令,每次移位时,标志位CF中的原始内容移入操作数的最高位,而操作数的最低位移入标志位CF,如图3.19(c)所示。
向左移动一位,只要左移后的数字不超过一个字节或一个字可以表示的范围,就相当于原来的数字乘以2;向右移动一位相当于除以2,
示例:
MOV航空公司,08H
SALAL,1岁;向左移动一个位置,相当于乘以2;该指令执行后,AL中的内容为16。
MOVAL,16岁
SARAL,1;向右移动一位,相当于除以2;该指令执行后,AL中的内容为8。