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í ?

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top