简要说明add、sub、and、or指令对标志位的影响。
PLC功能指令—数学运算指令

(4)整数数据做除以2运算,相当于其二进制形式右移1位;做除以4运算,相当 于其二进制形式右移2位;做除以8运算,相当于其二进制形式右移3位;……。
图5-15 整数除法运算双整数输出
2.除法指令DIV的举例
处于监控状态的除法指令梯形图如图5-16(a)所示。如果I0.0触点接通,执行除 法指令。除法运算的结果(15/2=商7余1)存储在VD20的目标操作数中,其中商7存储 在VW22,余数1存储在VW20。其二进制格式为0000 0000 0000 0001 0000 0000 0000 0111。
5.2.4 除法指令DIV
1.除法指令DIV的说明
(1)整数除法运算DIV_I。将2个单字长(16位)有符号整数IN1和IN2相除,运算 结果送到OUT指定的存储器单元,输出结果为16位。
(2)双整数除法运算DIV_DI。将2个双字长(32位)有符号双整数IN1和IN2相除 ,运算结果送到OUT指定的存储器单元,输出结果为32位。
2.加法指令ADD的举例
图5-10 加法指令举例 图5-11 加法运算状态监控表
5.2.2 减法指令SUB
1.减法指令SUB的说明
(1)整数减法运算SUB_I。将2个单字长(16位)有符号整数IN1和IN2相减, 运算结果送到OUT指定的存储器单元,输出结果为16位。
(2)双整数减法运算SUB_DI。将2个双字长(32位)有符号双整数IN1和IN2 相减,运算结果送到OUT指定的存储器单元,输出结果为32位。
【例题5.2】 要求I0.0在接通120~150s内Q0.0状态为ON,延时时间用模拟 电位器1进行调节,编写相应的PLC程序。
逻辑运算包括与或否异或除了否指令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
第三章 指令系统3-算数逻辑运算

NEG指令也是一个单操作数指令。
例:
mov ax,0ff64h neg al ;AL=0-64H=9CH,AX=FF9CH sub al,9dh;AL=9CH-9DH=FFH,AX= FFFFH neg ax ;AX=0-FFFFH=0001H dec al ;AL=01H-1=0,AX=0000H neg ax ;AX=0-0=0
6、乘法和除法指令
乘法指令分无符号和有符号乘法指令
MUL reg/mem ;无符号乘法 IMUL reg/mem ;有符号乘法
除法指令分无符号和有符号除法指令
DIV reg/mem ;无符号除法 IDIV reg/mem ;有符号除法
无符号数乘法指令
乘法指令分字节(8位)乘和字(16位)乘,要求: 被乘数事先放在AL或AX中,被乘数为隐含寻址;乘数放在寄存器 或存储器单元中,指令中只显式地表示乘数。 乘积为双字长,存放于AX(8位乘)或DXAX(16位乘)中。
(2) 非压缩型十进制数调整指令
AAA ;加法ASCII调整指令 AAS ;减法ASCII调整指令
AAA和AAS分别用于加法指令(ADD、ADC)或减法指令 (SUB、SBB)之后,执行时对AL进行测试,若AL中的低四 位>09H,或AF=1,则进行AL←(AL)±06H修正;AL的 高4位为0,同时AH←(AH)±1;CF=AF=1。调整后的结 果放在AX中 .
mov ax,0ff00h
;AX=FF00H,表示有符号10进制数-256
cwd
;将符号位“1”扩展,DX.AX=FFFFFF00H ;仍然表示-256
授课班级 授课题目
授课内容
目的要求 重点 难点 作业布置 备注
位操作指令

使用移位指令将一个数扩大或缩小2n倍,比使用乘法或 除法指令的速度快
例2.33:移位指令
mov cl,4 mov al,0f0h 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
and ax,0f0fh ;保证高4位为0 mov cl,4 rol ah,cl ;也可以用shl ah,cl add al,ah ;也可以用or al,ah
第2章
逻辑或指令OR
OR
对两个操作数执行逻辑或运算,结果
送到目的操作数
OR reg,imm/reg/mem ;reg←reg∨imm/reg/mem
OR mem,imm/reg ;mem←mem∨imm/reg
只要相“或”的两位有一位是1, 结果就是1;否则,结果为0
OR指令设置CF = OF = 0,根据结果设
如果进行一位移动,则按照操作数的
最高符号位是否改变,相应设置溢出 标志OF:如果移位前的操作数最高位 与移位后操作数的最高位不同(有变 化),则OF = 1;否则OF = 0。当移 位次数大于1时,OF不确定
第2章
移位指令的意义
一个数左移1位相当于乘以2,右移1位相当于除以2 逻辑移位适于无符号数的移位处理:
TEST
例2.32:测试某一位为0或1
test al,01h ;测试AL的最低位D0 jnz there ;标志ZF=0,即D0=1 ;则程序转移到there ... ;否则ZF=1,即D0=0,顺序执行 there: ...
TEST指令通常用于检测一些条件是否 满足,但又不希望改变原操作数的情况
计算机组成原理02-4

