Ya no tienes que investigar más en otras páginas porque estás al lugar exacto, contamos con la solución que quieres encontrar sin liarte.
Solución:
por qué en el pseudocódigo de AAA, AAS tenemos que sumar, restar 6 del nibble de orden inferior en AL
Porque en hexadecimal, cada carácter tiene 16 valores distintos y BCD tiene solo 10. Cuando haces matemáticas en decimal, si un número es mayor que 10, debes tomar el módulo de 10 y llevarlo a la siguiente fila. De manera similar, en matemáticas BCD, cuando el resultado de la suma es mayor que 9, agrega 6 para omitir los 6 valores “inválidos” restantes y pasar al siguiente dígito. Por el contrario, restas 6 en las restas.
Por ejemplo: 27 + 36
27: 0010 0111
+ 36: 0011 0110
───────────────
5_13: 0101 1101 (13 >= 10)
+ 6: 0110
───────────────
63: 0110 0011 (13 + 6 = 19 = 0x13, where 0x3 is the units digit and 0x10 is the carry)
Hacer una suma sin empaquetar es lo mismo, excepto que llevas directamente del dígito de las unidades al dígito de las decenas, descartando los primeros nibbles de cada byte.
Para más información puedes leer
- Lógica del programa ensamblador de adición BCD
- ¿Por qué se debe agregar seis a una suma BCD si es un código BCD no válido?
y alguien puede explicar AAM, AAD y el pseudocódigo de instrucciones de ajuste decimal en los manuales del conjunto de instrucciones de Intel también, ¿por qué son así, cuál es la lógica detrás de ellos?
AAM es solo una conversión de binario a BCD. Haces la multiplicación normalmente en binario, luego llamas a AAM divide el resultado por 10 y almacenas el par cociente-resto en dos caracteres BCD desempaquetados
Por ejemplo:
13*6 = 78 = 0100 1110
78/10 = 7 remains 8 => result = 0x78
AAD es lo contrario: antes de la división, llama a AAD para convertirlo de BCD a binario y hacer la división como otras divisiones binarias
Por ejemplo: 87/5
0x8*10 + 0x7 = 0x57
0x57/5 = 0x11 remains 0x7
El motivo de esas instrucciones es que en el pasado, las memorias eran caras y se debe reducir el uso de la memoria tanto como sea posible. Por lo tanto, en esa era, las CPU CISC son muy comunes. Utilizan muchas instrucciones complejas para minimizar las instrucciones utilizadas para realizar una tarea. Hoy en día, la memoria es mucho más barata y las arquitecturas modernas son casi RISCy, con la compensación de la complejidad de la CPU y la densidad del código.
Sección de Reseñas y Valoraciones
Si para ti ha resultado de utilidad nuestro artículo, te agradeceríamos que lo compartas con más seniors de este modo contrubuyes a difundir nuestro contenido.