逻辑运算指令
逻辑运算指令

逻辑运算指令
逻辑运算指令是计算机中用于执行逻辑运算的指令。
逻辑运算指令通常用于判断条件、控制程序流程和实现逻辑运算等操作。
常见的逻辑运算指令包括:
1. 与运算(AND):将两个操作数的对应位进行逻辑与运算,结
果为1的位表示相应位置的两个操作数都为1,否则为0。
2. 或运算(OR):将两个操作数的对应位进行逻辑或运算,结果为1的位表示相应位置的两个操作数中至少一个为1,否则为0。
3. 非运算(NOT):对一个操作数进行逻辑非运算,将其每个位
取反,即1变为0,0变为1。
4. 异或运算(XOR):将两个操作数的对应位进行逻辑异或运算,结果为1的位表示相应位置的两个操作数中只有一个为1,否则为0。
5. 移位运算:包括逻辑左移、逻辑右移、算术左移和算术右移
等操作,用于将操作数的位向左或向右移动指定的位数。
6. 条件运算(IF):用于判断给定的条件是否成立,如果条件成立,则执行一段指定的代码,否则执行另一段指定的代码。
这些逻辑运算指令在计算机中被广泛应用于控制流程、条件判断、位操作、加密算法等场景。
根据不同的计算机体系结构和编程语言,具体的逻辑运算指令以及操作符可能会有所不同。
单片机指令大全

引言概述:单片机指令是嵌入式系统设计中至关重要的一部分,它们定义了单片机的功能和操作。
本文是单片机指令大全系列的第二部分,旨在提供更多全面的单片机指令信息,帮助读者更好地理解和应用单片机指令。
正文内容:一、移位指令1.逻辑左移指令:将操作数的每一位向左移动一位,并且最低位填充0。
2.逻辑右移指令:将操作数的每一位向右移动一位,并且最高位填充0。
3.算术右移指令:将操作数的每一位向右移动一位,并且最高位保持不变。
4.循环左移指令:将操作数的每一位向左循环移动一位,即最高位移动到最低位。
5.循环右移指令:将操作数的每一位向右循环移动一位,即最低位移动到最高位。
二、逻辑运算指令1.逻辑与指令:对操作数进行逻辑与运算,将两个二进制数对应位上的值进行逻辑与操作。
2.逻辑或指令:对操作数进行逻辑或运算,将两个二进制数对应位上的值进行逻辑或操作。
3.逻辑非指令:对操作数进行逻辑非运算,将二进制数的每一位取反。
4.逻辑异或指令:对操作数进行逻辑异或运算,将两个二进制数对应位上的值进行逻辑异或操作。
5.逻辑移位指令:将操作数进行逻辑左移或右移。
三、算术运算指令1.加法指令:对操作数进行加法运算,并将运算结果保存到指定的寄存器或存储器中。
2.减法指令:对操作数进行减法运算,并将运算结果保存到指定的寄存器或存储器中。
3.乘法指令:对操作数进行乘法运算,并将运算结果保存到指定的寄存器或存储器中。
4.除法指令:对操作数进行除法运算,并将运算结果保存到指定的寄存器或存储器中。
5.移位指令:对操作数进行移位运算,包括算术左移、算术右移、循环左移和循环右移。
四、输入输出指令1.读取输入指令:从指定的输入设备读取数据,并将数据保存到指定的寄存器或存储器中。
2.输出显示指令:将指定的数据从寄存器或存储器中读取,并显示到指定的输出设备上。
3.端口输入指令:从指定的端口读取数据,并将数据保存到指定的寄存器或存储器中。
4.端口输出指令:将指定的数据从寄存器或存储器中读取,并输出到指定的端口上。
逻辑运算包括与或否异或除了否指令NOT外均有

