¿Cómo funciona la división en la mezcla?
Pregunta
Puede alguien explicarme cómo la división en la mezcla (de TAOCP por Knuth) trabaja sobre una base de byte a byte?
rA = |-| . . . .0|
rX = |+|1235|0|3|1|
La ubicación de la memoria 1000 contiene |-|0|0|0|2|0|
.
Al ejecutar la operación
DIV 1000
los registros se convierten
rA = |+|0|617|?|?|
rX = |-|0|0|0|?|1|
Ahora entiendo las señales en rA
y rX
, pero en qué orden son los bytes de rAX
llenos, y que las divisiones se hacen?
Si DIV 1000 lleva a cada bit dividida por 2, entonces yo esperaría
rAX = |+|617|0|1|0|-|0|1|0|1|1|
en el que rA
contiene los resultados de la división y rX
los restos (llenado desde el lado derecho).
Estoy probaly perdiendo algo aquí, y Knuth parece pensar que debería ser capaz de averiguarlo yo mismo (por tanto el nivel de 10 preguntas sobre el mismo, las cuales yo también no entiendo), pero alguien podría ayudarme aquí ?
Solución
Así que el tipo de figura que yo mismo.
Si lo hace la división a mano, mediante la conversión de los bytes en un solo número obtendrá -210 501 825 (si está utilizando la más pequeña especie de bytes - el cual es de 6 bits () en el libro Knuths!). Dividir esta por -128, que es el valor en la posición 1000 utilizando el mismo ByteSize.
El cociente es 1644545, el resto 65, la señal será algo positivo ya que ambos números son negativos. Si almacena 1.644.545 en la AR y 65 en Rx, obtendrá
|+|0|6|17|32|01|
|-|0|0|0|1|1|
usando el ByteSize más pequeña (que tiene 64 números). Desde Knuth no asume una ByteSize particular, en sus ejemplos, rX tiene una serie de signos de interrogación. La señal de Rx es siempre el signo anterior de la AR.
Edit: He utilizado el MixEmul utilty para jugar con el registros de mezcla. Esta es una bonita aplicación MIX hecho en .NET