算數(shù)運算指令
算數(shù)運算指令
算術(shù)運算指令的主要功能是實現(xiàn)算術(shù)加、減、乘、除等運算。
1.ADD類指令是不帶進(jìn)位的加法運算指令(4條)。
ADD A,Rn ;A+Rn→A, A與Rn寄存器內(nèi)容相加,結(jié)果送到A中
ADD A,direct ;(direct)+A→A, A與直接地址內(nèi)容相加,和送A
ADD A, @Ri ;(Ri)+A→A, A與Ri間址內(nèi)容相加,和送A
ADD A, #data ;data+A→A, A與立即數(shù)相加,和送A
注意:ADD類指令相加結(jié)果均在A中,相加后源操作數(shù)不變。若A中最高位有進(jìn)位,Cy置1;若半加位有進(jìn)位,AC置1。A的結(jié)果還影響奇偶標(biāo)志位P。
例 A=30H, R0=10H
執(zhí)行 ADD A,R0 結(jié)果:A=40H, R0=10H,標(biāo)志位 P=1, Cy=0, OV=0, AC=0
2.ADDC類指令(帶進(jìn)位加法4條)
ADDC A, Rn ;A+Rn+Cy→A, A與R n內(nèi)容、進(jìn)位狀態(tài)相加,和送
到A中
ADDC A, direct ;(direct)+Cy+A→A, A與直接地址中內(nèi)容、進(jìn)位狀態(tài)
相加,和送A
ADDC A, @Ri ;(Ri)+Cy+A→A, A與Ri間址單元中內(nèi)容、進(jìn)位狀態(tài)
相加,和送A
ADDC A, #data ;data+Cy+A→A, A與 立即數(shù)、進(jìn)位狀態(tài)相加,和送A
與ADD類指令的區(qū)別是,ADDC指令相加時連同進(jìn)位標(biāo)志Cy內(nèi)容一起相加,主要用于多字節(jié)加法中的高位字節(jié)的相加,而最低位字節(jié)相加用ADD指令。進(jìn)位位Cy加到字節(jié)的最低位。
例 寫計算1234H+0FE7H的程序,將結(jié)果存入內(nèi)部RAM的41H和40H單元,40H存低8位,41H存高8位。
程序
MOV A, #34H ;被加數(shù)低8位數(shù)34H送A
ADD A, #0E7H ;加數(shù)低8位數(shù)E7H與之相加,A=1BH,Cy=1
MOV 40H, A ;A→40H即34H+E7H結(jié)果存入40H中(40H=1BH)
MOV A, #12H ;被加數(shù)高8位數(shù)12H送A
ADDC A, #0FH ;加數(shù)高8位0FH和Cy與A相加,A=22H
MOV 41H, A ;高8位與進(jìn)位位之和存入41H中(41H)=22H
;總和為221BH,總結(jié)果在41H,40H單元中
3.SUBB類指令(4條)
SUBB類指令是帶借位減法指令,其功能是將A中被減數(shù)減去源操作數(shù)指出的內(nèi)容,再減去借位標(biāo)志Cy(原進(jìn)位標(biāo)志)狀態(tài),差值在A中。
SUBB A, Rn ;A-Rn-Cy→A ,A減寄存器Rn內(nèi)容及進(jìn)位標(biāo)志
SUBB A, direct ;A-(direct)-Cy→A,A減直接地址內(nèi)容和進(jìn)位標(biāo)志
SUBB A, Ri ;A-(Ri)-Cy→A, A減Ri間址單元內(nèi)容和進(jìn)位位標(biāo)志
SUBB A, #data ;A-data-Cy→A, A減立即數(shù)和進(jìn)位標(biāo)志
說明:
1) 多字節(jié)減法時,低位相減有借位則把Cy置1,否則Cy為0。
2) MCS-51系列指令中沒有不帶借位的減法指令,所以在單字節(jié)或低位字節(jié)減法時用SUBB類指令前要先將Cy清0。
3)減去一個數(shù)實際上是加上這個數(shù)的相反數(shù)(負(fù)數(shù)),減法運算常常用補碼相加方式。
4.MUL(乘)和DIV(除)指令
乘法指令只有一條:
MUL AB ;A×B→B和A,結(jié)果16位,高8位存入B,低8位在A中
若乘積大于FFH則將溢出標(biāo)志OV置1。
除法指令也只有一條:
DIV AB ; A÷B商→A,余數(shù)→B
注意:當(dāng)除數(shù)為0時結(jié)果不確定,則溢出將OV置1。
5.INC(加1)和DEC(減1)類指令
加1類指令共5條,其功能是將操作數(shù)內(nèi)容加1。
INC A ;A+1→A, A加1
INC Rn ;Rn+1→Rn, Rn中內(nèi)容加1
INC direct ;(direct)+1→(direct), 直接地址中內(nèi)容加1
INC @Ri ;(Ri)+1→(Ri), Ri間址中的內(nèi)容加1
INC DPTR ;DPTR+1→DPTR, 數(shù)據(jù)指針加1
例 判斷INC R0和INC @R0兩條指令結(jié)果,比較兩者的區(qū)別。設(shè)R0=30H,(30H)=00H。
執(zhí)行 INC R0 ;R0+1=30H+1→R0, 結(jié)果R0=31H
執(zhí)行 INC @R0 ;(R0)+1=(30H)+1→(R0),結(jié)果(30H)=01H,R0中內(nèi)
容不變,仍為30H
減1類指令共4條,其功能是將操作數(shù)指定單元內(nèi)容減1。
DEC A ;A-1→A, A中內(nèi)容減1
DEC Rn ;Rn-1→Rn, Rn中內(nèi)容減1
DEC direct ;(direct)-1→(direct), 直接地址中內(nèi)容減1
DEC @Ri ;(Ri)-1→(Ri), Ri間址中的內(nèi)容減1
操作過程與加1指令類似,這里不再舉例。
6.十進(jìn)制加法調(diào)整指令(1條)
DA A
功能:在加法指令后,把A中二進(jìn)制碼自動調(diào)整成BCD碼。
例 MOV A, #05H ;05H→A
ADD A, #08H ;05H+08H→A=0DH
DA A ;結(jié)果調(diào)整A=13H,即是13的BCD碼
注意:DA A指令只能跟在ADD或ADDC加法指令后,不適用于減法。
編輯:admin 最后修改時間:2018-05-19