2009-04-20 5 views
5

Quelqu'un peut-il m'expliquer comment la division dans MIX (de TAOCP par Knuth) fonctionne sur une base octet à octet? L'emplacement de mémoire 1000 contient |-|0|0|0|2|0|. L'emplacement de mémoire 1000 contient |-|0|0|0|2|0|.Comment fonctionne la division dans MIX?

Lorsque vous exécutez l'opération

DIV 1000 

les registres deviennent

rA = |+|0|617|?|?| 

rX = |-|0|0|0|?|1| 

Je comprends maintenant les signes sur rA et rX, mais dans quel ordre sont les octets de rAX remplis et qui divisions sont terminé?

Si DIV 1000 conduit à chaque bit divisé par deux, alors je me attends

rAX = |+|617|0|1|0|-|0|1|0|1|1| 

dans lequel rA contient les résultats de la division et rX les Restes (remplies du côté droit). Je vois probablement quelque chose ici, et Knuth semble penser que je devrais être capable de le comprendre moi-même (d'où les questions de niveau 10, mais je ne comprends pas), mais quelqu'un pourrait-il m'aider? ici?

Répondre

3

Donc, je me suis débrouillé. Si vous faites la division à la main, en convertissant les octets en un seul nombre vous obtiendrez -210,501,825 (si vous utilisez le plus petit type d'octet - qui est 6 bits (!) Dans le livre de Knuths). Divisez ceci par -128, qui est la valeur dans l'emplacement 1000 en utilisant le même bytesize.

Le quotient est 1644545, le reste 65, le signe sera positif puisque les deux nombres sont négatifs. Si vous stockez 1.644.545 dans rA et 65 rx, vous obtiendrez

|+|0|6|17|32|01| 
|-|0|0|0|1|1| 

en utilisant la plus petite bytesize (qui détient 64 numéros). Puisque Knuth n'assume jamais un bytesize particulier dans ses exemples, rX a un certain nombre de points d'interrogation. Le signe de rX est toujours le signe précédent de rA. Editer: J'ai utilisé l'utilitaire très pratique MixEmul pour jouer avec les registres de MIX. C'est une jolie implémentation MIX faite en .NET

Questions connexes