Requisito previo: encuentre el elemento que aparece una vez en una array donde todos los demás elementos aparecen dos veces
Problema: dados 11 números, escriba un programa en lenguaje ensamblador para encontrar el elemento que aparece una vez donde 5 números aparecen dos veces y un elemento aparece una vez.
Ejemplos:
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.
Algoritmo:
Usa XOR.
XOR de todos los elementos dará el número que aparece una vez. Esto se debe a que el XOR de un número consigo mismo es 0 y el XOR de un número con 0 es el mismo número.
^ => 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
Pasos:
- Cargue la dirección del primer número en el par de registros HL
- Inicialice el registro C con 0BH porque tenemos que recorrer 11 elementos. Actúa como un contador
- Inicializar el acumulador con 0
- Tome XOR del valor presente en la dirección almacenada en el registro HL con el acumulador e incremente la dirección en el registro HL
- Repita el paso 4 para el resto de los 10 elementos.
- Almacene el valor del acumulador en 201DH (arbitrario)
201DH contiene la respuesta.
DIRECCIÓN | ETIQUETA | MNEMOTÉCNICO |
---|---|---|
2000H | LXIH, 2012H | |
2001H | ||
2002H | ||
2003H | MVI A, 00H | |
2004H | ||
2005H | MVI C, 0BH | |
2006H | ||
2007H | CÍRCULO | MOV B, M |
2008H | XRA B | |
2009H | INXH | |
200AH | DCR C | |
200BH | BUCLE JNZ | |
200CH | ||
200DH | ||
200EH | STA 201DH | |
200FH | ||
2010H | ||
2011H | HLT |
Publicación traducida automáticamente
Artículo escrito por aganjali10 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA