51单片机可以不用与运算,只接判断,用P(奇偶校验位),如果非得用与运算只能这样:
MOV A,#0FFH
ANL A,#DATA;某数)
JNB P,REL
//假设R3中存放待判数值,R4存放临时结果。如果寄存器不足,就用内存代替。
MOV R0,1
MOV R1,0 //1个数计数器
MOV R2,0 //循环次数,共循环8次
LABEL_LOOP:
CMP R2,8 //循环次数比较
BE LOOP_END //如果已经循环8次则跳转到LOOP_END
AND R4,R3,R0 //R3,R0按位与运算,结果存入R4
CMP R4,0 //依次取出相应的位与0比较
BE LOOP_NEXT //若相等则跳转到LOOP_NEXT,否则计数器加1再跳转
INC R1
B LOOP_NEXT
LOOP_NEXT:
INC R2
SHL R0 //R0左移一位,以便取出下一位
B LABEL_LOOP
LOOP_END:
AND R1,R1,1 //R1中存放了"1"的个数
CMP R1,1
...
//到这里结束了,R1如果等于1那么有奇数个“1”,否则偶数个“1”
由于共有8位数,最多0b1000个"1",只有R1最低位为1时才是奇数个“1”