十进制算术运算指令
- 格式:ppt
- 大小:342.50 KB
- 文档页数:89
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中。
BCD码指令 AAA DAA AAS DAS AAM AAD( 四 )十进制数(BCD码)运算指令以上我们介绍的是二进制数的算术运算指令,二进制数在计算机长进行运算是特别简单的。
可是,往常人们习惯于用十进制数。
在计算机中十进制数是用 BCD码来表示的, BCD码有两类:一类叫压缩型BCD码,一类叫非压缩型BCD码。
用 BCD码进行加、减、乘、除运算,往常采纳两种方法:一种是在指令系统中设置一套专用于BCD码运算的指令;另一种是利用二进制数的运算指令算出结果,而后再用特意的指令对结果进行修正(调整),使之转变成正确的BCD码表示的结果。
8086/8088指令系统所采纳的是后一种方法。
在进行十进制数算术运算时,应分两步进行:①先按二进制数运算规则进行运算,获得中间结果。
②再用十进制调整指令对中间结果进行修正,获得正确的结果。
下边经过几个例子说明BCD码运算为何要调整以及如何调整。
结果正确,这时调整指令不需要做什么。
结果不正确,由于在进行二进制加法运算时,低4 位向高4 位有一个进位,这个进位是按十六进制进行的,即低4 位逢十六才进一,而十进制数应是逢十进一。
所以,比正确结果少 6,这时,调整指令应在低 4 位上加 6。
即:加法运算后,低 4 位若向高 4 位有进位(即 AF=1)时,调整指令应做加 06H办理。
加法运算后,低4位 >9时,调整指令需做加 06H 办理;高4位 >9时,调整指令需做加 60H办理。
加法运算后,当CF=1(有进位产生)时,调整指令应做加60H办理。
前方我们已经详尽地介绍了二进制数的算术运算指令,下边主要介绍十进制数( BCD码)的调整指令。
⒈十进制加法的调整指令依据 BCD码的种类,对 BCD码加法进行十进制调整的指令有两条AAA 和 DAA。
⑴非压缩型 BCD码加法调整指令AAA (ASCII Adjust for Addition)指令格式:AAAAAA也称为加法的 ASCII 调整指令。
算数运算指令展开全文算数运算指令算术运算指令的主要功能是实现算术加、减、乘、除等运算。
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中。
fx5u十进制浮点数除法指令在PLC编程中,fx5u系列PLC具有强大的十进制浮点数处理能力,其中包括了许多高级的指令和功能,其中之一就是十进制浮点数除法指令。
在本文中,我们将深入探讨fx5u十进制浮点数除法指令的使用方式、实际应用和相关概念,以便读者能够全面、深刻地理解这一主题。
1. fx5u十进制浮点数除法指令简介在PLC编程中,十进制浮点数的处理是非常常见的操作。
fx5u系列PLC提供了丰富的算术运算指令,其中包括了十进制浮点数的除法指令。
这个指令可以方便地进行十进制浮点数的除法运算,是在工业控制和自动化领域中非常实用的功能之一。
2. fx5u十进制浮点数除法指令的使用方式要在fx5u系列PLC中使用十进制浮点数除法指令,首先需要了解这个指令的格式和参数。
在编程软件中选择该指令,然后填入被除数和除数的位置区域,将运算结果保存到指定的存储位置区域中。
还需要注意对被除数和除数的数据类型进行正确的设置,以确保运算的准确性和可靠性。
3. 实际应用举例为了更好地理解fx5u十进制浮点数除法指令的使用方式和实际应用,我们可以举一个简单的工业控制场景。
假设我们需要控制一个温度控制系统,需要根据当前温度和设定温度进行自动调节。
在这个过程中,就需要使用十进制浮点数除法指令来计算控制误差和控制量的关系,从而实现精确的温度控制。
4. 深入理解十进制浮点数除法指令除了了解指令的使用方式和实际应用之外,还需要深入理解十进制浮点数的处理原理和编程技巧。
在实际的工程项目中,可能会遇到各种复杂的情况和需求,只有深入理解才能够应对各种挑战并设计出更加优秀、高效的控制系统。
5. 个人观点和总结作为一名资深的PLC工程师,我认为fx5u系列PLC提供的十进制浮点数除法指令是非常实用和强大的功能。
通过合理的应用和深入的理解,可以为工业控制系统的设计和优化提供有力的支持。
希望本文能够帮助读者更好地理解和应用fx5u十进制浮点数除法指令,从而在实际工程项目中取得更好的效果。
十进制算术指令AAM指令讲解文稿1.AAM指令:非压缩BCD码运算调整指令,在乘法后进行ASCII调整。
PS:压缩BCD码与非压缩BCD码的区别:1)压缩BCD码:即每一位用4位二进制表示,一个字节表示两位十进制数。
例如10010110B表示十进制数96D。
2)非压缩BCD码:用1个字节表示一位十进制数,高四位总是0000,低4位的0000~1001表示0~9。
例如00001000B表示十进制数8。
2.AAM指令功能:调整寄存器AL之值,该值是由两个单BCD码字节用无符号乘指令MUL所得的积。
·把在AX中的两个未组合的十进制数相乘的结果进行校正,最后在AX中得到正确的未组合的十进制数乘积(高位存在AH,低位存在AL)。
1)普通十进制中:求某数(Y)的十位:Y/10求某数(Y)的个位:Y%10如:一个十进制数72它的十位:72/10=7它的个位:72%10=22)在二进制中:同理,在二进制中我们也可以利用这种运算来将两个未组合的十进制数相乘的结果进行校正。
操作如下:AH←AL/0AH(AL被0A除的商→AH)AL←AL%0AH(AL被0A除的余数→AL)如:两个未组合的十进制数8---0000 1000B和9---0000 1001B进行运算1)按照二进制的规则相乘的时候:00001000BX00001001B0000100000001000.01001000B2)若要在AX中得到用未组合十进制表示的乘积,则十位数7---0000 0111B应该在AH中,个位数2---0000 0010B应该放在AL中,进行校准操作如下:·AH←AL/0AH(AL被0A除的商→AH)0100 1000B/0000 1010B=0000 0111B0000 0111B存入AH中·AL←AL%0AH(AL被0A除的余数→AL)0100 1000B%0000 1010B=0000 0010B0000 0010B存入AL中3.80x86系列处理器允许两个未组合的十进制数直接进行相乘,但要得到正确结果,必须在MUL指令之后,紧跟一条AAM指令进行校正,最后可在AX中得到正确的两个未组合的十进制数的乘积。
一、算术运算指令算术运算中的溢出问题以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个状态标志位都会产生影响。
BCD码指令 AAA DAA AAS DAS AAM AAD(四) 十进制数(BCD码)运算指令以上我们介绍的是二进制数的算术运算指令,二进制数在计算机上进行运算是非常简单的。
但是,通常人们习惯于用十进制数。
在计算机中十进制数是用BCD码来表示的,BCD码有两类:一类叫压缩型BCD码,一类叫非压缩型BCD码。
用BCD码进行加、减、乘、除运算,通常采用两种方法:一种是在指令系统中设置一套专用于BCD码运算的指令;另一种是利用二进制数的运算指令算出结果,然后再用专门的指令对结果进行修正(调整),使之转变为正确的BCD码表示的结果。
8086/8088指令系统所采用的是后一种方法。
在进行十进制数算术运算时,应分两步进行:①先按二进制数运算规则进行运算,得到中间结果。
②再用十进制调整指令对中间结果进行修正,得到正确的结果。
下面通过几个例子说明BCD码运算为什么要调整以及怎样调整。
结果正确,这时调整指令不需要做什么。
结果不正确,因为在进行二进制加法运算时,低4位向高4位有一个进位,这个进位是按十六进制进行的,即低4位逢十六才进一,而十进制数应是逢十进一。
因此,比正确结果少6,这时,调整指令应在低4位上加6。
即:加法运算后,低4位若向高4位有进位(即AF=1)时,调整指令应做加06H处理。
加法运算后,低4位>9时,调整指令需做加06H处理;高4位>9时,调整指令需做加60H处理。
加法运算后,当CF=1(有进位产生)时,调整指令应做加60H处理。
前面我们已经详细地介绍了二进制数的算术运算指令,下面主要介绍十进制数(BCD码)的调整指令。
⒈十进制加法的调整指令根据BCD码的种类,对BCD码加法进行十进制调整的指令有两条AAA和DAA。
⑴非压缩型BCD码加法调整指令AAA (ASCII Adjust for Addition)指令格式:AAAAAA也称为加法的ASCII调整指令。
指令后面不写操作数,但实际上隐含累加器操作数AL和AH。
十进制减法是常见的算术运算之一,用于计算两个十进制数之间的差值。
以下是进行十进制减法运算的一般步骤:
1. 对齐数字:将被减数和减数的各位数字对齐。
2. 逐位相减:从右到左逐位相减,将相应位置上的数字相减。
3. 借位操作:如果减数大于被减数的某一位数字,则需要向高位借位。
借位操作会从高位减去1,并将借位的1加到被减位的数字上。
4. 计算差值:完成所有的相减和借位操作后,得到的结果即为差值。
以下是一个具体的例子来说明十进制减法的步骤:
472
- 189
------
283
在这个例子中,我们将被减数472 和减数189 对齐,然后从右到左逐位相减。
首先,从个位开始,2 减去9 不够减,需要向十位借位。
借位后,得到12 减去9 等于3。
然后,7 减去8 不够减,再次需要向百位借位。
借位后,得到17 减去8 等于9。
最后,4 减去1 等于3。
所以,最终的差值为283。
请注意,在进行减法运算时,确保在相应位上进行减法操作时没有出现借位错误,并仔细执行每一步操作,以获得正确的结果。