8085程序如何查找一次出现的元素?

2021年3月22日15:04:21 发表评论 651 次浏览

先决条件–

查找在数组中一次出现的元素, 其中每个其他元素出现两次

问题–

给定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, 数字本身与XOR为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包含答案。

地址 标签 助记
2000H LXI H, 2012H
2001H
2002H
2003H MVI A, 00H
2004H
2005H MVI C, 0BH
2006H
2007H 循环 MOV B, M
2008H XRA B
2009H INX H
200AH DCR C
200BH JNZ LOOP
200CH
200DH
200EH STA 201DH
200FH
2010H
2011H HLT

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: