Nell'MMIX di Knuth, come può essere x un ottabyte (64 bit) e M [x] un byte (8 bit)?

2

In Knuth's Fascicle 1 su MMIX , la sezione "Memoria e registri" a pagina 4 indica:

"quindi se x è un ottabreo, M [ x ] è un byte di memoria."

e

"quindi se x è un qualsiasi byte, $ x è un ottabreo."

Come x può essere un ottabyte (64 bit) e M [ x ] essere un byte (8 bit)? Al contrario, come può x essere un byte e $ x essere un ottabreo?

    
posta user43713 24.12.2011 - 14:09
fonte

2 risposte

4

MMIX è un computer nozionale a 64 bit, quindi il suo bus indirizzo ha 64 linee e può essere dotato di fino a 2 ^ 64 celle di memoria. Ognuna di queste celle, tuttavia, contiene 1 byte (8 bit) e non 64 bit, quindi avete 2 ^ 64 byte (non ottici) di RAM. (È consuetudine misurare la RAM in byte e non in double, quad- o octo-bytes anche quando l'architettura ha più di 8 bit. È anche conveniente recuperare singoli byte dalla memoria perché molti algoritmi richiedono solo numeri piccoli in molti In pratica, le cache del processore oscurano comunque questa distinzione.)

I registri, tuttavia, sono registri a 64 bit completi, quindi $ x è un octobyte, non solo un byte. Ancora una volta, questa è una convenzione per l'architettura del processore piuttosto che una legge fissa, ma la maggior parte delle architetture che sostengono di essere X-bit (per un valore enorme di X) ha anche registri X-bit, così quando si vuole caricare X bit dalla memoria simultaneamente, puoi riceverli in un solo registro senza versare.

    
risposta data 24.12.2011 - 14:24
fonte
2

Poiché gli indirizzi di memoria "plain ol" "si riferiscono ai byte. Si noti, tuttavia, che se si stanno indirizzando più di un byte di memoria più indirizzi di memoria puntano alla stessa cosa.

Per essere sicuri, ci sono 2 ^ (64) byte di memoria, 2 ^ (63) Wydes, 2 ^ (62) tetrabytes e 2 ^ (61) ottabyte. Fondamentalmente finisci con 3 bit ignorati quando ti rivolgi a octabytes.

In altre parole, se f (x) è una funzione da un indirizzo x alla sua cella di memoria (pensa a *x in C), f (x) non è bijective; inoltre, f (x) è solo un'operazione binaria quando stai indirizzando gli ottabiti (ad esempio, per x in X f (f (x) è anche in X).

Puoi pensare ad esso come puntatori a int , double , ecc.

È bello vedere le persone leggere circa MMIX !

    
risposta data 24.12.2011 - 15:18
fonte

Leggi altre domande sui tag