shuszhao 发表于 2018-1-26 12:52

单片机逻辑与或异或指令详解(1)

逻辑与指令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(56H) 00100110结果 00100000 即20H,从上面的式子可以看出,两个参与运算的值只要其中有一个位上是0,则这位的结果就是0,两个同是1,结果才是1。理解了逻辑与的运算规则,结果自然就出来了。看每条指令后面的注释下面再举一些例子来看。MOV   A,#45H;(A)=45HMOV   R1,#25H;(R1)=25HMOV   25H,#79H;(25H)=79HANL   A,@R1;45H与79H按位与,结果送入A中为 41H (A)=41HANL   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,#24HMOV   R0,#37HORL         A,R0XRL         A,#29HMOV   35H,#10HORL         35H,#29HMOV   R0,#35HANL   A,@R0

kbh2006@163.com 发表于 2018-1-26 13:07

cvbbvcmv 发表于 2018-1-26 13:39

bidinghong 发表于 2018-2-20 08:58

谢谢分享

mj8abcd 发表于 2018-3-10 20:50

学海无涯 发表于 2020-11-16 08:11

这个学习一下,谢谢分享!!

h09721 发表于 2021-3-21 07:56

sen1 发表于 2023-2-21 08:49

runmuel 发表于 2026-4-23 08:24

汇编,估计没什么人愿意学了,能学下去的都不是一般人。

robter 发表于 2026-4-27 07:56

:):handshake:victory:
页: [1] 2
查看完整版本: 单片机逻辑与或异或指令详解(1)