日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費(fèi)注冊]

當(dāng)前位置:電子發(fā)燒友網(wǎng) > 圖書頻道 > 電子 > 《單片機(jī)原理與應(yīng)用》 > 第3章 MCS-51單片機(jī)指令系統(tǒng)

第5節(jié) 單片機(jī)做加、減、乘、除運(yùn)算

  3.2.1 硬件電路

  硬件電路采用實(shí)驗(yàn)開發(fā)板上的電路,如圖3.4所示。

  

 

  圖3.4 單片機(jī)做加、減、乘、除運(yùn)算的電路圖

  工作原理

  利用P0口、P2口外接的撥動(dòng)開關(guān)設(shè)制運(yùn)算的數(shù)據(jù),利用單片機(jī)的算術(shù)運(yùn)算指令進(jìn)行加、減、乘、除運(yùn)算,并將結(jié)果送P1口發(fā)光二極管顯示。

  3.2.2 程序設(shè)計(jì)

  1. 加法運(yùn)算程序

  ORG 0000H

  MOV A,P0

  MOV R0,P2

  ADD A,R0

  MOV P1,A

  SJMP $

  END

  2. 減法運(yùn)算程序

  ORG 0000H

  MOV A,P0

  MOV R0,P2

  SUBB A,R0

  MOV P1,A

  SJMP $

  END

  3. 乘法運(yùn)算程序

  ORG 0000H

  MOV A,P0

  MOV B,P2

  MUL AB

  MOV P1,A

  SJMP $

  END

  4. 除法運(yùn)算程序

  ORG 0000H

  MOV A,P0

  MOV B,P2

  DIV AB

  MOV P1,A

  SJMP $

  END

  3.2.3 源程序的編輯、編譯、下載

  打開“偉福”模擬仿真軟件進(jìn)行程序的編輯、編譯。

  打開“ISP下載軟件”將目標(biāo)文件下載到ISP-4實(shí)驗(yàn)開發(fā)板上的AT89S51單片機(jī)芯片,觀察程序運(yùn)行結(jié)果。

  3.2.4 相關(guān)知識(shí)

  前面的任務(wù)里,在加、減、乘、除的過程中,只要改變P0、P2口數(shù)據(jù)發(fā)光二極管的亮滅就發(fā)生變化,下面我們來分析任務(wù)實(shí)現(xiàn)的過程。

  1. 單片機(jī)是怎樣做加、減、乘、除運(yùn)算的?

  在單片機(jī)CPU內(nèi)部集成的算術(shù)運(yùn)算部件(主要有加法器和乘法器、除法器),可以完成加、減、乘、除運(yùn)算,單片機(jī)的算術(shù)運(yùn)算指令經(jīng)過指令譯碼器譯碼后產(chǎn)生的控制信號(hào)控制算術(shù)運(yùn)算部件工作產(chǎn)生運(yùn)算結(jié)果。

  2. MCS-51單片機(jī)有哪些算術(shù)運(yùn)算指令?

  MCS-51單片機(jī)算術(shù)運(yùn)算指令共有24條,算術(shù)運(yùn)算主要是執(zhí)行加、減、乘、除法四則運(yùn)算。另外MCS-51指令系統(tǒng)中有相當(dāng)一部分是進(jìn)行加、減1操作,BCD碼的運(yùn)算和調(diào)整,我們都?xì)w類為運(yùn)算指令。雖然MCS-51單片機(jī)的算術(shù)邏輯單元ALU僅能對8位無符號(hào)整數(shù)進(jìn)行運(yùn)算,但利用進(jìn)位標(biāo)志C,則可進(jìn)行多字節(jié)無符號(hào)整數(shù)的運(yùn)算。同時(shí)利用溢出標(biāo)志,還可以對帶符號(hào)數(shù)進(jìn)行補(bǔ)碼運(yùn)算。需要指出的是,除加、減1指令外,這類指令大多數(shù)都會(huì)對PSW(程序狀態(tài)字)有影響。這在使用中應(yīng)特別注意。

  (1) 不帶進(jìn)位的加法指令(4條)

  這4條指令的作用是把立即數(shù),直接地址、工作寄存器及間接地址內(nèi)容與累加器A的內(nèi)容相加,運(yùn)算結(jié)果存在A中。

  ADD A,#data ;(A)+#data→(A) 累加器A中的內(nèi)容與立即數(shù)#data相加,結(jié)果存在A中

  ADD A,data ;(A)+(data)→(A) 累加器A中的內(nèi)容與直接地址單元中的內(nèi)容相加,結(jié)果存在A中

  ADD A,Rn ;(A)+(Rn)→(A) 累加器A中的內(nèi)容與工作寄存器Rn中的內(nèi)容相加,結(jié)果存在A中

  ADD A,@Ri ;(A)+((Ri))→(A) 累加器A中的內(nèi)容與工作寄存器Ri所指向地址單元中的內(nèi)容相加,結(jié)果存在A中

  如任務(wù)中“加法程序”里 MOV A,P0

  MOV R0,P2

  ADD A,R0

  就是將P0口與P2口的內(nèi)容相加。

  (2) 帶進(jìn)位的加法指令(4條)

  這4條指令除與[1]功能相同外,在進(jìn)行加法運(yùn)算時(shí)還需考慮進(jìn)位問題。

  ADDC A,data ;(A)+(data)+(C)→(A) 累加器A中的內(nèi)容與直接地址單元的內(nèi)容連同進(jìn)位位相加,結(jié)果存在A中

  ADDC A,#data ;(A)+#data +(C)→(A) 累加器A中的內(nèi)容與立即數(shù)連同進(jìn)位位相加,結(jié)果存在A中

  ADDC A,Rn ;(A)+Rn+(C)→(A) 累加器A中的內(nèi)容與工作寄存器Rn中的內(nèi)容、連同進(jìn)位位相加,結(jié)果存在A中

  ADDC A,@Ri ;(A)+((Ri))+(C)→(A) 累加器A中的內(nèi)容與工作寄存器Ri指向地址單元中的內(nèi)容、連同進(jìn)位位相加,結(jié)果存在A中

  (3) 帶借位減法指令(4條)

  這組指令包含立即數(shù)、直接地址、間接地址及工作寄存器與累加器A連同借位位C內(nèi)容相減,結(jié)果送回累加器A中。

  這里我們對借位位C的狀態(tài)作出說明,在進(jìn)行減法運(yùn)算中,CY=1表示有借位,CY=0則無借位。OV=1聲明帶符號(hào)數(shù)相減時(shí),從一個(gè)正數(shù)減去一個(gè)負(fù)數(shù)結(jié)果為負(fù)數(shù),或者從一個(gè)負(fù)數(shù)中減去一個(gè)正數(shù)結(jié)果為正數(shù)的錯(cuò)誤情況。在進(jìn)行減法運(yùn)算前,如果不知道借位標(biāo)志位C的狀態(tài),則應(yīng)先對CY進(jìn)行清零操作。

  SUBB A,data ;(A)-(data)- (C)→(A) 累加器A中的內(nèi)容與直接地址單元中的內(nèi)容、連同借位位相減,結(jié)果存在A中。

  SUBB A,#data ;(A)-#data -(C)→(A) 累加器A中的內(nèi)容與立即數(shù)、連同借位位相減,結(jié)果存在A中。

  SUBB A,Rn ;(A)-(Rn)-(C)→(A) 累加器A中的內(nèi)容與工作寄存器中的內(nèi)容、連同借位位相減,結(jié)果存在A中

  SUBB A,@Ri ;(A)-((Ri))-(C)→(A) 累加器A中的內(nèi)容與工作寄存器Ri指向的地址單元中的內(nèi)容、連同借位位相減,結(jié)果存在A中。

  如任務(wù)中“減法程序”里 MOV A,P0

  MOV R0,P2

  SUBB A,R0

  就是將P0口與P2口的內(nèi)容相減。

  (4) 乘法指令(1條)

  這個(gè)指令的作用是把累加器A和寄存器B中的8位無符號(hào)數(shù)相乘,所得到的是16位乘積,這個(gè)結(jié)果低8位存在累加器A,而高8位存在寄存器B中。如果OV=1,說明乘積大于FFH,否則OV=0,但進(jìn)位標(biāo)志位CY總是等于0。

  MUL AB ;(A)×(B)→(A)和(B) 累加器A中的內(nèi)容與寄存器B中的內(nèi)容相乘,結(jié)果存在A、B中。

  如任務(wù)中“加法程序”里 MOV A,P0

  MOV B,P2

  MUL AB

  就是將P0口與P2口的內(nèi)容相乘,低字節(jié)存于A,高字節(jié)存于B。

  (5) 除法指令(1條)

  這個(gè)指令的作用是把累加器A的8位無符號(hào)整數(shù)除以寄存器B中的8位無符號(hào)整數(shù),所得到的商存在累加器A,而余數(shù)存在寄存器B中。除法運(yùn)算總是使OV和進(jìn)位標(biāo)志位CY等于0。如果OV=1,表明寄存器B中的內(nèi)容為00H,那么執(zhí)行結(jié)果為不確定值,表示除法有溢出。

  DIV AB ;(A)÷(B)→(A)和(B) 累加器A中的內(nèi)容除以寄存器B中的內(nèi)容,所得到的商存在累加器A,而余數(shù)存在寄存器B中。

  如任務(wù)中“加法程序”里 MOV A,P0

  MOV B,P2

  DIV AB

  就是將P0口與P2口的內(nèi)容相除,商存于A,余數(shù)存于B。

  (6) 加1指令(5條)

  這5條指令的的功能均為原寄存器的內(nèi)容加1,結(jié)果送回原寄存器。上述提到,加1指令不會(huì)對任何標(biāo)志有影響,如果原寄存器的內(nèi)容為FFH,執(zhí)行加1后,結(jié)果就會(huì)是00H。這組指令共有直接、寄存器、寄存器減間址等尋址方式:

  INC A ;(A)+1→(A) 累加器A中的內(nèi)容加1,結(jié)果存在A中。

  INC data ;(data)+1→(data) 直接地址單元中的內(nèi)容加1,結(jié)果送回原地址單元中。

  INC @Ri ;((Ri))+1→((Ri)) 寄存器的內(nèi)容指向的地址單元中的內(nèi)容加1,結(jié)果送回原地址單元中

  INC Rn ;(Rn)+1→(Rn)寄存器Rn的內(nèi)容加1,結(jié)果送回原地址單元中

  INC DPTR ;(DPTR)+1→(DPTR)數(shù)據(jù)指針的內(nèi)容加1,結(jié)果送回?cái)?shù)據(jù)指針中

  在INC data這條指令中,如果直接地址是I/O,其功能是先讀入I/O鎖存器的內(nèi)容,然后在CPU進(jìn)行加1操作,再輸出到I/O上,這就是“讀—修改—寫”操作。

  (7) 減1指令(4條)

  這組指令的作用是把所指的寄存器內(nèi)容減1,結(jié)果送回原寄存器,若原寄存器的內(nèi)容為00H,減1后即為FFH,運(yùn)算結(jié)果不影響任何標(biāo)志位,這組指令共有直接、寄存器、寄存器間址等尋址方式,當(dāng)直接地址是I/O口鎖存器時(shí),“讀—修改—寫”操作與加1指令類似。

  DEC A ;(A)-1→(A)累加器A中的內(nèi)容減1,結(jié)果送回累加器A中

  DEC data ;(data)-1→(data)直接地址單元中的內(nèi)容減1,結(jié)果送回直接地址單元中

  DEC @Ri ;((Ri))-1→((Ri))寄存器Ri指向的地址單元中的內(nèi)容減1,結(jié)果送回原地址單元中

  DEC Rn ;(Rn)-1→(Rn)寄存器Rn中的內(nèi)容減1,結(jié)果送回寄存器Rn中。

  (8) 十進(jìn)制調(diào)整指令(1條)

  在進(jìn)行BCD碼運(yùn)算時(shí),這條指令總是跟在ADD或ADDC指令之后,其功能是將執(zhí)行加法運(yùn)算后存于累加器A中的結(jié)果進(jìn)行調(diào)整和修正。

  DA A

  3. 算術(shù)運(yùn)算指令應(yīng)用舉例

  【例3.4】 雙字節(jié)無符號(hào)數(shù)加法(R0R1)+(R2R3)→(R4R5)

  R0、R2、R4中存放16位數(shù)的高字節(jié),R1、R3、R5中存放低字節(jié)。由于不存在16位數(shù)加法指令,所以只能先加低8位,而在加高8位時(shí)要連低8沉位相加時(shí)產(chǎn)生的進(jìn)位一起相加。假設(shè)其和不超過16位,其編程如下:

  MOV A,R1 ;取被加數(shù)低字節(jié)

  ADD A,R3 ;低字節(jié)相加

  MOV R5,A ;保存和低字節(jié)

  MOV A,R0 ;取高字節(jié)被加數(shù)

  ADDC A,R2 ;兩高字節(jié)之和加低位進(jìn)位

  MOV R4,A ;保存和高字節(jié)

  【例3.5】 雙字節(jié)無符號(hào)數(shù)相減(R0R1)-(R2R3)→(R4R5)

  R0、R2、R4存放16位數(shù)的高字節(jié),R1、R3、R5存放低字節(jié)。先減低8位,后減高8位和低位減借位,所以要先清零。其編程如下:

  MOV A,R1 ;取被減數(shù)低字節(jié)

  CLR C ;清借位位

  SUBB A,R3 ;低字節(jié)相減

  MOV R5,A ;保存差低字節(jié)

  MOV A,R0 ;取被減法高字節(jié)

  SUBB A,R2 ;兩高字節(jié)之差減低位借位

  MOV R4,A ;保存差高字節(jié)

  【例3.6】 利用除法指令把累加器A中的8位二進(jìn)制轉(zhuǎn)換為3位BCD數(shù),并以壓縮形式存放在地址M1、M2單元中。

  解:累加器A中的8位二進(jìn)制數(shù),先對其除以100(64H),商數(shù)即為十進(jìn)制的百位數(shù);余數(shù)部分再除以10(0AH),所得商數(shù)和余數(shù)分別為十進(jìn)制和個(gè)位數(shù),即得到3位BCD數(shù)的存放 是通過SWAP和ADD指令實(shí)現(xiàn)的。參考程序如下:

  MOV B,#64H ;除數(shù)100送B

  DIV AB ;得8位數(shù)

  MOV M1, A ;百位數(shù)存于M1中

  MOV A #0AH ;取除數(shù)10

  XCH A,B ;上述余數(shù)與除數(shù)交換

  XCH AB ;得十位數(shù)和個(gè)位數(shù)

  SWAP A ;十位數(shù)存于A的高4位

  ADD A,B ;組成壓縮BCD數(shù)

  MOV M2,A ;十?個(gè)位壓縮BCD數(shù)存M2

  若上述程序執(zhí)行前:(A)=A8H(168),則執(zhí)行后:(M1)=(01)BCD,(M2)(68)BCD 。

  【例3.7】 對BCD碼加法65+58 =123(BDH)進(jìn)行十進(jìn)制調(diào)整。

  解:高R5(高)、R4(低)為被加數(shù);高R3(高)、R2(低)為加數(shù);相加和的結(jié)果存和:高R6(萬)、R5(千、百)、R4(十、個(gè))。

  參考程序如下:

  MOV A,R4 ;被加數(shù)十位?個(gè)位送入A

  ADD A,R2 ;十位?個(gè)位相加

  DA A ;和的十位?個(gè)位調(diào)整

  MOV R4,A ;和的十位?個(gè)位存入R4

  MOV A,R5 ;被加數(shù)千位?百位送入A

  ADDC A,R3 ;千位?百位的和加低位進(jìn)位

  DA A ;和的千位?百位調(diào)整

  MOV R5,A ;和的千位?百位存入R5

  MOV A,#00H ; A清零

  ADDC A,#00H ;求和的萬位值

  MOV R6,A ;和的萬位存入R6

  若程序執(zhí)行前:(R5)=(98H)BCD,(R4)=(76H)BCD,(R3)=(54H)BCD,(R2)=(32H)BCD,則執(zhí)行后:(R6)=(01H)BCD,(R5)=(53H)BCD,(R4)=(08H)BCD。

  【例3.8】 雙字節(jié)數(shù)求補(bǔ)碼。

  解:對于一個(gè)16位數(shù),R3存高8位,R2存低8位,求補(bǔ)結(jié)果仍存R3、R2。求補(bǔ)的參考程序如下:

  MOV A,R2 ;低8位數(shù)送A

  CPL A, ;低8位數(shù)取反

  ADD A,#01H ;加1得低8位數(shù)補(bǔ)碼

  MOV R2 ,A ;存補(bǔ)碼低8位

  MOV A,R3 ;高8位數(shù)送A

  CPL A, ;高8位數(shù)取反

  ADDC A,#00H ;加低8位進(jìn)位

  MOV R3 ,A ;存補(bǔ)碼高8位

  3.3 任務(wù)四 單片機(jī)作邏輯運(yùn)算

  〖學(xué)習(xí)目標(biāo)〗: 通過學(xué)習(xí)任務(wù)四的完成方法,掌握MCS-51單片機(jī)的邏輯運(yùn)算指令的功能。

  〖任務(wù)描述〗: 利用單片機(jī)的邏輯運(yùn)算指令進(jìn)行邏輯與、或、異或等邏輯運(yùn)算,并將結(jié)果送P1口發(fā)光二極管顯示。

  3.3.1 硬件電路

  硬件電路仍采用實(shí)驗(yàn)開發(fā)板上的電路,如圖3.4所示。

  工作原理

  通過P0口、P2口外接的撥動(dòng)開關(guān)設(shè)制運(yùn)算的數(shù)據(jù),利用單片機(jī)的邏輯運(yùn)算指令運(yùn)算,并將結(jié)果送P1口發(fā)光二極管顯示。

  3.3.2 程序設(shè)計(jì)

  1. 邏輯“與”運(yùn)算程序

  ORG 0000H

  MOV A,P0

  ANL A,P2

  MOV P1,A

  SJMP $

  END

  2. 邏輯“或”運(yùn)算程序

  ORG 0000H

  MOV A,P0

  ORL A,P2

  MOV P1,A

  SJMP $

  END

  3. 邏輯“異或”運(yùn)算程序

  ORG 0000H

  MOV A,P0

  XRL A,P2

  MOV P1,A

  SJMP $

  END

  3.3.3 源程序的編輯、編譯、下載

  打開“偉福”模擬仿真軟件進(jìn)行程序的編輯、編譯。

  打開“ISP下載軟件”將目標(biāo)文件下載到ISP-4實(shí)驗(yàn)開發(fā)板上的AT89S51單片機(jī)芯片,觀察程序運(yùn)行結(jié)果。

  3.3.4 相關(guān)知識(shí)

  在上面的任務(wù)中,我們可以看到隨著P0、P2口的變化,發(fā)光二極管的輸出和相關(guān)邏輯運(yùn)算的結(jié)果一致,那么,到底單片機(jī)是怎樣實(shí)現(xiàn)這種變化的呢?

  1. 單片機(jī)是怎樣做邏輯運(yùn)算的?

  單片機(jī)CPU內(nèi)部集成的邏輯運(yùn)算部件(主要有與運(yùn)算器、或運(yùn)算器、異或運(yùn)算器等),可以完成與、或、異或運(yùn)算等,單片機(jī)的邏輯運(yùn)算指令經(jīng)過指令譯碼器譯碼后產(chǎn)生的控制信號(hào)控制邏輯運(yùn)算部件工作產(chǎn)生運(yùn)算結(jié)果。

  2. MCS-51單片機(jī)有哪些邏輯運(yùn)算指令?

  邏輯運(yùn)算和移位指令共有25條,有與、或、異或、求反、左右移位、清0等邏輯操作,有直接、寄存器和寄存器間址等尋址方式。這類指令一般不影響程序狀態(tài)字(PSW)標(biāo)志。

  (1) 循環(huán)移位指令(4條)

  這4條指令的作用是將累加器中的內(nèi)容循環(huán)左或右移一位,后兩條指令是連同進(jìn)位位CY一起移位。

  RL A ;累加器A中的內(nèi)容左移一位。

  RR A ;累加器A中的內(nèi)容右移一位。

  RLC A ;累加器A中的內(nèi)容連同進(jìn)位位CY左移一位。

  RRC A ;累加器A中的內(nèi)容連同進(jìn)位位CY右移一位。

  (2) 累加器半字節(jié)交換指令(1條)

  這條指令是將累加器中的內(nèi)容高低半字節(jié)互換,這在上一節(jié)中內(nèi)容已有介紹。

  SWAP A ; 累加器中的內(nèi)容高低半字節(jié)互換

  (3) 求反指令(1條)

  這條指令將累加器中的內(nèi)容按位取反。

  CPL A ; 累加器中的內(nèi)容按位取反

  (4) 清零指令(1條)

  這條指令將累加器中的內(nèi)容清0。

  CLR A ; 0→(A),累加器中的內(nèi)容清0

  (5) 邏輯與操作指令(6條)

  這組指令的作用是將兩個(gè)單元中的內(nèi)容執(zhí)行邏輯與操作。如果直接地址是I/O地址,則為“讀—修改—寫”操作。

  ANL A,data ;累加器A中的內(nèi)容和直接地址單元中的內(nèi)容執(zhí)行與邏輯操作。結(jié)果存在寄存器A中。

  ANL data,#data ;直接地址單元中的內(nèi)容和立即數(shù)執(zhí)行與邏輯操作。結(jié)果存在直接地址單元中。

  ANL A,#data ;累加器A的內(nèi)容和立即數(shù)執(zhí)行與邏輯操作。結(jié)果存在累加器A中。

  ANL A,Rn ;累加器A的內(nèi)容和寄存器Rn中的內(nèi)容執(zhí)行與邏輯操作。結(jié)果存在累加器A中。

  ANL data,A ;直接地址單元中的內(nèi)容和累加器A的內(nèi)容執(zhí)行與邏輯操作。結(jié)果存在直接地址單元中。

  ANL A,@Ri ;累加器A的內(nèi)容和工作寄存器Ri指向的地址單元中的內(nèi)容執(zhí)行與邏輯操作。結(jié)果存在累加器A中。

  如任務(wù)中的ANL A,P2 指令。

  (6) 邏輯或操作指令(6條)

  這組指令的作用是將兩個(gè)單元中的內(nèi)容執(zhí)行邏輯或操作。如果直接地址是I/O地址,則為“讀—修改—寫”操作。

  ORL A,data ;累加器A中的內(nèi)容和直接地址單元中的內(nèi)容執(zhí)行邏輯或操作。結(jié)果存在寄存器A中。

  ORL data,#data ;直接地址單元中的內(nèi)容和立即數(shù)執(zhí)行邏輯或操作。結(jié)果存在直接地址單元中。

  ORL A,#data ;累加器A的內(nèi)容和立即數(shù)執(zhí)行邏輯或操作。結(jié)果存在累加器A中。

  ORL A,Rn ;累加器A的內(nèi)容和寄存器Rn中的內(nèi)容執(zhí)行邏輯或操作。結(jié)果存在累加器A中。

  ORL data,A ;直接地址單元中的內(nèi)容和累加器A的內(nèi)容執(zhí)行邏輯或操作。結(jié)果存在直接地址單元中。

  ORL A,@Ri ;累加器A的內(nèi)容和工作寄存器Ri指向的地址單元中的內(nèi)容執(zhí)行邏輯或操作。結(jié)果存在累加器A中。

  如任務(wù)中的 ORL A,P2 指令。

  (7) 邏輯異或操作指令(6條)

  這組指令的作用是將兩個(gè)單元中的內(nèi)容執(zhí)行邏輯異或操作。如果直接地址是I/O地址,則為“讀—修改—寫”操作。

  XRL A,data ;累加器A中的內(nèi)容和直接地址單元中的內(nèi)容執(zhí)行邏輯異或操作。結(jié)果存在寄存器A中。

  XRL data,#data ;直接地址單元中的內(nèi)容和立即數(shù)執(zhí)行邏輯異或操作。結(jié)果存在直接地址單元中。

  XRL A,#data ;累加器A的內(nèi)容和立即數(shù)執(zhí)行邏輯異或操作。結(jié)果存在累加器A中。

  XRL A,Rn ;累加器A的內(nèi)容和寄存器Rn中的內(nèi)容執(zhí)行邏輯異或操作。結(jié)果存在累加器A中。

  XRL data,A ;直接地址單元中的內(nèi)容和累加器A的內(nèi)容執(zhí)行邏輯異或操作。結(jié)果存在直接地址單元中。

  XRL A,@Ri ;累加器A的內(nèi)容和工作寄存器Ri指向的地址單元中的內(nèi)容執(zhí)行邏輯異或操作。結(jié)果存在累加器A中。

  如任務(wù)中的 XRL A,P2 指令。

  3. 邏輯運(yùn)算指令應(yīng)用舉例

  【例3.9】 16位數(shù)的算術(shù)左移。16位數(shù)在內(nèi)存中低8位存放在M1單元,高8位存放在M1+1單元。

  解:所謂算術(shù)左移就是將操作數(shù)左移一位,并使最低位補(bǔ)充0,相當(dāng)于完成16位數(shù)的乘務(wù)員操作,故稱算術(shù)左移。參考程序如下:

  CLR C ;進(jìn)位CY清零

  MOV R1,#M1 ;操作數(shù)地址M1送R1

  MOV A,@ R1 ;低8位數(shù)送A

  RLC A, ;低8位左移,最低位補(bǔ)0

  MOV @ R1 ,A ;低8位左移后,回送M1存放

  INC R1 ;指向16位高8位地址M1+1

  MOV A,@ R1 ;低8位送A

  RLC A, ;高8位帶低8位進(jìn)位左移

  MOV @ R1 ,A ;高8位左移后回送M1+1存放

  若要對16位數(shù)進(jìn)行循環(huán)移位,則應(yīng)首先設(shè)法把最高位(D15)的值置入CY,然后再參照以上程序編寫即可。利用以后介紹的位操作指令可以很容易地實(shí)現(xiàn)將某一位的值置入CY。

?
剑阁县| 昭苏县| 涪陵区| 长沙县| 高要市| 肃宁县| 南靖县| 晴隆县| 深水埗区| 平昌县| 塔河县| 丹巴县| 乌恰县| 牙克石市| 荥阳市| 房山区| 鹤峰县| 珲春市| 田林县| 个旧市| 吉林市| 资兴市| 望谟县| 长治市| 周至县| 梅州市| 深圳市| 琼中| 嘉定区| 盐津县| 襄樊市| 石门县| 龙江县| 江北区| 军事| 阿鲁科尔沁旗| 交城县| 新巴尔虎右旗| 普定县| 霞浦县| 景宁|