ZF与SF。然而,若移位次数为0,则不影响标志位;若移位次数 > 1,则OF无定义。
9
❖
ห้องสมุดไป่ตู้
【例】
将DX:AX中的32位数 左移1位。
shl
ax, 1 ;逻
辑移位
rcl
dx, 1 ;带
进位移位
10
3.逻辑指令运用技术:
; dest左移。其中,count为移
位次数(下同)
SAL dest, count
; 同SHL
SHR dest, count
; dest逻辑右移
SAR dest, count
; dest算术右移
4
语法格式: SHL reg/mem, 1/CL SHL reg/mem, imm8 ; 286新增 SAL、SHR与SAR格式同SHL
操作但不存储结果
语法格式:
AND reg/mem, reg/mem/imm
OR
reg/mem, reg/mem/imm
XOR reg/mem, reg/mem/imm
NOT reg/mem
TEST reg/mem, reg/mem/imm
对标志位的影响: NOT:无。
其它指令:CF = OF = 0,按一般规则影响SF和ZF。
RCL dest, count
; dest带CF循环左移
RCR dest, count
; dest带CF循环右移
8
语法格式: ROL reg/mem, 1/CL ROL reg/mem, imm8 ; 286新增 ROR、RCL、RCR格式同ROL
18-07-2PLC逻辑运算指令

助记符
功能:当R0பைடு நூலகம்通时,将S1指定的操作数(DT10)中的内 容和S2指定的操作数(DT20)中的内容做“或”运算,结 果存放在D指定的目的操作数(DT30)中。
图解过程:
R0:ON
3)F67 XOR 16位数据“异或”指令
例: 梯形图 助记符
功能:当R0接通时,将S1指定的操作数(DT10)中的内 容和S2指定的操作数(DT20)中的内容做“异或”运算,结 果存放在D指定的目的操作数(DT30)中。
3. 逻辑运算指令 1)F65 WAN 16位数据“与”运算指 令 例: 梯形图
助记符
功能:当R0接通时,将S1指定的操作数(DT10)中的内 容和S2指定的操作数(DT20)中的内容做“与”运算,结果 存放在D指定的目的操作数(DT30)中。
图解过程:
R0:ON
2) F66 WOR 16位数据“或”运算指 令 例: 梯形图
图解过程:
R0:ON
逻辑运算类指令

标志位
解释
P OAC VCY
√ × × × 累加器A中的内容和直接地址单元中的内容执 行逻辑或操作。结果存在累加器A中
√ × × × 累加器A的内容和立即数执行逻辑或操作。结 果存在累加器A中
√ × × × 累加器A的内容和寄存器Rn的内容执行逻辑或 操作。结果存在累加器A中
√ × × × 累加器A的内容和工作寄存器Ri指向的地址单 元中的内容执行逻辑或操作。结果存在累加器 A中
单片机原理与应用
逻辑运算类指令
逻辑运算指令共有24条 有与、或、异或、求反、左右移位、清0等逻辑操作 有直接、寄存器和寄存器间址等寻址方式。
1. 清零指令(1条)
指令
功能
标志位 解释
P OA C VC Y
CLR A
A ←0
√ × × × 累加器A中的内容清0
2.求反指令(1条)
指令功能Βιβλιοθήκη 标志位√ × × × 累加器A的内容和工作寄存器Ri指向的地址单元中 的内容执行逻辑异或操作。结果存在累加器A中
√ × × × 累加器A的内容和立即数执行逻辑异或操作。结果 存在累加器A中
√ × × × 累加器A的内容和寄存器Rn中的内容执行逻辑异 或操作。结果存在累加器A中
× × × × 直接地址单元中的内容和累加器A的内容执行逻辑 异或操作。结果存在直接地址单元中
XRL A,Z
CPL A
ORL A,R1 MOV F,A SJMP $
;A ← (X) ;A ← (A)∧(Y) ;A内容暂存 ;A ← (Y)
;A ← (Y) (Z)
; A ←()()
;得到输出 ;存输出
单片机原理与应用
× × × × 直接地址单元中的内容和累加器A的内容执行 逻辑或操作。结果存在直接地址单元中
汇编语言2-4逻辑移位指令

8086指令系统
一、数据传送类; 二、算术运算类; 三、位操作指令(逻辑运算和移位类); 四、串操作类; 五、控制转移类; 六、处理器控制类;
第 2章
8086指令系统
位操作指令,它们都是按位进行操作的包含逻辑运
算类指令和移位指令。 位操作类指令以二进制位为基本单位进行数据的操 作;这是一类常用的指令,都应该特别掌握 注意这些指令对标志位的影响 要求:全面而准确地理解每条指令的功能和应用 重点掌握以下指令:
第 2章
2、逻辑或指令OR
功能:对两个操作数执行按位逻辑或运 算,结果送到目的操作数
OR reg,imm/reg/mem ;reg←reg∨imm/reg/mem OR mem,imm/reg ;mem←mem∨imm/reg
说明:(1)按位逻辑或运算; (2)OR指令对操作数的限制和对标志位的影响; 思考: (1)某一个操作数自己和自己相逻辑或? 置某些位 (2)OR指令主要用在什么场合?
RCR reg/mem,1/CL
;带进位循环左移
;带进位循环右移
演示
第 2章
说明:循环移位指令
对操作数:同移位指令。 对标志的影响:
(1)按照指令功能设置进位标志CF (2)不影响SF、ZF、PF、AF (3)对于OF,同移位指令。如果进行一位移动, 则按照操作数的最高符号位是否改变,相应设置 溢出标志OF:如果移位前的操作数最高位与移位 后操作数的最高位不同(有变化),则OF = 1; 否则OF = 0。当移位次数大于1时,OF不确定
第 2章
例:移位指令
mov cl,4 mov al,0f0h ;al=f0h shl al,1 ;al=e0h ;CF=1,SF=1、ZF=0、PF=0,OF=0 shr al,1 ;al=70h ;CF=0,SF=0、ZF=0、PF=0、OF=1 sar al,1 ;al=38h ;CF=0,SF=0、ZF=0、PF=0、OF=0 sar al,cl ;al=03h ;CF=1,SF=0、ZF=0、PF=1 、OF=0
逻辑运算和移位指令

奇数处理
… EVEN:偶数处理 检测(AL)的最低位是否为0,若为0转EVEN
6
3、OR(Lgical inclusive or )逻辑“或”指令
∧ 格式:OR dset, src;(dset)←(dset) dest: 寄存器、存储器。 (src)
src: 立即数、寄存器、存储器。
执行操作: 进行按位“或”运算 两位操作数中任一位为1(或都为1), 则该位(结果)=1, 否则为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 )逻辑右移指令
否则:无变化时,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
dest: 寄存器、存储器。
执行操作:进行“与”运算, 两位中有一位为0(或二位都为0),则结 果 为0,否则为1。
操作类型举例: AND AL, 0FH AND CX, DI AND AND SI, MEM_NAME ALPHA [DI], AX ;寄存器 ∧ 立即数 ; 寄存器 ∧ 寄存器 ; 寄存器 ∧ 存储器 ; 存储器 ∧ 寄存器
二算术逻辑运算指令

