逻辑运算指令
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 执行程序后: (A)=15H=00010101B, (P1)=75H=01110101B。
三、逻辑异或运算
• • XRL A,Rn ;A ←(A)⊕ (Rn) • XRL A,direct; A ←(A)⊕ (direct) • XRL A,@Ri; A ←(A)⊕ ((Ri)) • XRL A, #data; A ←(A)⊕ data • XRL direct,A ; direct ←(A)⊕ (direct) • XRL direct,#data ; direct ←(direct)⊕ data
逻辑运算指令
• 该类指令包含与、或、异或和累加器A清零 和求反20条,移位指令4条。。这些指令都不 会影响PSW的各标志位。具体指令见下页表1:
逻辑运算和移位指令
与、或、异或指令的结构(6×3)
• 一、逻辑与运算指令组 • ANL A,Rn ;A ←(A)Λ(Rn) • ANL A,direct; A ←(A)Λ(direct) • ANL A,@Ri; A ←(A)Λ((Ri)) • ANL A, #data; A ←(A)Λdata • ANL direct,A ; direct ←(A)Λ(direct) • ANL direct,#data ; direct ←(direct)Λdata • 指令的功能是:将两个操作数的内容按位进
0
10100110
执行后:
0
01010011
例:(30h)=X7X6X5X4X3X2X1X0
(31H)=Y7Y6Y5Y4Y3Y2Y1Y0 组合后新数据:x5x4y7y6y5y4y3y2
• MOV A,30H • ANL A,#00110000B • RL A • RL A • MOV R0,A • MOV A,31H • ANL A,#11111100B • RR A • RR A
8、(3)将内部RAM20h单元高四位置1,低 四位清0,结果存回原处
• ANL 20H,#11110000B
• ORL 20H,#11110000B
(4)将DPTR中间8位取反,其余不变,结果存回
原处
• MOV A,DPH
• XOR DPH,#00001111B
• XOR A,#00001111B • XOR DPL,#11110000B
则用“0”和该位相与;若保留某位,则用 “1”和该位相与。
二、逻辑或运算指令
ORL A,Rn ;A ←(A)V(Rn) • ORL A,direct; A ←(A)V(direct) • ORL A,@Ri; A ←(A)V ((Ri)) • ORL A, #data; A ←(A)V data • ORL direct,A ; direct ←(A)V(direct) • ORL direct,#data ; direct ←(direct) Vdata • 这组指令的功能是:将两个操作数的内容按位进 行逻辑或操作,并将结果送回目的操作数的单元中。
• ORL A,R0
6、(A)=5AH,(R0)=20H,(20H)=6BH, (B)=02H,(PSW)= 80H.写出下列指令执行后的结果及标志位的影响。
• ADD A,R0 • SUBB A,#20H • MUL AB • ANL 20H,#45H • XRL 20H,A • SWAP A • RR A
例:编程实现将A中数据高四位取反,低四位 不变、清零(置一) 。
• XOR A,#0F0H
• XOR A,#0FFH • ANL A,#0F0H
• XOR A,#0FFH • ORL A,#0FH
例:片外3000H单元和3001H单元低四位取出 评成一个8位数。P65 • MOV DPTR,#3000H • MOVX A,@DPTR • ANL A,#0FH • SWAP A • MOV R0,A • INC DPTR • MOVX A,@DPTR • ANL A,#0FH • ORL A,R0
•
CPL A ;A ←/A
• 例:假设(A)=89H,在执行指令
•
CPL A
• 后,(A)=76H
•
89H=10001001
• 取反: 01110110=76H
五、累加器移位指令
1、循环左移 RL A
D7 D6 D5 D4 D3 D2 D1 D0
假设:(A)=0A6H,则在执行指令“RL (A)=4DH 执行前(A):
7、写出以下程序段运行的过程和结果:
• MOV A,#20H • MOVX DPTR,#2030H • MOVX @DPTR,A • MOV 30H,#50H • MOV R0,#30H • MOVX A,@R0
• MOV A,#79H • MOV 20H,#88H • ADD A,20H • DA A • SWAP A
• MOV A,20H • ANL A,#0FH • ADD A,#30H • MOV 21H,A • MOV A,20H • SWAP A • ANL A,#0FH • ADD A,#30H • MOV 22H,A
四、累加器清0和取反指令
• 累加器清0指令
•
CLR A ;A ←0
• 累加器按位取反指令
101001
执行后(A):
010011
A”后,
10 01
2、循环右移 RR A
D7 D6 D5 D4 D3 D2 D1 D0
假设:(A)=0A6H,则在执行指令“RR (A)=53H 执行前(A):
101001
执行后(A):
010100
A”后,
10 11
• 3、带进位循环左移 • RLC A
CY ← D7 D6 D5 D4 D3 D2 D1 D0
• MOV DPH,A
• MOV A,DPL
• XOR A,#11110000B
• MOV DPL,A
9、用3种方法实现将A中数据乘2运算
• MOV R0,A • ADD A,R0
• MOV B,#02H • MUL AB
• RL A
• 例:假设(A)=0A6H,(CY)=0;则在执行指令“RLC A”
• 后(A)=_____ ,(CY)=______
• 执行前:
•
0
10100110
执行后:
1
01001100
• 4、带进位位循环右移 • RRC A
CY → D7 D6 D5 D4 D3 D2 D1 D0
• 例:假设(A)=0A6H,(CY)=0;则在执行指令“RRC A” • 后(A)=_____ ,(CY)=______ • 执行前:
如:根据累加器A中4~0位的状态,用逻辑与、或指 令控制P1口4~0位的状态,P1口的高3位保持不变。
• ANL A, #00011111B ; 屏蔽A的高3位 • ANL P1, #11100000B ; 保留P1的高3位 • ORL P1, A ; 使P1口4~0位按A中4~0位
置位
• 若上述程序执行前: (A)=B5H=10110101B, (P1)=6AH=01101010B, 则
例2:将20单元存放的数字百位放到21H,十位放到 22H,个位放到23H。
• MOV A,20H • MOV B,#100 • DIV AB • MOV 21H,A • MOV A,B • MOV B,#10 • DIV AB • MOV 22H,A • MOV 23H,B
例2改:将20单元存放的BCD码拆开,转换为ASC2码 后分别存入21H和22H。
• 异或运算举例:假设(A)=45H,(60H)=78H,则在执行 指令。
•
XRL A,60H
• 后(A) =3DH
(A)
01000101
(60H) ⊕ 01111000
00111101
• 功能:与“0”异或,保持原值;与“1”异或,取反 操作。
• 逻辑“异或”指令常用来对字节中某些位进行取反 操作, 欲某位取反则该位与“1”相异或;欲某位保留 则该位与“0”相异或。 还可利用异或指令对某单元自 身异或, 以实现清零操作。
• 或运算举例:假设(A)=60H,(30H)=79H,则执行指令
•
ORL A, 30H
• 后,(A)=79H
•
(A)
01100000
•
(30H) V 01111001
•
01111001
• 或运算功能:与“0”或,保持原值;与“1” 或,置1操作。 • 它常用来使字节中某些位置“1”,欲保留 (不变)的位用“0”与该位相或,而欲置位的 位则用“1”与该位相或。
行逻辑与操作,并将结果送回目的操作数的单 元中。
Leabharlann Baidu
• 例:(A)=78H,(R1)=0fH,则执行指令
•
ANL A,R1
• 后,(A)=08H
•
(A) 01111000
(R1) Λ 00001111
(A) 00001000
• 与操作的功能:与“0”与,清零操作; 与“1”与,保持原值。即若要清除某位,
• ADDC A,#20H • INC A • DIV AB • ORL A,#32H • XCH A,20H • CPL A • RLC A
执行以下指令后结果为? 初始(A)=94H,C=1。
• RL A • RLC A • RR A • RRC A
• RL A ; (A)=29H=0010 1001,C=1 • RLC A ; (A)=53H=0101 0011,C=0 • RR A ; (A)=0A9H=1010 1001,C=0 • RRC A ;(A)=54H01010100,C=1
• 异或指令可用于单元清零、判断两个字节中的数据 是否相等.
• 程序设计:如果(40H)=(60H),使A=0FFH,否则为 00h.
•
CLR F0
MOV A,40H
XRL A,60H
JNZ OUT;表示不相等
MOV A,#0FFH; (40h)=(60h) f0=1
•
…..
• out: MOV A,#00H ;(40h)<>(60h)
三、逻辑异或运算
• • XRL A,Rn ;A ←(A)⊕ (Rn) • XRL A,direct; A ←(A)⊕ (direct) • XRL A,@Ri; A ←(A)⊕ ((Ri)) • XRL A, #data; A ←(A)⊕ data • XRL direct,A ; direct ←(A)⊕ (direct) • XRL direct,#data ; direct ←(direct)⊕ data
逻辑运算指令
• 该类指令包含与、或、异或和累加器A清零 和求反20条,移位指令4条。。这些指令都不 会影响PSW的各标志位。具体指令见下页表1:
逻辑运算和移位指令
与、或、异或指令的结构(6×3)
• 一、逻辑与运算指令组 • ANL A,Rn ;A ←(A)Λ(Rn) • ANL A,direct; A ←(A)Λ(direct) • ANL A,@Ri; A ←(A)Λ((Ri)) • ANL A, #data; A ←(A)Λdata • ANL direct,A ; direct ←(A)Λ(direct) • ANL direct,#data ; direct ←(direct)Λdata • 指令的功能是:将两个操作数的内容按位进
0
10100110
执行后:
0
01010011
例:(30h)=X7X6X5X4X3X2X1X0
(31H)=Y7Y6Y5Y4Y3Y2Y1Y0 组合后新数据:x5x4y7y6y5y4y3y2
• MOV A,30H • ANL A,#00110000B • RL A • RL A • MOV R0,A • MOV A,31H • ANL A,#11111100B • RR A • RR A
8、(3)将内部RAM20h单元高四位置1,低 四位清0,结果存回原处
• ANL 20H,#11110000B
• ORL 20H,#11110000B
(4)将DPTR中间8位取反,其余不变,结果存回
原处
• MOV A,DPH
• XOR DPH,#00001111B
• XOR A,#00001111B • XOR DPL,#11110000B
则用“0”和该位相与;若保留某位,则用 “1”和该位相与。
二、逻辑或运算指令
ORL A,Rn ;A ←(A)V(Rn) • ORL A,direct; A ←(A)V(direct) • ORL A,@Ri; A ←(A)V ((Ri)) • ORL A, #data; A ←(A)V data • ORL direct,A ; direct ←(A)V(direct) • ORL direct,#data ; direct ←(direct) Vdata • 这组指令的功能是:将两个操作数的内容按位进 行逻辑或操作,并将结果送回目的操作数的单元中。
• ORL A,R0
6、(A)=5AH,(R0)=20H,(20H)=6BH, (B)=02H,(PSW)= 80H.写出下列指令执行后的结果及标志位的影响。
• ADD A,R0 • SUBB A,#20H • MUL AB • ANL 20H,#45H • XRL 20H,A • SWAP A • RR A
例:编程实现将A中数据高四位取反,低四位 不变、清零(置一) 。
• XOR A,#0F0H
• XOR A,#0FFH • ANL A,#0F0H
• XOR A,#0FFH • ORL A,#0FH
例:片外3000H单元和3001H单元低四位取出 评成一个8位数。P65 • MOV DPTR,#3000H • MOVX A,@DPTR • ANL A,#0FH • SWAP A • MOV R0,A • INC DPTR • MOVX A,@DPTR • ANL A,#0FH • ORL A,R0
•
CPL A ;A ←/A
• 例:假设(A)=89H,在执行指令
•
CPL A
• 后,(A)=76H
•
89H=10001001
• 取反: 01110110=76H
五、累加器移位指令
1、循环左移 RL A
D7 D6 D5 D4 D3 D2 D1 D0
假设:(A)=0A6H,则在执行指令“RL (A)=4DH 执行前(A):
7、写出以下程序段运行的过程和结果:
• MOV A,#20H • MOVX DPTR,#2030H • MOVX @DPTR,A • MOV 30H,#50H • MOV R0,#30H • MOVX A,@R0
• MOV A,#79H • MOV 20H,#88H • ADD A,20H • DA A • SWAP A
• MOV A,20H • ANL A,#0FH • ADD A,#30H • MOV 21H,A • MOV A,20H • SWAP A • ANL A,#0FH • ADD A,#30H • MOV 22H,A
四、累加器清0和取反指令
• 累加器清0指令
•
CLR A ;A ←0
• 累加器按位取反指令
101001
执行后(A):
010011
A”后,
10 01
2、循环右移 RR A
D7 D6 D5 D4 D3 D2 D1 D0
假设:(A)=0A6H,则在执行指令“RR (A)=53H 执行前(A):
101001
执行后(A):
010100
A”后,
10 11
• 3、带进位循环左移 • RLC A
CY ← D7 D6 D5 D4 D3 D2 D1 D0
• MOV DPH,A
• MOV A,DPL
• XOR A,#11110000B
• MOV DPL,A
9、用3种方法实现将A中数据乘2运算
• MOV R0,A • ADD A,R0
• MOV B,#02H • MUL AB
• RL A
• 例:假设(A)=0A6H,(CY)=0;则在执行指令“RLC A”
• 后(A)=_____ ,(CY)=______
• 执行前:
•
0
10100110
执行后:
1
01001100
• 4、带进位位循环右移 • RRC A
CY → D7 D6 D5 D4 D3 D2 D1 D0
• 例:假设(A)=0A6H,(CY)=0;则在执行指令“RRC A” • 后(A)=_____ ,(CY)=______ • 执行前:
如:根据累加器A中4~0位的状态,用逻辑与、或指 令控制P1口4~0位的状态,P1口的高3位保持不变。
• ANL A, #00011111B ; 屏蔽A的高3位 • ANL P1, #11100000B ; 保留P1的高3位 • ORL P1, A ; 使P1口4~0位按A中4~0位
置位
• 若上述程序执行前: (A)=B5H=10110101B, (P1)=6AH=01101010B, 则
例2:将20单元存放的数字百位放到21H,十位放到 22H,个位放到23H。
• MOV A,20H • MOV B,#100 • DIV AB • MOV 21H,A • MOV A,B • MOV B,#10 • DIV AB • MOV 22H,A • MOV 23H,B
例2改:将20单元存放的BCD码拆开,转换为ASC2码 后分别存入21H和22H。
• 异或运算举例:假设(A)=45H,(60H)=78H,则在执行 指令。
•
XRL A,60H
• 后(A) =3DH
(A)
01000101
(60H) ⊕ 01111000
00111101
• 功能:与“0”异或,保持原值;与“1”异或,取反 操作。
• 逻辑“异或”指令常用来对字节中某些位进行取反 操作, 欲某位取反则该位与“1”相异或;欲某位保留 则该位与“0”相异或。 还可利用异或指令对某单元自 身异或, 以实现清零操作。
• 或运算举例:假设(A)=60H,(30H)=79H,则执行指令
•
ORL A, 30H
• 后,(A)=79H
•
(A)
01100000
•
(30H) V 01111001
•
01111001
• 或运算功能:与“0”或,保持原值;与“1” 或,置1操作。 • 它常用来使字节中某些位置“1”,欲保留 (不变)的位用“0”与该位相或,而欲置位的 位则用“1”与该位相或。
行逻辑与操作,并将结果送回目的操作数的单 元中。
Leabharlann Baidu
• 例:(A)=78H,(R1)=0fH,则执行指令
•
ANL A,R1
• 后,(A)=08H
•
(A) 01111000
(R1) Λ 00001111
(A) 00001000
• 与操作的功能:与“0”与,清零操作; 与“1”与,保持原值。即若要清除某位,
• ADDC A,#20H • INC A • DIV AB • ORL A,#32H • XCH A,20H • CPL A • RLC A
执行以下指令后结果为? 初始(A)=94H,C=1。
• RL A • RLC A • RR A • RRC A
• RL A ; (A)=29H=0010 1001,C=1 • RLC A ; (A)=53H=0101 0011,C=0 • RR A ; (A)=0A9H=1010 1001,C=0 • RRC A ;(A)=54H01010100,C=1
• 异或指令可用于单元清零、判断两个字节中的数据 是否相等.
• 程序设计:如果(40H)=(60H),使A=0FFH,否则为 00h.
•
CLR F0
MOV A,40H
XRL A,60H
JNZ OUT;表示不相等
MOV A,#0FFH; (40h)=(60h) f0=1
•
…..
• out: MOV A,#00H ;(40h)<>(60h)