Kurze Antwort: Ja, 16 oder 32 Bit. Und, für x86-64, 64 Bits.
Der Hauptgrund für einen Stapel besteht darin, von verschachtelten Funktionsaufrufen zurückzukehren und Registerwerte zu speichern/wiederherzustellen. Es wird normalerweise auch verwendet, um Parameter zu übergeben und Funktionsergebnisse zurückzugeben. Mit Ausnahme der kleinsten Parameter haben diese Elemente normalerweise die gleiche Größe durch das Design des Prozessors, nämlich die Größe des Befehlszeigerregisters. Für 8088/8086 ist es 16-Bit. Für 80386 und Nachfolger sind es 32 Bits. Daher ist es wenig sinnvoll, Stapelanweisungen zu verwenden, die auf anderen Größen funktionieren.
Es gibt auch die Berücksichtigung der Größe der Daten auf dem Speicherbus. Es dauert genauso lange, ein Wort wie ein Byte abzurufen oder zu speichern. (Außer 8088, die 16-Bit-Register, aber einen 8-Bit-Datenbus hat.) Alignment kommt auch ins Spiel. Der Stapel sollte auf Wortgrenzen ausgerichtet sein, so dass jeder Wert als eine Speicheroperation abgerufen werden kann. Die Abwägung wird normalerweise vorgenommen, um Zeit gegenüber dem Speichern von Speicher zu sparen. Um ein Byte als Parameter zu übergeben, wird normalerweise ein Wort verwendet. (Oder, abhängig von der Optimierung, die dem Compiler zur Verfügung steht, wird ein Register mit einer Wortgröße verwendet, wobei der Stack vollständig vermieden wird.)
Diese Aussage trifft nur im 32-Bit-Modus zu, und Sie können auch 2 Byte drücken Elemente. – harold