2. 带进位加和减指令
ADC dest,src
;加法:dest←dest+src+CF ;ADC指令除完成ADD加法运算外,还要 加上进位CF,结果送到目的操作数
SBB dest,src
;减法:dest←dest-src-CF ;SBB指令除完成SUB减法运算外,还要 减去借位CF,结果送到目的操作数
10/51 10/51
例题2.9 求补运算 mov ax,0ff64h neg al ;AL=0-64H=9CH,AX=0FF9CH ;OF=0,SF=1,ZF=0,PF=1,CF=1 sub al,9dh ;AL=9CH-9DH=0FFH,AX=0FFFFH ;OF=0,SF=1,ZF=0,PF=1,CF=1 neg ax ;AX=0-0FFFFH=0001H ;OF=0,SF=0,ZF=0,PF=0,CF=1 dec al ;AL=01H-1=0,AX=0000H ;OF=0,SF=0,ZF=1,PF=1,CF=1 neg ax ;AX=0-0=0 ;OF=0,SF=0,ZF=1,PF=1,CF=0
加法指令:ADD, ADC和INC 减法指令:SUB, SBB, DEC, NEG和CMP 他们分别执行字或字节的加法和减法运算, 除 INC 和 DEC 不影响 CF 标志外,其他按定 义影响全部状态标志位 操作数组合:
运算指令助记符 reg, imm/reg/mem 运算指令助记符 mem, imm/reg
11/51 11/51
2.4.2 符号扩展指令 符号扩展是指用一个操作数的符号位(最高位) 形成另一个操作数,另一个操作数的高位是全 0 (正数)或全1(负数) 符号扩展虽然使数据位数加长,但数据大小并没 有改变,扩展的高部分仅是低部分的符号扩展 符号扩展指令有两条
第3章-5逻辑移位

3.3 8086 CPU指令系统
例:测试为0或1
若要检测AL中的最低位是否为1,若为1则转移。 test al,01h ;测试AL的最低位D0 jnz NO ;标志ZF=0,即D0=1 ;则程序转移到NO ... ;否则ZF=1,即D0=0,顺序执行 NO: ...
思考:(1)以上检测的是最低位,若要检测AX的最高位 是否为1,若为1则转移,如何编程?
3.3 8086 CPU指令系统
3、逻辑异或指令XOR
XOR reg,imm/reg/mem ;reg←reg⊕imm/reg/mem XOR mem,imm/reg ;mem←mem⊕imm/reg
功能:对两个操作数执行按位逻辑异或运算,结果送到目的 操作数 说明: (1)只有相“异或”的两位不相同,结果才是1; (2) XOR指令对操作数的限制和对标志位的影响同AND指令 思考: (1)某一个操作数自己和自己相异或,结果是? 寄存器清0 (2)XOR指令主要用在什么场合? 求反某些位
3.3 8086 CPU指令系统
5、测试指令TEST
TEST reg,imm/reg/mem ;reg←reg∧imm/reg/mem TEST mem,imm/reg ;mem←mem∧imm/reg
功能:对两个操作数执行逻辑与运算,结果不回送到目的操 作数,但要影响标志位,标志位影响同AND指令。 说明: (1)本条指令通常是用于检测一些条件是否满足,但又不 希望改变原有的操作数的情况下。 (2)本条指令通常在其后紧跟一条条件转移指令。
3.3 8086 CPU指令系统
一、逻辑运算指令
AND
OR
NOT
XOR
TEST
3.3 8086 CPU指令系统
专升本微机原理_清华版_第五章(二)

