逻辑运算指令
逻辑运算指令
逻辑运算指令
逻辑运算指令是计算机中用于执行逻辑运算的指令。
逻辑运算指令通常用于判断条件、控制程序流程和实现逻辑运算等操作。
常见的逻辑运算指令包括:
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。执行下列的指令:
微机原理4[1].4逻辑运算及串操作指令
三、位操作指令
可对8位或16位的寄存器或存储器单元中 的内容按位进行操作,包括:
例1:将2000H:1200H地址开始的100个字节 传送到6000H:0000H开始的内存单元中。
MOV AX,2000H MOV DS,AX KKK:MOV AL,[SI] 2000H:1200H MOV [DI],AL MOV AX,6000H 如果不用串操作指令 INC SI MOV ES,AX INC DI MOV SI,1200H DEC CX JNZ KKK MOV DI,0 此处不用 6000H:0000H REP,则: MOV CX,100 KKK: MOVSB CLD DEC CX NEXT:REP MOVSB
(4)测试指令TEST 指令格式: TEST dest,src;dest ∧ src 指令功能: 源操作数和目的操作数的内容执行按位 的逻辑与运算,根据结果置SF、PF、ZF, 且CF=OF=0,而AF位无定义。 dest,src内 容不变。
常用于:
在不改变原来操作数的情况下,检测某一位 或某几位是否为1或为0。 编程时,用在条件转移指令前产生条件。
实现对一串字符或数据的操作
可进行串传送、串比较、串扫描、读串或写 串等操作,串长最多可达64KB
字符串指令的寻址方式只用隐含寻址,源串 固定使用SI,目的串固定使用DI。
指令包含:
REP REPE/REPZ REPNE/REPNZ
MOVS、STOS、LODS CMPS、SCAS
位逻辑指令逻辑运算结果用英文简写
位逻辑指令逻辑运算结果用英文简写位逻辑指令是计算机中常用的一种指令类型,用于对二进制位进行逻辑运算。
在计算机科学中,位逻辑指令的逻辑运算结果通常使用英文简写来表示。
本文将介绍几种常见的位逻辑指令及其逻辑运算结果的英文简写。
首先,我们来介绍与运算(AND)指令。
与运算是指对两个二进制位进行逻辑与操作,只有当两个位都为1时,结果才为1,否则为0。
与运算的英文简写是AND。
例如,对于两个二进制位A和B,它们的与运算结果可以表示为A AND B。
接下来,我们来介绍或运算(OR)指令。
或运算是指对两个二进制位进行逻辑或操作,只要两个位中有一个为1,结果就为1,否则为0。
或运算的英文简写是OR。
例如,对于两个二进制位A和B,它们的或运算结果可以表示为A OR B。
除了与运算和或运算,还有异或运算(XOR)指令。
异或运算是指对两个二进制位进行逻辑异或操作,当两个位不相同时,结果为1,否则为0。
异或运算的英文简写是XOR。
例如,对于两个二进制位A和B,它们的异或运算结果可以表示为A XOR B。
另外,还有取反运算(NOT)指令。
取反运算是指对一个二进制位进行逻辑取反操作,将1变为0,将0变为1。
取反运算的英文简写是NOT。
例如,对于一个二进制位A,它的取反运算结果可以表示为NOT A。
最后,我们来介绍移位运算(Shift)指令。
移位运算是指将一个二进制数的所有位向左或向右移动一定的位数。
移位运算的英文简写是Shift。
例如,对于一个二进制数A,它的向左移位运算结果可以表示为A << n,其中n表示要移动的位数;它的向右移位运算结果可以表示为A >> n。
综上所述,位逻辑指令的逻辑运算结果可以用英文简写来表示。
与运算的英文简写是AND,或运算的英文简写是OR,异或运算的英文简写是XOR,取反运算的英文简写是NOT,移位运算的英文简写是Shift。
这些英文简写在计算机科学中被广泛使用,方便了人们对位逻辑指令的理解和应用。
逻辑运算类指令.ppt
;(A)=F0H
END
;结束
《单片机原理与应用》教学课件
LED闪烁编程
单片机P0端口引脚外接 LED发光二极管电路。 P0.0 — P0.7接D1—D7 输出高电平 — LED灭 输出低电平 — LED亮
编程: 控制LED发光二极
管间隔亮灭闪烁。
《单片机原理与应用》教学课件
源程序:
START: LOOP:
NOP
END
;结束
55H FFH AAH
01010101 11111111 10101010
异或运算技巧:
异或运算有见1取反 的特点,通常用来将数 据的某几位取反,其他 位保持不变。
《单片机原理与应用》教学课件
四、清零指令和取反指令
1、清零指令(1条)
指令格式: CLR A
指令功能:将累加器A中的数据设置为零。
0
=1 =0 =0 =0 =0 =0 =1 =0
CY= 1
A7 A6 A5 A4 A3 A2 A1 A0 =0 =0 =0 =0 =0 =1 =0 =0
《单片机原理与应用》教学课件
例如:
ORG 0000H
;程序开始
MOV PSW , #80H ;CY=1
MOV A , #02H ;(A)=02H
RLC A
累加器移位操作: (RL,RLC,RR,RRC—4条)
《单片机原理及应用》教学课件
逻辑与(ANL),逻辑或(ORL),逻辑异或(XRL):
指令形式
Byte
Tm
ANL(ORL,XRL) direct, A
2
1
ANL(ORL,XRL) direct,#data
3
2
ANL(ORL,XRL) A,
逻辑运算指令
逻辑运算指令逻辑运算指令 1.ANL类指令(6条) ANL类是逻辑与指令,其功能是将源操作数作数内容和目的操作数内容按位相与,结果存入目的操作数指定单元中,源操作数不变。
ANL A, Rn ;A∩Rn→A ANL A, direct ;A∩(direct) →A ANL A, @Ri ;A∩(Ri) →A ANL A, #data ;A∩data→A ANL direct, A ;(direct)∩A→(direct) ANL direct, #data ;(direct)∩data→(direct) 例设A=F6H,(30H)=0FH 执行ANL A, 30H ;A∩ (30H) →A 操作如下: 11110110 (F6H) ∩ 00001111 (0FH)注意:按位相与 00000110 (06H) 结果:A=06H, 30H地址内容不变,即(30H)=0FH 若执行ANL 30H, A ;(30H)∩ A→(30H) 操作同上,结果放在30H地址中,A中内容不变,即(30H)=06H,A=F6H。
2.ORL类指令(6条) ORL类指令是逻辑或指令,其功能是将源操作数作数内容和目的操作数内容按位逻辑或,结果存入目的操作数指定单元中,源操作数不变。
ORL A, Rn ;A∪Rn→A ORL A,direct ;A∪(direct) →A ORL A, @Ri ;A∪(Ri) →A ORL A, #data ;A∪data→A ORL direct, A ;(direct)∪A→(direct) ORL direct, #data ;(direct)∪data→(direct) 或运算和与运算过程类似,这里不再举例。
03.8 第三章 - 单片机指令系统(逻辑运算指令ANL、ORL、XRL、CPL、RL、RR、RRC、RLC)
0000 1001
0
9
09:42
单片机技术
6
3.8.1 逻辑“与”运算指令(ANL)
❖ 练习 ▪ 已知(A)=6EH,(R0)=9BH,执行ANL A,R0后 ?
0110 1110
∩ 1001 1010
0000 1010
0
A
09:42
单片机技术
7
3.8.1 逻辑“与”运算指令(ANL)
第三章:单片机指令系统
3.8 逻辑运算类指令
09:42
单片机技术
1
第三章:MSC-51 单片机指令系统
3.8 - 逻辑运算类指令
☺ 3.8.1 逻辑“与”运算指令 ☺ 3.8.2 逻辑“或”运算指令 ☺ 3.8.3 逻辑“异或”运算指令 ☺ 3.8.4 累加器A清0和取反 ☺ 3.8.5 “左移”循环指令(RL RLC) ☺ 3.8.6 “右移”循环指令(RR RRC)
∪ 1000 1001
1101 1111
D
F
09:42
单片机技术
12
3.8.2 逻辑“或”运算指令(ORL)
❖ 2.高考考点(ORL)
▪ 规则:有1出1,全0出0(按位) ▪ 功能:置1操作 ▪ 方法:某一位要置1则该位写1,其余不变位写0
09:42
单片机技术
13
3.8.2 逻辑“或”运算指令(ORL)
09:42
单片机技术
10
3.8.2 逻辑“或”运算指令(ORL)
❖ 1.“或” 逻辑指令(ORL)
▪ 指令格式:
ORL A ,
#data ;A ←(A)∪ data ,立即寻址 direct ;A ←(A)∪ direct ,直接寻址 Rn ;A ←(A)∪ (Rn) ,寄存器寻址 @Ri ;A ←(A)∪ (@Ri),寄间寻址
and指令用法
and指令用法AND指令是计算机指令的一种,用于逻辑运算。
它能够对指定的位进行逻辑与运算,并根据运算结果的真假来进行相应的操作。
在程序设计和计算机体系结构中,AND指令都是非常重要的。
一、AND指令的基本语法和用法AND指令是一种逻辑运算指令,基本语法如下:AND 操作数1, 操作数2其中,操作数1和操作数2可以是寄存器、内存地址或者立即数。
AND指令的作用是对操作数1和操作数2中的每一位进行逻辑与操作,将结果存放在一个称为目的操作数的地方。
例如,AND指令可以这样使用:AND AX, BX二、AND指令的运算原理AND指令的运算原理非常简单。
对于每一对操作数1和操作数2的对应位,只有当两个位都为1时,AND运算结果才为1,否则结果为0。
例如,如果操作数1的二进制表示为101010,操作数2的二进制表示为110011,那么进行AND运算的结果将是100010。
三、AND指令的作用和应用场景1. 位掩码操作:AND指令常用于位掩码操作。
通过将某个操作数的特定位设置为0,可以屏蔽或关闭这些位。
这在处理一些硬件状态寄存器、标志位或者控制位时非常有用。
2. 清零操作:当需要将某个操作数中的特定位设置为0时,可以使用AND指令。
通过将操作数2中指定位置为0,然后执行AND操作,即可实现清零操作。
3. 数据过滤和校验:AND指令还常常用于数据过滤和校验。
通过将操作数1和操作数2中的相应位与运算,可以筛选出符合某种条件的数据或者做简单的校验。
四、使用实例下面是一些AND指令在实际应用中的使用示例。
1. 位掩码操作示例:假设我们有一个8位的寄存器,我们需要将寄存器的低3位设置为0,并将高5位保持不变。
可以使用AND指令进行位掩码操作。
AND AL, 0F8h2. 清零操作示例:假设我们有一个16位的寄存器AX,我们需要将AX寄存器中的低8位设置为0,可以使用AND指令进行清零操作。
AND AX, 0FF00h3. 数据过滤和校验示例:假设我们有一个存储器单元,存储了一组数据。
汇编语言4
高位
dest
低位
CF
图3-4 逻辑右移操作示意图
例3-35:分析以下程序段。
• MOV BX ,24H ;(BX)= 36 = 00100100B • MOV CL ,2 • SHR BX ,CL ;将BX内容右移2位, (BX)= 00001001B,CF=0 • 执行程序段以后,(BX)= 09H = 9,相当于除以2的2 次方。 • 由此可见,逻辑右移指令可以方便地实现操作数除运算 (n为移位次数)。不过在使用中要注意操作数应该为无 符号数,否则会得出错误结果。
例3-27:
MOV AL ,56H ;(AL)= 01010110B
NOT AL ;(AL)= 10101001B = 0A9H • 说明:NOT指令是单操作数指令,该操作数可以是立即数以 外的任何寻址方式。NOT指令不影响标志位。
2.逻辑与指令AND
• 指令格式:AND dest , src • 功能:将目的操作数和源操作数按位“与”,结果存入目的地 址中。即dest (dest)∧(src) 。 • “与”运算的规则为:1∧1=1,1∧0=0,0∧1=0,0∧0=0。 • 该指令可以屏蔽操作数中的某些位,使其余位保持不变。要屏 蔽的位与0相“与”,不变的位与1相“与”的左移和右移能够实现对数据乘以2的 整数次幂和除以2的整数次幂。 • MOV AL,64H • MOV CL,2 • SHL AL,CL;实现对64H左移2位,得到结果 AL=90H • 左移,可能出现溢出,造成错误。
算术移位的左移和右移实现乘除
• 算术移位的左移和右移能够实现对数据乘以2的 整数次幂和除以2的整数次幂。 • MOV AL,64H • MOV CL,2 • SHL AL,CL;实现对64H左移2位,得到结果 AL=90H • 左移,可能出现溢出,造成错误。
逻辑运算和移位指令
……
;否则(正数)不转移
MINUS: … …
……
8
2.移位指令
(1)非循环移位指令
算术左移指令 SAL(Shift Arithmetic Left)
算术右移指令 SAR(Shift Arithmetic Right) 逻辑左移指令 SHL(Shift Left)
逻辑右移指令 SHR(Shift Right) 这4条指令的格式相同,以SAL为例:
12
(2)循环移位指令
不含进位位的循环左移指令 ROL 不含进位位的循环右移指令 ROR 含进位位的循环左移指令 RCL 含进位位的循环右移指令 RCR
➢格式同非循环移位指令。 ➢移位位数放在CL寄存器中,如果只移1位, 也可以直接写在指令中。 ➢循环移位指令只影响标志位CF和OF。
13
这4条指令的功能如下图示:
MOV CL,4 SHR AL,CL ;AL中的内容右移4位 ➢影响C,P,S,Z,O标志。 ➢结果未溢出时: 左移1位≡操作数*2 右移1位≡操作数/2
11
例:把AL中的数x乘10 因为10=8+2=23+21,所以可用移位实现乘10 操作。程序如下:
SAL AL,1 ; 2x MOV AH,AL SAL AL,1 ; 4x SAL AL,1 ; 8x ADD AL,AH ; 8x+2x = 10x
……
; if not matall ‘1’
3
(2) 逻辑”或” OR
对两个操作数进行按位逻辑”或”操作。 格式:OR dest, src 用途:对操作数的某几位置1;对两操作数
进行组合。
例1:把AL中的非压缩BCD码变成相应十进制 数的ASCII码。 OR AL, 30H
- 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种类型: