算术运算指令
算术运算类指令

2009年6月2日星期二
15
2.双寄存器符号扩展指令CWD/CDQ/CQO
指令格式:CWD
CDQ
CQO 功能:CWD功能为将AX寄存器的内容符号扩展到DX中;
CDQ指令的功能为将EAX寄存器的内容符号扩展到EDX中; CQO指令的功能为将RAX寄存器的内容符号扩展到RDX中,只 能在64位方式下使用。 它们都不影响标志位。 一般来说符号扩展指令大都与除法指令相结合,为达到被除数的位数要 求而扩展。 【例3.29】 求0ABCH÷0200H(带符号数相除) 由于除数为字,则必须将原来的被除数进行符号扩展后才能相除。
2009年6月2日星期二
10
AL ╳ src (8位源操作数)
AX
(16位乘积)
字节乘法
AX
╳
src (16位源操作数)
DX AX 字乘法
(32位乘积)
╳
src (32位源操作数)
EDX EAX (64位乘积)
RAX
╳
src (64位源操作数)
RDX RAX (128位乘积)
32位乘法
64位乘法
【例】 设AX=65A0H,BX=B79EH,指令ADD BX,AX的执行情况如下:
0110010110100000 +)1011011110011110
10001110100111110
结果非零:ZF=0
最高位有进位:CF=1 最高位为0:SF=0
OF=最高位进位1⊕次高位进位1,则OF=0
无进位: AF=0 低8位为偶数个1:PF=0
状态标志位
OF SF ZF AF PF CF
Y **** Y Y **** Y Y **** Y Y **** Y
3.3.2 算术运算类指令

1. 加法指令(s 代表源操作数,d 代表目标操作数)(1)不带进位的加法指令add d,ss和d相加的结果存入d。
(2)带进位的加法指令adc d,sS和d相加后再加上标志位CF,结果存入dAdd主要用来计算低位字加法,adc用来计算高位字加法,实现32位加法比如一个32位数,高16位存在dx中,低16位存在ax中另一个32位数,高16位置存在cx中,低16位存在bx中计算加法add ax,bxAdc dx,cx(3)加1指令inc d 则d=d+1Inc axInc bl2. 减法指令(1)不带借位的减法sub d, sd-s结果存入d(2)带借位的减法sbb d,sd-s-CF,结果存入d比如一个32位数,高16位存在dx中,低16位存在ax中另一个32位数,高16位置存在cx中,低16位存在bx中计算减法,第一个数减第二个数sub ax,bxsbb dx,cx(3)减1指令dec d 则d=d-1dec axdec bl(4)求补NEG d将d包括符号位在内各位取反,末位加1相当于d=0-d比如字节型-5计算机中存的是11111011求补后是00000101,即5比如字节型+7计算机中存的是00000111求补后是11111001即-7 (5)比较cmp d,s类似做减法sub,但不保存结果,只用来影响标志位,主要通过执行后的标志位来判断两个数的大小关系比如cmp ax,bx (类似做ax-bx)Jz label1 (JZ意思是两数相等则跳转, jmp if zf=1)3. 乘法指令(1)无符号数乘法(用于正数)Mul s (该指令隐含了操作数ax或al)s为无符号word型,将s与AX相乘,结果存入DX,AX;s为无符号byte型,将s与AL相乘,结果存入AX(2)有符号数乘法(用于负数)imul s (该指令隐含了操作数ax或al)s为有符号word型,将s与AX相乘,结果存入DX,AX;s为有符号byte型,将s与AL相乘,结果存入AX乘法指令影响of位和cf位,乘积结果用到高字(节)寄存器,则of=1,cf=1;没用到高字(节)寄存器(结果在8位或16位范围内) 则of=0,cf=0 书p974. 除法指令(隐含被除数在ax或dx,ax中)(1)无符号数除法Div sS为无符号byte型,则用ax/s ,商存在al中,余数存在ah中S为无符号word型,则用dx,ax/s,商存在ax中,余数存在dx中(2)有符号数除法idiv s和无符号数除法类似,用于有符号数假设用30001/2 ,代码如下Mov ax, 30001Mov bl, 2Div bl得到的是divide override,这样的情况暂不考虑,只考虑结果能够存放到相应寄存器中的情况(3)字节转换成字(隐含操作数为al)CBW将al中的符号位扩展到ah中,比如-5,mov al,-5<=> mov al, 11111011bal中的11111011b经cbw扩展后AX中为1111111111111011b;al存的如果是正数,直接在ah中存入00000000b(4)字转换成双字(隐含操作数为ax)Cwd (convert word to dword)和cbw类似,将ax中的符号位扩展到dx中。
第三节算术运算指令

1、 ADD(Addition)加法指令
指令格式:ADD dest , src ;(dest) (dest)+(src) Src:立即数,寄存器,存储器。 dest:寄存器,存储器。
例:
ADD CL,10 ADD DX,SI ADD AX, MEM ADD DATA[BX], AL ;寄存器+立即数 ;寄存器+寄存器 ;寄存器+存储器 ;存储器+寄存器
双高位判别法
(2)无符号数相加溢出 根据CF判断无符号数产生溢出? CF=1无符号数相加产生溢出,但考虑进位所代表的数 值后,结果并没有错。
(一)加法指令(Arithmetic)
8088具有5种加法操作指令:
1、 ADD(Addition)加法指令 2、 ADC(Add with carry)带进位加法指令 3、 INC(Increment by 1)加 1指令
SUB WORD PTRALPHA[BX][DI],512H;存储器减立即数
这种指令影响标志位: AF、CF、OF、PF、SF、ZF标志。
2、SBB(Subtraction with borrow)带进位减法指令 格式::SBB dest,src;(dest)←(dest)-(src)-CF CF: 进位标志CF的现行值(上条指令CF值)
;存储器+1(字操作)
INC WORD PTR [DI]
INC
DS
; 错
(二)减法指令(Subtraction)
8088有7条减法指令 :
1、SUB(Subtraction)减法指令
2、SBB(Subtraction with borrow)带进位减法指令 3、DEC(Decrement by 1 ) 减 1 指令 4、NEG(Negate) 求补指令 5、CMP(Compare) 比较指令
单片机指令的算术运算与数值处理技巧

单片机指令的算术运算与数值处理技巧单片机(Microcontroller Unit,MCU)作为一种集成了处理器核心、存储器和各种外设接口的微型计算机,通常用于嵌入式系统中。
在单片机的编程过程中,算术运算和数值处理是其中一个重要的方面。
本文将介绍单片机指令的算术运算和数值处理的技巧和方法。
一、算术运算指令在单片机中,常见的算术运算指令包括加法、减法、乘法、除法等。
这些指令的使用需要掌握相应的编程知识和技巧。
1. 加法运算在单片机中执行加法运算可以使用ADD指令。
例如,使用ADD A, B指令可以将A寄存器的值与B寄存器的值相加,并将结果保存在A寄存器中。
同时,还可以使用ADD指令进行带进位的加法,比如使用ADDC A, B指令。
2. 减法运算减法运算可以使用SUB指令进行。
例如,使用SUB A, B指令可以将A寄存器的值减去B寄存器的值,并将结果保存在A寄存器中。
还可以使用SUBB指令进行带借位的减法。
3. 乘法运算单片机中一般没有专门的乘法指令,但可以通过多次执行移位和加法运算来实现乘法运算。
例如,可以使用循环结构和移位指令来实现乘法运算,将被乘数左移一位,然后与乘法因子相加。
重复这个过程直到完成相应的乘法运算。
4. 除法运算除法运算在单片机中也没有专门的指令。
如果需要进行除法运算,可以通过循环结构和移位指令来实现。
例如,可以使用循环结构和移位指令将被除数逐步减去除法因子,直到被除数小于除法因子为止,最后得到商和余数。
二、数值处理技巧除了基本的算术运算指令外,单片机的数值处理还需要掌握一些常用的技巧和方法,以提高程序的效率和准确性。
1. 数据类型选择在进行数值处理时,应根据实际需要选择合适的数据类型。
例如,如果处理的数值范围比较小,可以选择使用无符号整型(unsigned int)来提高存储效率。
而如果需要处理负数,可以选择有符号整型(signed int)。
2. 溢出处理在进行算术运算时,可能会出现溢出的情况。
第八节 算术运算类指令

判断溢出的方法
• 两数相加时,只有当参加运算的两个数 两数相加时, 符号相同时, 发生溢出现象( 符号相同时,才有可能发生溢出现象(异 号相加无溢出) 号相加无溢出),溢出时运算结果的符号 号相反。 与参加运算的符号相反。可以利用这个 特点判断加法有无溢出, 特点判断加法有无溢出,称为判断溢出 的符号法则。 的符号法则。
8.1.3 补码
• 负数的补码=模-该负数的绝
对值
• 例如,若X是负数,则有:X补 是负数,则有: 例如, =mod- =mod-│X│ • 当模为12时,0至12间的任何数 当模为12时 12间的任何数 与其加- 减3与其加-3的补码的效果是 一样的。例如: 一样的。例如: • 6-4=2 • -4的补码为:[-4]=12-4= 的补码为: 4]=12- +8 • 6+8=12+2=2(12自然消失) 8=12+2=2(12自然消失 自然消失) • 由上可见,在某一计数系统的 由上可见, 模内, 模内,任何加减法运算都归结
• • • • • • •
例:求(-20)+(+16)=? (-20)+(+ ) )+(+16 相当于计算[ 20]补 16]补 解:相当于计算[-20]补+[+16]补。 [-20]原=10010100B 20]原 [-20]反=11101011B 20]反 [-20]补=[-20]反+1=11101011B+1=11101100B 20]补=[-20]反 1=11101011B+ [+16]补=[+16]原=00010000B 16]补=[+16]原 下面列出[―20]补 16]补的算式 补的算式: 下面列出[―20]补+[+16]补的算式:
但是如果我们一旦决定参加运算的操作数是无符号数对于运算结果我们也一定要把结果看待为无符号数若我们决定参加运算的操作数是带符号数补码形式结果就必须看待为带符号数补码形式
二、算术逻辑运算指令

二、算术运算指令
• • • • • • • •
MOV ADD DA MOV MOV ADDC DA MOV
A,50H A,60H A 40H,A A,51H A,61H A 41H,A
;(A)←(50H) ;(A)←(A)+(60H) ;BCD码修正
二、算术运算指令 ⑷加1指令
• • • • • INC INC INC INC INC A Rn direct @Ri DPTR ;(A)←(A)+1 ;(Rn)←(Rn)+1 ;(direct)←(direct)+1 ;((Ri))←((Ri))+1 ;(DPTR)←(DPTR)+1
• 功能是将累加器A内容减去源地址单元内容,再减去 进位位Cy的内容,结果放入累加器A中 • 问题:如何应用此指令对两个单字节数相减?
二、算术运算指令
•主要用于多字节数的减法 如果要进行单字节或多字节数低8位数的减法运算,应先 清除进位位Cy。 • 对于PSW的影响CY、AC、OV、P • 例3-15:设累加器A的内容为0C9H,寄存器R2内容为 54H,进位标志Cy=1,执行指令:SUBB A,R2
二、算术运算指令
⑵减1 指令 • • • • DEC DEC DEC DEC A ;(A)←(A)-1 Rn ;(Rn)←(Rn)-1 direct ;(direct)←(diect)-1 @Ri ;((Ri))←((Ri))-1
• 注:执行结果只影响PSW的奇偶校验位P (以A为操 作数时 )
二、算术运算指令
二、算术运算指令
• (3) 二-十进制调正指令(BCD码修正指令) DA A ; • 若[(A3~0)>9]或[(AC)=1] 则(A3~0)←(A3~0)+06H; 若[(A7~4)>9]或[(Cy)=1] 则(A7~4)←(A7~4)+60H 注: • 本指令不能单独使用,只能用在加法指令之后 • 本指令不能直接用于十进制数减法的调正 • 本指令不能简单的把累加器A中的16进制数变换成 BCD码
算数运算指令

算数运算指令展开全文算数运算指令算术运算指令的主要功能是实现算术加、减、乘、除等运算。
1.ADD类指令是不带进位的加法运算指令(4条)。
ADD A,Rn ;A+Rn→A, A与Rn寄存器内容相加,结果送到A中ADD A,direct ;(direct)+A→A, A与直接地址内容相加,和送AADD A, @Ri ;(Ri)+A→A, A与Ri间址内容相加,和送AADD A, #data ;data+A→A, A与立即数相加,和送A注意:ADD类指令相加结果均在A中,相加后源操作数不变。
若A中最高位有进位,Cy置1;若半加位有进位,AC置1。
A的结果还影响奇偶标志位P。
例 A=30H, R0=10H执行 ADD A,R0 结果:A=40H, R0=10H,标志位 P=1, Cy=0, OV=0, AC=02.ADDC类指令(带进位加法4条)ADDC A, Rn ;A+Rn+Cy→A, A与R n内容、进位状态相加,和送到A中ADDC A, direct ;(direct)+Cy+A→A, A与直接地址中内容、进位状态相加,和送AADDC A, @Ri ;(Ri)+Cy+A→A, A与Ri间址单元中内容、进位状态相加,和送AADDC A, #data ;data+Cy+A→A, A与立即数、进位状态相加,和送A与ADD类指令的区别是,ADDC指令相加时连同进位标志Cy内容一起相加,主要用于多字节加法中的高位字节的相加,而最低位字节相加用ADD指令。
进位位Cy加到字节的最低位。
例写计算1234H+0FE7H的程序,将结果存入内部RAM的41H 和40H单元,40H存低8位,41H存高8位。
程序MOV A, #34H ;被加数低8位数34H送AADD A, #0E7H ;加数低8位数E7H与之相加,A=1BH,Cy=1 MOV 40H, A ;A→40H即34H+E7H结果存入40H中(40H=1BH)MOV A, #12H ;被加数高8位数12H送AADDC A, #0FH ;加数高8位0FH和Cy与A相加,A=22H MOV 41H, A ;高8位与进位位之和存入41H中(41H)=22H ;总和为221BH,总结果在41H,40H单元中3.SUBB类指令(4条)SUBB类指令是带借位减法指令,其功能是将A中被减数减去源操作数指出的内容,再减去借位标志Cy(原进位标志)状态,差值在A中。
51单片机汇编程序设计之算数运算指令

1) 逻辑“与”指令
汇编指令格式 机器指令格式
操作
ANL A,Rn
58H~5FH
A ← (A)∧(Rn)
ANL A,direct 55H direct
A ← (A)∧(direct)
B←(A)÷(B)的余数
注意:若除数(B)=00H,则结果无法确定,OV置1。 CY总是 被清0。该操作也影响标志位P。
3 加1、减1指令
1) 加1指令 汇编指令格式 INC A INC Rn INC direct INC @Ri INC DPTR
机器代码 04H 08H~0FH 05H direct 06H~07H A3H
操作 A ← (A)-1 Rn ← (Rn)-l direct←(direct)-1 (Ri) ← ((Ri))-1
注意:1.该操作不影响PSW标志位。 2. 51单片机无DEC DPTR指令。
4 十进制调整指令
汇编指令格式 机器码格式 操 作
DA A
D4H
对A进行BCD调整
注意:这条指令一般跟在ADD或ADDC指令后,对累 加器A中的结果进行BCD调整。 该操作影响标志位P。
2 乘法、除法指令
1) 乘法指令
汇编指令格式 机器指令格式
操作
MUL AB
A4H
BA ← (A)×(B)
注意:若乘积大于0FFH,则OV置1,否则清0(此时B的内容为 0)。CY总是被清0。该操作也影响标志位P。
2) 除法指令
汇编指令格式 机器指令格式
操作
DIV AB
84H
A←(A)÷(B)的商,
【例2】 试编程计算5678H – 1234H的值,结果保存在R6、 R5中。
解:减数和被减数都是16位二进制数,计算时要先进行低8 位的减法,然后再进行高8位的减法,在进行低8位减
算术运算类指令

算术运算类指令
1.加法指令
ADD ⽬的操作数, 源操作数
ADC ⽬的操作数,源操作数
INC ⽬的操作数
ADD不带进位的加法指令,ADC带进位的加法指令,影响CF,INC增量指令,操作数⾃加⼀
2.减法指令
SUB ⽬的操作数,源操作数
SBB ⽬的操作数,源操作数
DEC ⽬的操作数
NEG ⽬的操作数
CMP ⽬的操作数,源操作数
SUB不带借位的减法指令,SBB带借位的减法指令,影响标志位,DEC⾃减⼀,NEG是求补指令,功能是将⽬的操作数的内容取补码,再将结果送回操作数,CMP⽐较指令,功能是⽬的操作数减去源操作数,不送回结果,影响标志位
3.乘法指令
MUL 源操作数
IMUL 源操作数
MUL是⽆符号数相乘,IMUL是有符号数相乘。
功能是AL乘以源操作数,16位乘积存放在AX中,或AX乘以源操作数,32位乘积存放在DX,AX
4.除法指令
DIV 源操作数
IDIV 源操作数
CBW
CWD
DIV是⽆符号除法,IDIV是有符号数除法。
功能是DX和AX表⽰的32位除以源操作数,得到的商放在AX中,16位的余数DX中。
或AX表⽰的16位数除以8位的源操作数,得到8位商放在AL中,8位余数放在AH中,CBW将字节扩展成字的指令,即将AL寄存器中的符号位扩展到AH 中。
CWD指令将AX中的被除数扩展成双字,即把AX中的符号位扩展到DX中
5.BCD码运算的调整指令
DAA AAA DAS AAS AAM AAD
⼆进制数实现⼗进制加减法。
汇编语言设计-算术运算指令

NEG指令是对指令中的操作数取补,再将结果送回。因 对一个操作数求2的补码,相当于0减去此操作数,所以NEG 指令执行的也是减法操作。
说明:0 – OPRD 又相当于: ①、FFH-OPRD+1 (字节操作)或
②、FFFFH-OPRD+1(字操作)。即将OPRD内容变反加1
例:若(AL)=13H 0000 0000 执行 NEG AL – 0001 0011
0000 0110 + 1111 1100 1← 0000 0010
6 + 252
258>255
+6 + (–4)
+2
CF=1 溢出
OF=0 不溢出
ⅲ、无符号数不溢出,带符号数溢出:
二进制加法 认作无符号 认作带符号数
0000 1000 + 0111 1011
1000 0011
8 + 123
131 CF=0 无溢出
2、带进位位的加法指令ADC ADC dest , src ; dest←dest+src+CF
ADC主要用于多字节运算,ADC对标志位的影响同ADD。 例:计算 1234FEDCH+33128765H 分别存于数据段指
定的区域中,低位在前,高位在后,相加后其和存入前一个双 字所在的区域中。 (SI)→1000H DCH (41H)
+ 39H 0011 1001
0110 1110
则(AL)=6EH,低4位为非法码,故需调整。
4、组合十进制加法调整指令DAA
(BCD码的加法十进制调整指令)
格式:DAA
功能:对组合BCD码相加的结果进行调整,使结果仍为 组合的BCD码。
算术运算类指令

√ √ √ √ 累加器A中的内容与工作寄存 器Ri所指向地址单元中的内容 相加,结果存在A中
各标志位的形成方法: 如果位7有进位输出,则置位CY,否则清CY; 如果位3有进位输出,则置位AC,否则清AC; OV=CY7⊕CY6。 若累加器A中1的个数为奇数,则P=1,否则,P=0。
√ √ √ √ 累加器A中的内容减工作寄存器中 的内容再减借位位,结果存在A中
A←(A)-((Ri))-(CY)
√√
√ √ 累加器A中的内容减工作寄存器Ri 指向的地址单元中的内容再减借位 位,结果存在A中
在减法运算中
CY=1表示有借位,CY=0则无借位。 OV=1表明带符号数相减时,从一个正数减去一个负数结果为
√√
√
√
累加器A中的内容与立即数连同进位
位相加,结果存在A中
√√
√
√
累加器A中的内容与工作寄存器Rn中
的内容、连同进位位相加,结果存在
A中
√√
√
√
累加器A中的内容与工作寄存器Ri指
向的地址单元中的内容、连同进位位
相加,结果Байду номын сангаас在A中
3. 带借位减法指令(4条)
指令
功能
标志位
解释
PO A C VCY
SUBB A,direct
注意: DA A 只能用于加法运算
【例】:有两个BCD数36与45相加,结果应为BCD码81, 程序如下:
MOV A,#36H
ADD A,#45H
DA A
加法指令执行后得结果7BH;第三条指令对累加器A中的 结构进行十进制调整,低4位(为0BH)大于9,因此要加6, 最后得到调整的BCD码为81。
算术运算类指令

dec byte ptr [si] ;[si]←[si]-1
第2章:2.5 位操作类指令 (逻辑运算指令)
位操作类指令以二进制位为基本单位进行数据的 操作 当需要对字节或字数据中的各个二进制位操作时, 可以考虑采用位操作类指令 注意这些指令对标志位的影响
1. 逻辑运算指令 AND OR XOR NOT TEST 2. 移位指令 SHL SHR SAR 3. 循环移位指令 ROL ROR RCL RCR
;最高位不变,最低位进入CF
第2章:2.5.3 循环移位指令
循环移位指令类似移位指令,但要将从一 端移出的位返回到另一端形成循环。分为:
ROL reg/mem,1/CL ;不带进位循环左移 演示 ROR reg/mem,1/CL ;不带进位循环右移 演示 RCL reg/mem,1/CL ;带进位循环左移 演示 RCR reg/mem,1/CL ;带进位循环右移 演示
AND指令可用于复位某些位(同0相与),不影响其他位
OR指令可用于置位某些位(同1相或),不影响其他位
第2章:2.5.2 移位指令
将操作数移动一位或多位,分成逻辑移位 和算术移位,分别具有左移或右移操作
移位指令的第一个操作数是指定的被移位 的操作数,可以是寄存器或存储单元;后 一个操作数表示移位位数:
只要相“或”的两位 有一位是1,结果就是1; 否则,结果为0
第2章:逻辑异或指令XOR
对两个操作数执行逻辑异或运算,结果送目的操作数
XOR dest,src
;dest←dest⊕src
只有相“异或”的两 位不相同,结果才是1; 否则,结果为0
第2章:逻辑非指令NOT
对一个操作数执行逻辑非运算
NOT reg/mem
汇编语言设计-算术运算指令

N
传完否?
JNZ AGAIN ;CX≠0,循环
Y
结束
8086算术运算指令可用的BCD码有两种:
ⅰ、组合BCD码:一个字节表示2位BCD码
ⅱ、非组合BCD码:一个字节只用低4位表示1位BCD 码, 高4位为0(无意义)。
例:设(AL)=35,(BL)=39 35H 0011 0101
执行 ADD AL,BL
JNS NEXT
;若SF=0,则(AX)>(BX),转NEXT
XCHG AX,BX ;否则交换
NEXT:HLT
Ⅱ、两负数比较,即A<0,B<0:两负数相减,结果也不会溢出,
仍可用符号标志,若SF=0,则A>B;反之若SF=1,则A<B。
Ⅲ、两异号数比较。当A>0,B<0时,当然的结果应该是A>B,
而且有SF=0。
格式:ADD dest,src ;dest←dest+src
功能:将源操作数与目的操作数相加,将结果送回目的操 作数。指令执行后对各状态标志均产生影响。
例:ADD CX,0F0F0H 设指令执行前(CX)=5463H
0101 0100 0110 0011
思考:
+ 1111 0000 1111 0000
LEA SI,BUF1 ;SI指向BUF1 LEA DI,BUF2 ;DI指向BUF2
取数 传送
MOV CX,100 ;CX放计数初值
AGAIN:MOV AL,[SI] ;取一字节数 MOV [DI],AL ;传送一字节数
修改地址指针 修改计数器
INC SI INC DI DEC CX
;修改地址指针 ;修改计数初值
NEG指令是对指令中的操作数取补,再将结果送回。因 对一个操作数求2的补码,相当于0减去此操作数,所以NEG 指令执行的也是减法操作。
算术运算指令

一、算术运算指令算术运算中的溢出问题以8位二进制数的加法为例,两个8位数相加时有4种情况:二进制运算对应的十进制运算数据作为无符号数数据作为有符号数Case1:无符号数和有符号数均不溢出0000 1000+ 0001 11100010 0110结果: 26H(38)CF=0, OF=08+ 3038未超出8位无符号二进制数表示范围+8+ (+30)+38未超出8位有符号二进制数表示范围Case2:无符号数溢出,有符号数不溢出0000 1000+ 1111 11011 0000 0101结果:5CF=1, OF=08+ 253261超出8位无符号二进制数表示范围+8+(-3)+5未超出8位有符号二进制数表示范围Case3:无符号数不溢出,有符号数溢出0000 1000+ 0111 11011000 0101结果:-123(补码)CF=0, OF=18+ 125133未超出8位无符号二进制数表示范围+8+ (+125)+133超出8位有符号二进制数表示范围Case4:无符号数和有符号数均溢出1000 1000+ 1111 01111 0111 1111结果:127CF=1, OF=1136+ 247383超出8位无符号二进制数表示范围-120+ (-9)-129超出8位有符号二进制数表示范围上面四种情况说明,算术运算溢出的判别是比较复杂的,不能只用一个标志位来判别。
算术运算溢出是一种出错状态,在运算过程中应当避免。
1 加法运算指令【例1】ADD CL,20H ;CL←(CL)+ 20HADD AX,SI ;AX←(AX)+(SI)ADD [BX+2],AL ;(BX+2)←((BX)+2)+(AL)ADD DX,[BX+SI] ;DX←(DX)+((BX)+(SI))ADD AX,CL ;错误!操作数类型应一致ADD [SI],[BX] ;错误!不允许两个操作数都是存储器ADD DS,AX ;错误!不允许把段寄存器作为操作数加法指令对全部6个状态标志位都会产生影响。
PLC算术运算指令

梯形图指令: INC
@INC
DEC/@DEC 功能:目标通道中的BCD数据减一,如非 BCD数据值位ER,该指令不影响CY位,但 影响EQ。 梯形图指令: DEC
@DEC
2.2 BCD加法指令ADD/@ADD 功能:BCD数的加法运算
梯形图指令:
ADD
@ADD
应用举例:求200通道与立即数6103的和。 梯形图:
plc算术运算指令算术运算指令三菱plc运算指令算术运算符shell算术运算算术运算导致溢出java算术运算符算术运算符优先级算术运算js算术运算
PLC算术运算指令
1、二进制数据算术指令 1.1 加法指令ADB/@ADB 梯形图指令: ADB
@ADB
AU的取值范围:IR、SR、HR、AR、LR、TC、DM、*DM和立即 数。 AD的取值范围:IR、SR、HR、AR、LR、TC、DM、*DM和立即 数。 R 的 取 值 范 围 : IR、HR、AR、LR、DM、*DM, 且 不 能 从 DM6144~DM6655取值。根据R的值影响标志位EQ、CY等标 志位。
梯形图指令:
1 3、指令综合练习 3、1 求000通道中的8位(00000-00007)二 进制数据的平方存入200通道中。 3、2求200、201、202三个通道的BCD数据 累加和。 3、3求200、201、202三个通道的BCD数据 奇数累加和。
此讲结束
点击返回
梯形图:
指令表:
1.3乘法指令MLB/@MLB 梯形图指令: MLB
@MLB
功能示意图 :
两通道相乘,其结果可以为32位数据, 注意R+1通道中存放高位数据。
1.4除法指令DVB/@DVB 梯形图指令: DVB
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
其结果仍存在A中。 对PSW中各位的影响:与ADD指令相同。 作用:一般用于多字节数的加法运算,低字节相加
时可能产生进位,可以通过带进位加法指令将低字 节的进位加到高字节上去。高字节求和时必须使用 带进位的加法指令。 例3-17、例3-18
四、带借位的减法指令
SUBB A,#data;A←(A)- data- Cy SUBB A,Rn ;A←(A)-( Rn) - Cy SUBB A,@Ri ;A←(A)-(( Ri)) - Cy SUBB A,direct ; A←(A)-(direct)- Cy 功能:把A中的内容减去源操作数所指出的内容和
五、加1指令
INC A ;A←(A)+1 INC Rn ; Rn ←( Rn )+1 INC @Ri ;( Ri)←(( Ri))+1 INC direct ; direct←( direct)+1 INC DPTR ;DPTR←(DPTR)+1 功能:将源操作数所指定的单元或寄存器中的内容
进位位标志Cy的值,差存入A中。
对PSW中各位的影响:
–若D7位有进位(借位),则Cy=1,否则Cy=0; –若D3位有进位(借位) ,则Ac =1,否则Ac =0; –若D6和D7中有且只有一个有进位(借位) ,则Ov=1,否
则Ov=0; –若结果A中1的个数为奇数,则P=1,否则P=0。
例3-19
加1,其结果仍送回原操作单元中。前四条是8位数 加1指令,最后一条是唯一的16位数加1指令。只有 第一条指令对PSW中的奇偶标志位P产生影响,其 余指令不会对PSW的任何标志位产生影响。 例3-20
六、减1指令
DEC A
;A←(A)-1
DEC Rn
; Rn ←( Rn )-1
DEC @Ri
;( Ri)←(( Ri))-1
DEC direct ; direct←( direct)-1
功能:将源操作数所指定的单元或寄存器中的 内容减1,其结果仍送回原操作单元中。对PSW 的影响同INC指令。
例3-21
七、乘、除法指令
1、乘法指令
– MUL AB;BA←(A)X(号数相乘,得到16位积,低8位 存放在A中,高8位存放在B中。
–若D7位有进位,则Cy=1,否则Cy=0; –若D3位有进位,则Ac =1,否则Ac =0; –若D6和D7中有且只有一个有进位,则Ov=1,否则Ov=0,
即Ov=D6 CyD7Cy; –若结果A中1的个数为奇数,则P=1,否则P=0。 例3-16
三、带进位的加法指令
ADDC A,#data;A←(A)+ data+ Cy ADDC A,Rn ;A←(A)+ (Rn)+ Cy ADDC A,@Ri ;A←(A)+(( Ri))+ Cy ADDC A,direct ; A←(A)+(direct)+ Cy 功能:把源操作数和A中的内容及Cy中的值相加,
一、指令特点
1、包括加、减、乘、除基本运算共24条 指令;
2、除加1、减1指令外,对PSW中的Cy、 Ac、Ov、P四个标志位都有影响;
3、助记符:ADD、ADDC、SUBB、INC、 DEC、DA、MUL和DIV等8种。
二、不带进位的加法指令
ADD A,#data;A←(A)+ data ADD A,Rn ;A←(A)+ (Rn) ADD A,@Ri ;A←(A)+(( Ri)) ADD A,direct ; A←(A)+ (direct) 功能:把源操作数和A中的数相加,其结果仍存在A中。 对PSW中各位的影响:
– 对PSW中各位的影响:若积大于255(FFH),即B的内 容不为0时,则Ov=1,否则Ov=0;Cy总是清零;P由A中1 的个数的奇偶性确定;对Ac位无影响。(例3-21)
2、除法指令
– DIV AB;A(商)…B(余数)←A/B – 功能:把A中的8位无符号整数除以B中的8位无符号整数,结果商存
放在A中,余数存放在B中。
– 对PSW中各位的影响: Cy总是清零; Ac位无影响; P由A 中1的个数的奇偶性确定;若除数为0(B=0),此时 Ov=1,说明除法溢出,否则Ov=0。(例3-23)
八、十进制调整指令
DA A;若Ac=1或A3~0>9,则A3~0← A3~0+6(A←A+06H); 若Cy=1或A7~4>9,则A7~4← A7~4+6(A←A+60H)(由CPU 自动判断并执行)
功能:在进行BCD码加法运算时,用来对BCD码的加法运 算结果自动进行修正。一般跟在ADD或ADDC指令之后,用 来对加法结果进行修正。
为什么要进行修正?在计算机中,十进制数字0~9是用BCD 码来表示的。而计算机在进行运算时是按二进制规则进行的 (只有ADD、ADDC两条二进制加法指令)。对于4位二进 制数有16种状态,对应16个数字,而十进制只用其中的10种 状态来表示0~9,因而按二进制规则运算就可能导致错误的 结果。因此,必须用DA A指令进行调整。