考虑到汇编中位移加位判断篇幅过长,使用对半异或的方式,计算到最后一位,为0则为偶为1则为奇:
4位单片机,(备份原始数据)先进行高低位计算,再对内部折半:
;4位机
; MVMA R_RF_ADDR_1
; MVAM R_TEMP_A
; MVMA R_RF_ADDR_2
; MVAM R_TEMP_B
; MVMA R_RF_ADDR_3
; MVAM R_TEMP_C
; MVMA R_RF_ADDR_1
; XORA R_RF_ADDR_2
; MVAM R_RF_ADDR_2
; MVMA R_RF_ADDR_2
; XORA R_RF_ADDR_3
; MVAM R_RF_ADDR_3
; MVMA R_RF_ADDR_3
; XORA R_RF_DATA_2
; MVAM R_TEMP3 ;原数据备份 如10 00
; MVAM R_TEMP4
; RRM R_TEMP3 ;高移到低 变00 10
; RRM R_TEMP3
; MVMA R_TEMP3
; XORA R_TEMP4
; MVAM R_TEMP3 ;00^10=10
; MVAM R_TEMP4 ;备份0010
; RRM R_TEMP4 ;移位0001
; MVMA R_TEMP4
; XORA R_TEMP3
; MVAM R_TEMP4 ;***1
; MVMA R_XOR
; MVAM R_TEMP3
; RRM R_TEMP3 ;移位0100
; RRM R_TEMP3 ;移位0010
; RRM R_TEMP3 ;移位0001
; MVMA R_TEMP4
; XORA R_TEMP3
; MVAM R_TEMP4
; MVMA R_TEMP4 ;***1
; ANDL 0X01
; MVAM R_TEMP4
; MVMA R_TEMP4
; XORL 1
; SZNZ
; JMP CSM_JI
; MVLA 0
; MVAM R_CSM
; JMP CSM_COM
; CSM_JI:
; MVLA 8
; MVAM R_CSM
; CSM_COM:
; MVMA R_TEMP_A
; MVAM R_RF_ADDR_1
; MVMA R_TEMP_B
; MVAM R_RF_ADDR_2
; MVMA R_TEMP_C
; MVAM R_RF_ADDR_3
8位单片机,将前面数据相加,再异或:
;8位机: R_ADDR_H R_ADDR_M R_KEY_DATA R_CSM R_PARITY:计算表像,不管舍弃的
MOV A,R_ADDR_H
MOV R_DDL2,A
MOV A,R_DDL2
XRL A,R_ADDR_M
MOV R_DDL2,A
MOV A,R_DDL2
XRL A,R_KEY_DATA
MOV R_DDL2,A
MOV A,R_DDL2
XRL A,R_CSM ;R_PARITY_TEMP and data
MOV R_DDL2,A
MOV R_DDL3,A
RRC R_DDL2
RRC R_DDL2
RRC R_DDL2
RRC R_DDL2
MOV A,R_DDL2
XRL A,R_DDL3
MOV R_DDL2,A
MOV R_DDL3,A
RRC R_DDL2
RRC R_DDL2
MOV A,R_DDL2
XRL A,R_DDL3
MOV R_DDL2,A
MOV R_DDL3,A
RRC R_DDL2
MOV A,R_DDL2
XRL A,R_DDL3
MOV R_DDL2,A
SBR0 R_DDL2
SJMP SET_0X20
MOV A,#$A0 ;偶数
MOV R_PARITY,A
RET
SET_0X20:
MOV A,#$20 ;奇数
MOV R_PARITY,A
RET