📜  8085程序查找一次出现的元素

📅  最后修改于: 2021-06-28 15:57:24             🧑  作者: Mango

前提条件–找到在数组中一次出现的元素,其中每个其他元素出现两次
问题–给定11个数字,编写汇编语言程序以查找一次出现的元素,其中5个数字出现两次,而一个元素出现一次。

例子:

Input : [01H, 02H, 09H, 01H, 01H, 02H, 0AH, 01H, 09H, 03H, 03H]
Output : 0AH
Every number appears even number of times, except 0AH which appears only once.

算法:
使用XOR。
所有元素的XOR将给出一次出现的数字。这是因为数字与自身的XOR为0,数字与0的XOR为数字本身。

^ => XOR

res = 01H ^ 02H ^ 09H ^ 01H ^ 01H ^ 02H ^ 0AH ^ 01H ^ 09H ^ 03H ^ 03H

Since XOR is associative and commutative :
res = 0AH ^ (01H ^ 01H) ^ (01H ^ 01H) ^ (02H ^ 02H) ^ (03H ^ 03H) ^ (09H ^ 09H) 
    = 0AH ^ 0 ^ 0 ^ 0 ^ 0 ^ 0
    = 0AH ^ 0
    = 0AH

脚步:

  1. 将第一个数字的地址加载到HL寄存器对中
  2. 用0BH初始化寄存器C,因为我们必须遍历11个元素。它充当柜台
  3. 用0初始化累加器
  4. 用累加器对HL寄存器中存储的地址上存在的值进行XOR,然后递增HL寄存器中的地址
  5. 对其余10个元素重复步骤4
  6. 将累加器的值存储在201DH中(任意)

201DH包含答案。

ADDRESS LABEL MNEMONIC
2000H LXI H, 2012H
2001H
2002H
2003H MVI A, 00H
2004H
2005H MVI C, 0BH
2006H
2007H LOOP MOV B, M
2008H XRA B
2009H INX H
200AH DCR C
200BH JNZ LOOP
200CH
200DH
200EH STA 201DH
200FH
2010H
2011H HLT