Risposta breve: sì, 16 o 32 bit. E, per x86-64, 64 bit.
I motivi principali per uno stack devono essere restituiti dalle chiamate di funzioni nidificate e per salvare/ripristinare i valori di registro. Viene inoltre utilizzato in genere per passare i parametri e restituire i risultati delle funzioni. Tranne per i parametri più piccoli, questi elementi di solito hanno le stesse dimensioni dal design del processore, cioè la dimensione del registro del puntatore di istruzioni. Per 8088/8086, è 16 bit. Per 80386 e successori, è a 32 bit. Pertanto, c'è poco valore nell'avere istruzioni di stack che operano su altre dimensioni.
C'è anche la considerazione della dimensione dei dati sul bus di memoria. Ci vuole lo stesso tempo per recuperare o memorizzare una parola come fa un byte. (Tranne 8088 che ha registri a 16 bit ma un bus dati a 8 bit.) Anche l'allineamento entra in gioco. Lo stack deve essere allineato sui limiti delle parole in modo che ogni valore possa essere recuperato come un'operazione di memoria. Il trade-off viene solitamente utilizzato per risparmiare tempo rispetto al salvataggio della memoria. Per passare un byte come parametro, viene solitamente utilizzata una parola. (Oppure, a seconda dell'ottimizzazione disponibile per il compilatore, verrebbe utilizzato un registro a dimensione di parola, evitando del tutto lo stack.)
fonte
2013-04-06 20:04:20
Questa istruzione si applica solo in modalità 32 bit, e puoi anche premere/mettere in 2 byte elementi. – harold