逻辑运算和移位指令
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2
AND word ptr [BX][SI], 0FFFEH ; 存储器 ∧ 立即数
注意: •
•
“与”指令中操作数不能同时为存储器;
影响条件码: CF=0F=0, A未定义 ,根据结果设置SF、ZF和
PF
• ―与”指令的用途: (1) 清CF 位, 自己“与”自己. 操作数不变 ,CF=0
例:AND AL ,AL ; 结果:操作数不变 ,CF=0。
19
执行操作:相当于无符号数的×2功能。
SHL/SAL指令操作示意图如下图所示:
dest
CF
0
指令格式举例: SHL AH,1
SAL SI, CL
SAL WORD PTR [BX+5] ,1 SHL BYTE PTR , CL
20
(2)、SHR (Shift logical right )逻辑右移指令
XOR AL,0AAH
10
例 2:
比较三条(AX)清“0‖指令: XOR AX , AX SUB AX, AX MOV AX , 0 ; 清AX , 清CF,2个字节,3个T。 ;清AX , 清CF,2个字节,3个T。 ;清AX ,不影响标志位, 3个字节,4个T。
XOR清“0‖指令在多字节累加程序中十分有用。 例 3: 将存放在TABLE开始的100个字节的16进制数进行累加, 和存于SUM+1、SUM单元。
(3) 将两个操作数信息组合。 若(AL)=03H 用OR指令组合使(AL)=33H=‘3‘ 。
OR AL,30H
;(AL)=33H
8
4、XOR(Logical exclusive or)逻辑“异或”指令
格式:XOR dset , src ;B/W(dset) (dset) (src) dest: 寄存器、存储器。 src: 立即数、寄存器、存储器。 执行的操作:对指令的两个操作数进行按位“异或”运算。 二位不相同时为1, 相同时为0。 操作类型举例: XOR DI, 23F6HH XOR SI , DX XOR CL , BUFFER XOR MEM[BX],AX XOR byte ptrTABLE[BP][SI], 3DH
11
开始
程序:
100个字节的16进制数 进行累加。
LEA BX , TABLE MOV CL,100 XOR AX ,AX LOOPER:ADD AL,[BX] JNC GOON INC AH GOON: INC BX DEC CL JNZ LOOPER MOV SUM , AX HLT
初始化,置数据块地址指针 置循环次数,清(AL)、(AH) 累加1个字节送(AL) N 有进位?
SAL AX,CL
• 利用移位指令编制程序,执行时间比直接用指令快, 速度可提高5-6倍。
17
•
条件码设置:
算逻移位移位指令:
执行多次移位指令后对CF、OF的影响: CF=从目标操作数移出的最后一位;OF不定。 执行一次移位指令指令后对CF、OF的影响: OF用于判断移位后最高有效位是否发生变化. 最高位与CF不等, 则: OF = 1,
执行指令: AND AL,0FDH 即可。
2. 使某些位置“1‖。 IN AL,61H;(AL)=×××× ×××× 执行指令: OR AL,02 ↑想使此位为“1‖
3. 使某些位求反: IN AL,61H ;(AL)= ⊕ × × × × ××0 × 0 0 0 0 0 0 1 0
XOR AL,02H
16 (4)、RCR (Rotate right through carry )含CF循环右移指令
共同点:
• • 所有移位指令都可以作B/W操作。 指令中的 dest : 寄存器、存储器寻址方式。
•
cnt : 表示移位次数
cnt=1,1可写在指令中,不能是1以外的常数。 cnt>1,用CL存放移位次数 ,不能是其他寄存器。 如: SAL AX,1 MOV CL,4
(1)、 SHL/SAL(Shift logical left/shift arithmetic left) 逻辑左移/算术左移指令
格式: SHL dest ,cnt ;逻辑左移指令, B/W
SAL dest ,cnt ;算术左移指令, B/W
dest : 寄存器、存储器寻址方式。 cnt : 表示移位次数 cnt=1,1可写在指令中。 cnt>1,用CL存放移位次数 。
× ×× × ×× 1 × 4. 测试某些位(测奇偶性): 见TEST指令的用途例子。 测试 “奇”“偶”性。
14
逻辑指令应用小结:
(1)AND指令用来对指令的指定位清“0‖。 (2)OR指令常用来对某些位置1。 (3)XOR指令用在程序开头,使某个寄存器清“0‖。 (4)NOT指令对某个数据取反,+1成补码。 (5)TEST指令用来检测指定位为1,还是0。
(2) 使操作数中若干位保持不变,若干位与“1‖相与; 而若干位置为“0 ―的场合,若干位与“0‖ 相与。 例: 若(AL)=43H AND AL, 0FH ; (AL)=03H, (AL)0~3不变;
;(AL)4~7=00H,屏蔽高4位。
3
―与”指令应用举例:
61H 0110 0001
41H
0100 0001
15
(二)移位指令 (8088有8条移位指令) : 1、 算逻移位指令( 4条 ): SHL , SHR, SAL , SAR 。
(1)、 SHL/SAL(Shift logical left/shift arithmetic left)
逻辑左移/算术左移指令
(2)、SHR (Shift logical right ) 逻辑右移指令
格式: SHR dest ,cnt ;逻辑右移指令, B/W 执行操作:相当于无符号数的÷2功能。
SHR指令操作示意图如下图所示:
dest
0
CF
dest : 寄存器、存储器寻址方式。 指令格式举例: SHR BL , 1 SHR AX , CL SHR BYTE PTR [DI+BP],1 SHR WORD PTR BLOCK ,CL
否则:无变化时,OF = 0
CF根据各条指令的规定设置。 SF、ZF、PF,AF无定义。
↕
↕
↕
循环移位指令:SF、ZF、PF、AF不影响。
OF、CF影响情况在指令中讲:
ROL、 RCL影响标志OF、CF情况相同 ;
ROR 、 RCR影响标志OF、CF情况相同 。
18
1、 算逻移位指令( 4条 ) : SHL , SHR, SAL , SAR
•
“或”指令中操作数不能同时为存储器;
影响条件码: CF=0F=0, A未定义 , SF ↕ ZF ↕ PF ↕
用途: (1)清CF , 自己与自己“或”,操作数不变,CF=0
例: OR AL
;(AL)不变,CF=0
而若干位置1。若干位与“1‖或 。
(2)使某个操作数若干位保持不变,若干位与“0‖或 ;
操作类型举例: NOT AH
NOT CX NOT BYTE PTR [BP]
; 8位寄存器求反
;16位寄存器求反 ;8位存储器求反
13
NOT WORD PTR COUNT ;16位存储器求反
综合举例:
1.使某些位置“0‖。
IN AL,61H;(AL)=×××× ×× × ×B ↑设备控制寄存器 ↑想使此位为0
Y
(AH)+1 (AH)
地址指针+1 循环次数-1
N
循环次数=0?
Y 结束
流 程 图
12
5、NOT(Logical not )逻辑“非”指令 格式: NOT dest ;B/W 指令操作数只有一个,指令对操作数按位求反。
执行操作:
字节求反:(dest)0FFH-(dest) 字求反: (dest 0FFFFH-(dest) 源操作数:寄存器、存储器。不能是立即数。 影响标志位:对标志位无影响。
例1:将英文小写字母ASCII转换成大写。 小写英文字母ASCII为:‘a‘~‘z‘ 61H~7AH 大写英文字母ASCII为:‘A‘~‘Z‘ 41H~5AH FDH 程序: MOV AL, ‘z‘ 1101 1111 AND AL,0DFH ;(AL)=5AH 例2:判断键盘按下的字符是不是‘Y‘? MOV AH, 7 INT 21H ;键入无回显,(AL)=输入键的字符码 AND AL, 0DFH CMP AL, ‗Y‘ JE YES … YES: … 4 …
; 寄存器 ∧ 立即数 ;寄存器 ∧ 寄存器 ; 寄存器 ∧ 存储器 ;存储器 ∧ 寄存器 ;存储器 ∧ 立即数
5
用途: 常常用来检测一些条件是否满足,但又不希望改变原有 的操作数的情况下,常在此指令后边加一条 条件转移指令。 例:判断A单元中数据的奇偶性
设: (A )= 0AEH
程序:MOV AL,A TEST AL,01H JZ EVEN … ; 结果=0为偶数转EVEN ;(AL)=0AEH
; 寄存器 立即数 ;寄存器 寄存器 ; 寄存器 存储器 ;存储器 寄存器 ; 存储器 立即数
9
注意: • “异或”指令中操作数不能同时为存储器; 用途:对某些特定位求反,某些特定位与“1‖
其余位保持不变,保持不变与“0‖ 。
应用举例: 例1: 将(AL)中的第1、3、5、7位求反 0、2、4、6位保持不变。 MOV AL, 0FH
dest: 寄存器、存储器。
执行操作:进行“与”运算, 两位中有一位为0(或二位都为0),则结 果 为0,否则为1。
操作类型举例: AND AL, 0FH AND CX, DI AND AND SI, MEM_NAME ALPHA [DI], AX ;寄存器 ∧ 立即数 ; 寄存器 ∧ 寄存器 ; 寄存器 ∧ 存储器 ; 存储器 ∧ 寄存器
奇数处理
… EVEN:偶数处理 检测(AL)的最低位是否为0,若为0转EVEN
6
3、OR(Lgical inclusive or )逻辑“或”指令
∧ 格式:OR dset, src;(dset)←(dset) dest: 寄存器、存储器。 (src)
src: 立即数、寄存器、存储器。
执行操作: 进行按位“或”运算 两位操作数中任一位为1(或都为1), 则该位(结果)=1, 否则为0。
(3)、SAR (Shift arithmetic right )算术右移指令
2、循环移位( 4条): ROL, ROR , RCL, RCR。
(1)、ROL (Rotate left )
(2)、ROR (Rotate right )
不含CF循环左移指令
不含CF循环右移指令
(3)、RCL (Rotate left through carry )含CF循环左移指令
5、NOT(Logical not ) 逻辑“非”指令
特点:
• • • 8088可以对8位,或16位操作数执行逻辑操作。 逻辑运算是按位操作,操作数应该是位串而不是数。 影响条件码: (NOT指令除外,其他指令同)
根据结果设置SF、ZF和PF,CF=OF=0
1
1、AND(Logical and )逻辑“与”指令 格式:AND dest, src ;B/W,(dest)(dest ∧ (src) src: 立即数、寄存器、存储器。
三、逻辑运算和移位指令
(一)逻辑运算指令
1、AND(Logical and ) 逻辑“与”指令 2、 TEST(Test or non-destructive logical and ) 测试指令 3、OR(Lgical inclusive or ) 逻辑“或”指令 4、XOR(Logical exclusive or) 逻辑“异或”指令
2、 TEST(Test or non_destructive logical and )测试指令
格式: TEST dest , src;(dest)∧(src) src: 立即数、寄存器、存储器。 dest: 寄存器、存储器。 执行操作: 二个操作数相与的结果不存,置条件码。 操作类型举例: TEST BH, 7 TEST SI , BP TEST DI ,TABLE[BX] TEST [SI],CH TEST word ptr [BX][DI], 6ACEH
∧
; 寄存器 ;寄存器 ; 寄存器 ;存储器 ;存储器
∧ ∧ ∧ ∧
操作类型举例: OR BL,0F6H OR AH, BL OR CL ,BETA[BX][DI] OR GAMMA[SI] ,DX OR BYTE PTR MEM_BYTE , 80H
立即数 寄存器 存储器 寄存器 立即数 7
ຫໍສະໝຸດ Baidu 注意: •
AND word ptr [BX][SI], 0FFFEH ; 存储器 ∧ 立即数
注意: •
•
“与”指令中操作数不能同时为存储器;
影响条件码: CF=0F=0, A未定义 ,根据结果设置SF、ZF和
PF
• ―与”指令的用途: (1) 清CF 位, 自己“与”自己. 操作数不变 ,CF=0
例:AND AL ,AL ; 结果:操作数不变 ,CF=0。
19
执行操作:相当于无符号数的×2功能。
SHL/SAL指令操作示意图如下图所示:
dest
CF
0
指令格式举例: SHL AH,1
SAL SI, CL
SAL WORD PTR [BX+5] ,1 SHL BYTE PTR , CL
20
(2)、SHR (Shift logical right )逻辑右移指令
XOR AL,0AAH
10
例 2:
比较三条(AX)清“0‖指令: XOR AX , AX SUB AX, AX MOV AX , 0 ; 清AX , 清CF,2个字节,3个T。 ;清AX , 清CF,2个字节,3个T。 ;清AX ,不影响标志位, 3个字节,4个T。
XOR清“0‖指令在多字节累加程序中十分有用。 例 3: 将存放在TABLE开始的100个字节的16进制数进行累加, 和存于SUM+1、SUM单元。
(3) 将两个操作数信息组合。 若(AL)=03H 用OR指令组合使(AL)=33H=‘3‘ 。
OR AL,30H
;(AL)=33H
8
4、XOR(Logical exclusive or)逻辑“异或”指令
格式:XOR dset , src ;B/W(dset) (dset) (src) dest: 寄存器、存储器。 src: 立即数、寄存器、存储器。 执行的操作:对指令的两个操作数进行按位“异或”运算。 二位不相同时为1, 相同时为0。 操作类型举例: XOR DI, 23F6HH XOR SI , DX XOR CL , BUFFER XOR MEM[BX],AX XOR byte ptrTABLE[BP][SI], 3DH
11
开始
程序:
100个字节的16进制数 进行累加。
LEA BX , TABLE MOV CL,100 XOR AX ,AX LOOPER:ADD AL,[BX] JNC GOON INC AH GOON: INC BX DEC CL JNZ LOOPER MOV SUM , AX HLT
初始化,置数据块地址指针 置循环次数,清(AL)、(AH) 累加1个字节送(AL) N 有进位?
SAL AX,CL
• 利用移位指令编制程序,执行时间比直接用指令快, 速度可提高5-6倍。
17
•
条件码设置:
算逻移位移位指令:
执行多次移位指令后对CF、OF的影响: CF=从目标操作数移出的最后一位;OF不定。 执行一次移位指令指令后对CF、OF的影响: OF用于判断移位后最高有效位是否发生变化. 最高位与CF不等, 则: OF = 1,
执行指令: AND AL,0FDH 即可。
2. 使某些位置“1‖。 IN AL,61H;(AL)=×××× ×××× 执行指令: OR AL,02 ↑想使此位为“1‖
3. 使某些位求反: IN AL,61H ;(AL)= ⊕ × × × × ××0 × 0 0 0 0 0 0 1 0
XOR AL,02H
16 (4)、RCR (Rotate right through carry )含CF循环右移指令
共同点:
• • 所有移位指令都可以作B/W操作。 指令中的 dest : 寄存器、存储器寻址方式。
•
cnt : 表示移位次数
cnt=1,1可写在指令中,不能是1以外的常数。 cnt>1,用CL存放移位次数 ,不能是其他寄存器。 如: SAL AX,1 MOV CL,4
(1)、 SHL/SAL(Shift logical left/shift arithmetic left) 逻辑左移/算术左移指令
格式: SHL dest ,cnt ;逻辑左移指令, B/W
SAL dest ,cnt ;算术左移指令, B/W
dest : 寄存器、存储器寻址方式。 cnt : 表示移位次数 cnt=1,1可写在指令中。 cnt>1,用CL存放移位次数 。
× ×× × ×× 1 × 4. 测试某些位(测奇偶性): 见TEST指令的用途例子。 测试 “奇”“偶”性。
14
逻辑指令应用小结:
(1)AND指令用来对指令的指定位清“0‖。 (2)OR指令常用来对某些位置1。 (3)XOR指令用在程序开头,使某个寄存器清“0‖。 (4)NOT指令对某个数据取反,+1成补码。 (5)TEST指令用来检测指定位为1,还是0。
(2) 使操作数中若干位保持不变,若干位与“1‖相与; 而若干位置为“0 ―的场合,若干位与“0‖ 相与。 例: 若(AL)=43H AND AL, 0FH ; (AL)=03H, (AL)0~3不变;
;(AL)4~7=00H,屏蔽高4位。
3
―与”指令应用举例:
61H 0110 0001
41H
0100 0001
15
(二)移位指令 (8088有8条移位指令) : 1、 算逻移位指令( 4条 ): SHL , SHR, SAL , SAR 。
(1)、 SHL/SAL(Shift logical left/shift arithmetic left)
逻辑左移/算术左移指令
(2)、SHR (Shift logical right ) 逻辑右移指令
格式: SHR dest ,cnt ;逻辑右移指令, B/W 执行操作:相当于无符号数的÷2功能。
SHR指令操作示意图如下图所示:
dest
0
CF
dest : 寄存器、存储器寻址方式。 指令格式举例: SHR BL , 1 SHR AX , CL SHR BYTE PTR [DI+BP],1 SHR WORD PTR BLOCK ,CL
否则:无变化时,OF = 0
CF根据各条指令的规定设置。 SF、ZF、PF,AF无定义。
↕
↕
↕
循环移位指令:SF、ZF、PF、AF不影响。
OF、CF影响情况在指令中讲:
ROL、 RCL影响标志OF、CF情况相同 ;
ROR 、 RCR影响标志OF、CF情况相同 。
18
1、 算逻移位指令( 4条 ) : SHL , SHR, SAL , SAR
•
“或”指令中操作数不能同时为存储器;
影响条件码: CF=0F=0, A未定义 , SF ↕ ZF ↕ PF ↕
用途: (1)清CF , 自己与自己“或”,操作数不变,CF=0
例: OR AL
;(AL)不变,CF=0
而若干位置1。若干位与“1‖或 。
(2)使某个操作数若干位保持不变,若干位与“0‖或 ;
操作类型举例: NOT AH
NOT CX NOT BYTE PTR [BP]
; 8位寄存器求反
;16位寄存器求反 ;8位存储器求反
13
NOT WORD PTR COUNT ;16位存储器求反
综合举例:
1.使某些位置“0‖。
IN AL,61H;(AL)=×××× ×× × ×B ↑设备控制寄存器 ↑想使此位为0
Y
(AH)+1 (AH)
地址指针+1 循环次数-1
N
循环次数=0?
Y 结束
流 程 图
12
5、NOT(Logical not )逻辑“非”指令 格式: NOT dest ;B/W 指令操作数只有一个,指令对操作数按位求反。
执行操作:
字节求反:(dest)0FFH-(dest) 字求反: (dest 0FFFFH-(dest) 源操作数:寄存器、存储器。不能是立即数。 影响标志位:对标志位无影响。
例1:将英文小写字母ASCII转换成大写。 小写英文字母ASCII为:‘a‘~‘z‘ 61H~7AH 大写英文字母ASCII为:‘A‘~‘Z‘ 41H~5AH FDH 程序: MOV AL, ‘z‘ 1101 1111 AND AL,0DFH ;(AL)=5AH 例2:判断键盘按下的字符是不是‘Y‘? MOV AH, 7 INT 21H ;键入无回显,(AL)=输入键的字符码 AND AL, 0DFH CMP AL, ‗Y‘ JE YES … YES: … 4 …
; 寄存器 ∧ 立即数 ;寄存器 ∧ 寄存器 ; 寄存器 ∧ 存储器 ;存储器 ∧ 寄存器 ;存储器 ∧ 立即数
5
用途: 常常用来检测一些条件是否满足,但又不希望改变原有 的操作数的情况下,常在此指令后边加一条 条件转移指令。 例:判断A单元中数据的奇偶性
设: (A )= 0AEH
程序:MOV AL,A TEST AL,01H JZ EVEN … ; 结果=0为偶数转EVEN ;(AL)=0AEH
; 寄存器 立即数 ;寄存器 寄存器 ; 寄存器 存储器 ;存储器 寄存器 ; 存储器 立即数
9
注意: • “异或”指令中操作数不能同时为存储器; 用途:对某些特定位求反,某些特定位与“1‖
其余位保持不变,保持不变与“0‖ 。
应用举例: 例1: 将(AL)中的第1、3、5、7位求反 0、2、4、6位保持不变。 MOV AL, 0FH
dest: 寄存器、存储器。
执行操作:进行“与”运算, 两位中有一位为0(或二位都为0),则结 果 为0,否则为1。
操作类型举例: AND AL, 0FH AND CX, DI AND AND SI, MEM_NAME ALPHA [DI], AX ;寄存器 ∧ 立即数 ; 寄存器 ∧ 寄存器 ; 寄存器 ∧ 存储器 ; 存储器 ∧ 寄存器
奇数处理
… EVEN:偶数处理 检测(AL)的最低位是否为0,若为0转EVEN
6
3、OR(Lgical inclusive or )逻辑“或”指令
∧ 格式:OR dset, src;(dset)←(dset) dest: 寄存器、存储器。 (src)
src: 立即数、寄存器、存储器。
执行操作: 进行按位“或”运算 两位操作数中任一位为1(或都为1), 则该位(结果)=1, 否则为0。
(3)、SAR (Shift arithmetic right )算术右移指令
2、循环移位( 4条): ROL, ROR , RCL, RCR。
(1)、ROL (Rotate left )
(2)、ROR (Rotate right )
不含CF循环左移指令
不含CF循环右移指令
(3)、RCL (Rotate left through carry )含CF循环左移指令
5、NOT(Logical not ) 逻辑“非”指令
特点:
• • • 8088可以对8位,或16位操作数执行逻辑操作。 逻辑运算是按位操作,操作数应该是位串而不是数。 影响条件码: (NOT指令除外,其他指令同)
根据结果设置SF、ZF和PF,CF=OF=0
1
1、AND(Logical and )逻辑“与”指令 格式:AND dest, src ;B/W,(dest)(dest ∧ (src) src: 立即数、寄存器、存储器。
三、逻辑运算和移位指令
(一)逻辑运算指令
1、AND(Logical and ) 逻辑“与”指令 2、 TEST(Test or non-destructive logical and ) 测试指令 3、OR(Lgical inclusive or ) 逻辑“或”指令 4、XOR(Logical exclusive or) 逻辑“异或”指令
2、 TEST(Test or non_destructive logical and )测试指令
格式: TEST dest , src;(dest)∧(src) src: 立即数、寄存器、存储器。 dest: 寄存器、存储器。 执行操作: 二个操作数相与的结果不存,置条件码。 操作类型举例: TEST BH, 7 TEST SI , BP TEST DI ,TABLE[BX] TEST [SI],CH TEST word ptr [BX][DI], 6ACEH
∧
; 寄存器 ;寄存器 ; 寄存器 ;存储器 ;存储器
∧ ∧ ∧ ∧
操作类型举例: OR BL,0F6H OR AH, BL OR CL ,BETA[BX][DI] OR GAMMA[SI] ,DX OR BYTE PTR MEM_BYTE , 80H
立即数 寄存器 存储器 寄存器 立即数 7
ຫໍສະໝຸດ Baidu 注意: •