and assembly x86
Montaje de la división x86 con DX: AX (1)
Estoy trabajando con masm y me he encontrado con un escenario que no entiendo cómo resolverlo, por ejemplo:
X = (A)/(C*D)
Si multiplico C * D primero, mi valor es DX: AX y que yo sepa, no puedo usar eso como un divisor. Si hago la división por separado como A / C y A / D, corro el riesgo de perder precisión (de los recordatorios, etc.). ¿Cuál es la mejor manera de implementar esto?
Como nota correctamente, no puedes usar un número de 32 bits como divisor en una división de 16 bits, pero como solo nos interesa hacer una división de enteros, eso no es un problema.
Hay dos casos a considerar (para la división sin firmar):
-
DX == 0: El resultado deC*Dajusta en 16 bits, por lo que podemos proceder de forma normal usandoaxcomo el divisor de 16 bits. -
DX > 0(DX != 0):C*Des mayor que 65335 (0xFFFF) y la división de 16 bits sin signo deAy ese número siempre será 0 y el resto simplemente esA
O podría hacer como C y simplemente asumir que el resultado de C*D ajusta a 16 bits. :)