三、逻辑运算指令
⑵移位指令
• 累加器A循环左移指令: • RL A ; • 累加器A连同进位位循环左移指令: • RLC A ; • 累加器A循环右移指令: • RR A ; • 累加器A连同进位位循环右移指令 • RRC A ;
三、逻辑运算指令
• 例3-18:若(A)=10111101B=BDH, Cy=0
• 注:执行结果只影响PSW的奇偶校验位P (以A为操 作数时 )
二、算术运算指令
3.乘、除法指令
• MUL AB ; (A)←[(A)×(B)]7-0
•
(B)←[(A)×(B)]15-8
• 如果积大于255(FFH),则溢出标志OV置1,否则清0。进
位标志位Cy总为0。
二、算术运算指令
• 例3-17:设(A)=50H(80),(B) =0AH(160) 执行指令:MUL AB;
• 执行“ RLC A”的结果为 • (A)=01111010B=7AH,Cy=1 • A的内容扩大2倍
三、逻辑运算指令
2 .双操作数的逻辑运算指令
• ⑴逻辑“与”指令
• 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)←(direct)∧(A) ANL direct,#data;(direct)←(direct)∧data
• 本指令不能简单的把累加器A中的16进制数变换成 BCD码
二、算术运算指令
• 例3-13:设累加器A内容为压缩BCD码56 (即01010110B),寄存器R3的内容为 压缩BCD码67(即01100111B),Cy内 容为1。执行下列的指令:
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例9:32位数移位
;将DX.AX中32位数值左移一位 shl ax,1 rcl dx,1
DX
CF
AX
0
例10:位传送
;把AL最低位送BL最低位,保持AL不变
ror bl,1
AL、BL
CF
ror al,1 rcl bl,1 rol al,1AL之D0 NhomakorabeaBL
CF
CF
AL
例11:BCD码合并
;AH.AL分别存放着非压缩BCD码的两位
A 01 A 10
`异或`运算:异则1,同则0
A 0011 B 0101 A∨ B 0 1 1 0
例:
1011 1010 0100 0101
例: 1010 1100 ∨ 0011 1001 1001 0101
4
逻辑运算指令
指令格式 AND dst,src OR dst,src NOT oprd XOR dst,src TEST oprd1,oprd2
A 0011 B 0101 A∧B 0 0 0 1
`或`运算:有1则1,全0则0
A 0011 B 0101 A∨B 0 1 1 1
例: 1101 1100 ∧ 1011 1010 1001 1000
例: 1010 1100 ∨ 0011 1001 1011 1101
3
逻辑运算(2)
`非`运算: 0则1,1则0
MOV DL,9 OR DL,30H MOV AH,2 INT 21H
例: 0000 1001 ∨ 0011 0000 0011 1001
例题4:数字转换
数字字符的ASCII → 对应的二进制数
DOS的1号调用实现从键盘上接收1个字 符,字符的ASCII码存放在AL寄存器中
例: 0011 0111 ∧ 0000 1111
sar al,cl
;al=03h
;CF=1,SF=0、ZF=0、PF=1
循环移位指令(rotate)
将操作数从一端移出的位返回到另一端形 成循环,分成不带进位和带进位,分别具 有左移或右移操作
ROL reg/mem,1/CL ;不带进位循环左移 演示 ROR reg/mem,1/CL ;不带进位循环右移 演示 RCL reg/mem,1/CL ;带进位循环左移 演示 RCR reg/mem,1/CL ;带进位循环右移 演示
JMP
段间转移——远转移(far)
从当前代码段跳转到另一个代码 段,可以在1MB范围
代 码
需要更改CS段地址和IP偏移地址
段
目标地址必须用一个32位数表达,
实际叫编做程32时位,远汇指编针程,序它就会是根逻据辑目地标地址 自动处址理成短转移、近转移或远转移
的距代离,
码
程序员可用操作符short、near ptr 或far ptr段强制
18
例6:移位指令
mov cl,4
mov al,0f0h ;al=f0h
shl al,1
;al=e0h
;CF=1,SF=1、ZF=0、PF=0,OF=0
shr al,1
;al=70h
;CF=0,SF=0、ZF=0、PF=0、OF=1
sar al,1
;al=38h
;CF=0,SF=0、ZF=0、PF=0、OF=0
SAL reg/;me逻m,辑1/右C移L ,最低位进入CF,最高位补0
SAR reg/;me算m,术1/左C移L ,最高位进入CF,最低位演补示0
;算术右移,最低位进入CF,最高位不变
16
移位指令的操作数
移位指令的第一个操作数是指定的被移位 的操作数,可以是寄存器或存储单元
后一个操作数表示移位位数,该操作数为 1,表示移动一位;当移位位数大于1时, 则用CL寄存器值表示,该操作数表达为 CL
控制转移类指令通过改变IP(和CS)值, 实现程序执行顺序的改变
27
一、 无条件转移指令
JMP
JMP label ;程序转向label标号指定的地址
只要执行无条件转移指令JMP,就使程序转 到指定的目标地址处,从目标地址处开始执 行那里的指令
操作数label是要转移到的目标地址(目的 地址、转移地址)
第三节 8086/8088的指令系统(续)
三. 逻辑运算指令
1
教学内容
逻辑运算指令
AND, OR, NOT, XOR,TEST
移位指令
SHL, ASL, SHR, SAR ROL, ROR, RCL, RCR
掌握指令格式、结果以及对标志位的影响
2
逻辑运算(1)
`与`运算:有0则0,全1则
31
段内转移、直接寻址
JMP
实际为相对寻址
JMP label
;IP←IP+位移量
位移量是紧接着JMP指令后的那条指令的偏移地址到目标 指令的偏移地址的地址位移
当向地址增大方向转移时,位移量为正;向地址减小方向 转移时,位移量为负
again: output:
jmp again …… dec cx …… jmp output …… mov result,al
22
循环移位指令对标志的影响
按照指令功能设置进位标志CF 不影响SF、ZF、PF、AF 如果进行一位移动,则按照操作数的最高
符号位是否改变,相应设置溢出标志OF: 如果移位前的操作数最高位与移位后操作 数的最高位不同(有变化),则OF = 1; 否则OF = 0。当移位次数大于1时,OF 不确定
;否则ZF=1,即D0=0,顺序
there: ...
TEST指令通常用于检测一些条件是否 满足,但又不希望改变原操作数的情况
移位指令(shift)
将操作数移动一位或多位,分成逻辑移位和算 术移位,分别具有左移或右移操作
SHL reg/mem,1/CL
演示
SHR reg/;me逻m,辑1/左C移L ,最高位SA进L与入SCHFL相,同最低位演补示0
29
目标地址的范围:段内
JMP
段内转移——短转移(short)
转移范围可以用一个字节表达,在段 内-128~+127范围的转移
段内转移——近转移(near)
在当前代码段64KB范围内转移 ( ±32KB范围)
不需要更改CS段地址,只要改变 IP偏移地址
代 码 段 代 码 段
30
目标地址的范围:段间
;转移到again处继续执行
;标号again的指令
;转向output ;标号output的指令
32
段内转移、间接寻址
JMP r16/m16
;IP←r16/m16
将一个16位寄存器或主存字单元内容送入IP 寄存器,作为新的指令指针,但不修改CS寄存 器的内容
jmp ax
;IP←AX
JMP
jmp word ptr [2000h] ;IP←[2000h]
果才是1;否则,“与”的结果为 0
AND指令设置CF = OF = 0,根据结果设置 SF、ZF和PF状态,而对AF未定义
14
TEST
例5:测试为0或1
mov al,dl
test al,01h ;测试AL的最低位D0
jnz there ;标志ZF=0,即D0=1
;则程序转移到there
... 执行
执行操作 (dst) ← (dst)∧(src) (dst) ← (dst)∨(src) (oprd)← (oprd) (dst) ← (dst)∨(src) (oprd1)∧(oprd2)
5
逻辑与指令AND
对两个操作数执行逻辑与运算,结果送到 目的操作数
AND reg,imm/reg/mem ;reg←reg∧imm/reg/mem
;逻辑或 al=75h ;CF=OF=0,SF=0、ZF=0、PF=0
;逻辑异或 al=74h ;CF=OF=0,SF=0、ZF=0、PF=1
;逻辑非 al=0bah ;标志不变
例题2:逻辑指令应用
;AND指令可用于复位某些位(同0相与),不 影响其他位:将BL中D3和D0位清0,其他位不变
and bl,11110110B
;将它们合并成为一个压缩BCD码存AL
and ax,0f0fh ;保证高4位为0
mov cl,4
rol ah,cl
;也可以用shl ah,cl
add al,ah
;也可以用or al,ah
3.3.5 控制转移指令
控制转移类指令用于实现分支、循环、过 程等程序结构,是仅次于传送指令的最常 用指令
重点掌握:JMP/Jcc/LOOP CALL/RET INT n/IRET 常用系统功能调用 一般了解: LOOPZ/LOOPNZ INTO
只要相“或”的两位有一位是1, 结果就是1;否则,结果为0
OR指令设置CF = OF = 0,根据结果设置 SF、ZF和PF状态,而对AF未定义
7
逻辑异或指令XOR
对两个操作数执行逻辑异或运算,结果送 到目的操作数
XOR reg,imm/reg/mem ;reg←reg⊕imm/reg/mem XOR mem,imm/reg ;mem←mem⊕imm/reg
AND mem,imm/reg ;mem←mem∧imm/reg
只有相“与”的两位都是1,结 果才是1;否则,“与”的结果为 0
AND指令设置CF = OF = 0,根据结果设置 SF、ZF和PF状态,而对AF未定义
6
逻辑或指令OR
对两个操作数执行逻辑或运算,结果送到 目的操作数
OR reg,imm/reg/mem ;reg←reg∨imm/reg/mem OR mem,imm/reg ;mem←mem∨imm/reg
JMP指令分成4种类型: