13、單片機邏輯與或異或指令詳解
ANL A,Rn ;A與Rn中的值按位‘與’,結果送入A中
ANL A,direct ;A與direct中的值按位‘與’,結果送入A中
ANL A,@Ri ;A與間址尋址單元@Ri中的值按位‘與’,結果送入A中
ANL A,#data ;A與立即數data按位‘與’,結果送入A中
ANL direct,A ;direct中值與A中的值按位‘與’,結果送入direct中
ANL direct,#data ;direct中的值與立即數data按位‘與’,結果送入direct中。
這幾條指令的關鍵是知道什么是邏輯與。這里的邏輯與是指按位與
例:71H和56H相與則將兩數寫成二進制形式:
(71H) 01110001
?。?6H) 00100110
結果 00100000 即20H,從上面的式子能看出,兩個參與運算的值只要其中有一個位上是0,則這位的結果就是0,兩個同是1,結果才是1。
理解了邏輯與的運算規則,結果自然就出來了。看每條指令后面的注釋
下面再舉一些例程來看。
MOV A,#45H ;(A)=45H
MOV R1,#25H ;(R1)=25H
MOV 25H,#79H ;(25H)=79H
ANL A,@R1 ;45H與79H按位與,結果送入A中為 41H (A)=41H
ANL 25H,#15H ;25H中的值(79H)與15H相與結果為(25H)=11H)
ANL 25H,A ;25H中的值(11H)與A中的值(41H)相與,結果為(25H)=11H
在知道了邏輯與指令的功能后,邏輯或和邏輯異或的功能就很簡單了。邏輯或是按位“或”,即有“1”為1,全“0”為0。例:
10011000
或 01100001
結果 11111001
而異或則是按位“異或”,相同為“0”,相異為“1”。例:
10011000
異或 01100001
結果 11111001
而所有的或指令,就是將與指仿中的ANL 換成ORL,而異或指令則是將ANL 換成XRL。即
或指令:
ORL A,Rn ;A和Rn中的值按位‘或’,結果送入A中
ORL A,direct ;A和與間址尋址單元@Ri中的值按位‘或’,結果送入A中
ORL A,#data ;A和立direct中的值按位‘或’,結果送入A中
ORL A,@Ri ;A和即數data按位‘或’,結果送入A中
ORL direct,A ;direct中值和A中的值按位‘或’,結果送入direct中
ORL direct,#data ;direct中的值和立即數data按位‘或’,結果送入direct中。
異或指令:
XRL A,Rn ;A和Rn中的值按位‘異或’,結果送入A中
XRL A,direct ;A和direct中的值按位‘異或’,結果送入A中
XRL A,@Ri ;A和間址尋址單元@Ri中的值按位‘異或’,結果送入A中
XRL A,#data ;A和立即數data按位‘異或’,結果送入A中
XRL direct,A ;direct中值和A中的值按位‘異或’,結果送入direct中
XRL direct,#data ;direct中的值和立即數data按位‘異或’,結果送入direct中。
練習:
MOV A,#24H
MOV R0,#37H
ORL A,R0
XRL A,#29H
MOV 35H,#10H
ORL 35H,#29H
MOV R0,#35H
ANL A,@R0
評論