移位指令的特点: 指令码 目标,计数值 ; 目标只能是寄存器、存储器,计数值只能是1或CL中 的值; 影响标志位的情况: 移位指令:除AF=任意值外,其余的根据结果而定 循环移位指令:只影响OF和CF(与逻辑运算指令刚好 相反)
P128 将AL中的值乘以10 的例子: SAL AL,1 ; AL=AL*2 MOV BL,AL ;将2X存于BL中 MOV CL,2 ;移位次数存入CL SAL AL,CL ;在乘以2的基础上再移两位相 当于乘以8 ADD AL,BL ;加上2X则=乘以10 例如,原AL=00000011B (3) 移一位得 00000110B (6), 00000110B 再移两位得 00011000B (24) 00011000B + 00000110B = 00011110B (30) 结果 3*10=30
OR 目标,源 (常用于将二进制数的某些位置1)
OR AL,30H; OR AX,00F0H OR BYTE PTR[BP],0FH OR BL, 0FH xxxxxxxx (BL)
OR
00001111 0F xxxx1111 结果(BL)
XOR 目标,源 (用于将二进制数的某些位求反,将要求反的某些 位与1异或。或对于某寄存器清0)
串扫描(影响标志位)
执行的操作: ①如(CX)=0或ZF=1(某次比较的结果两个操作数相等) 则退出REP,否则往下执行。 ② CX CX-1 例: ③ 执行其后SCAS串指令 MOV DI, OFFSET String ④ 重复①-③
MOV CX, xx MOV AL, ‗h‘ REPNZ SCASB JNZ Not_Found Found:
3.串比较(影响标志位) CMPSB CMPSW 比较地址为DS:SI、ES:DI的两 个字节/字
微机原理汇编常用指令

1) ADD 加法指令汇编格式:ADD 目的操作数,源操作数执行的操作:(目的操作数)←源操作数+目的操作数2) ADC 带进位加法指令汇编格式:ADC 目的操作数,源操作数执行的操作:(目的操作数)←源操作数+目的操作数+CF3) INC 增量指令汇编格式:INC 操作数执行的操作:(操作数)←操作数+1PS:以上三条指令都可作字或字节运算,除INC指令不影响CF标志位外,其他标志位都受指令操作结果的影响。
4) SUB 减法指令汇编格式:SUB 目的操作数,源操作数执行的操作:(目的操作数)←目的操作数-源操作数5) SBB 带借位减法指令汇编格式:SBB 目的操作数,源操作数执行的操作:(目的操作数)←目的操作数-源操作数-CF6) DEC 减量指令汇编格式:DEC 操作数执行的操作:(操作数)←操作数-17) NEG 求补指令汇编格式:NEG 操作数执行的操作:(操作数)←0-操作数8) CMP比较指令汇编格式:CMP 目的操作数,源操作数执行的操作:目的操作数-源操作数。
PS:以上五条指令都可作字或字节运算。
另外,除DEC指令不影响CF标志位外,其他指令都对标志位有影响。
9) MUL 无符号数乘法指令汇编格式:MUL 源操作数执行的操作:假设为字节操作(AX)←(AL)×源操作数假设为字操作(DX), (AX)←(AX)×源操作数10) IMUL 有符号数乘法指令汇编格式:IMUL 源操作数执行的操作:与MUL一样,只是处理的数据是有符号数,而MUL处理的数据是无符号数。
11) DIV 无符号数除法指令汇编格式:DIV 源操作数执行的操作:假设为字节操作:(AL)←(AX)/源操作数的商(AH)←(AX)/源操作数的余数假设为字操作:(AX)←(DX、AX)/源操作数的商(DX)←(DX、AX)/源操作数的余数商和余数均为无符号数。
12) IDIV 有符号数除法指令汇编格式:IDIV 源操作数执行的操作:与DIV一样,只是操作数是有符号数,商和余数均为有符号数,余数符号同被除数符号。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在计算机体系结构和汇编语言中,add(加法)、sub(减法)、and(按位与)和or(按位或)等指令通常会影响处理器的标志位(也称为条件码或状态寄存器),这些标志位用于条件分支和其他控制流操作。
以下是这些指令对标志位的典型影响:
add 指令:
影响标志位:ZF(零标志位)、SF(符号标志位)、OF(溢出标志位)、PF(奇偶标志位)。
情况:
ZF:当结果为零时设置。
SF:当结果为负数时设置。
OF:当发生溢出时设置。
例如,两个正数相加得到负数。
PF:当结果具有偶数个置位位时设置。
sub 指令:
影响标志位:ZF、SF、OF、PF。
情况:
ZF:当结果为零时设置。
SF:当结果为负数时设置。
OF:当发生溢出时设置。
例如,一个正数减去一个较大的正数得到负数。
PF:当结果具有偶数个置位位时设置。
and 指令:
影响标志位:ZF、SF、PF。
情况:
ZF:当结果为零时设置。
SF:当结果为负数时设置。
PF:当结果具有偶数个置位位时设置。
清除标志位:OF。
or 指令:
影响标志位:ZF、SF、PF。
情况:
ZF:当结果为零时设置。
SF:当结果为负数时设置。
PF:当结果具有偶数个置位位时设置。
清除标志位:OF。
这些标志位的状态可以被用于条件分支、循环等控制流操作。
例如,可以使用jz(Jump if Zero)、js(Jump if Sign)、jo(Jump if Overflow)等指令根据标志位的状态来进行跳转。
在程序设计中,了解这些标志位的影响是非常重要的,特别是在需要进行条件处理的情况下。