2009-08-21 4 views
3

Par exemple, pour une UC 8 bits, la taille de la pile doit être de 8 bits, et la CPU de 16 bits contre la pile de 16 bits et la CPU 32 bits de 64 bits, etc. Est-ce vrai pour toutes les architectures?La largeur de la pile est-elle toujours la même que la taille du registre CPU?

+0

Ceci est un peu comme l'affirmation "tous les cygnes sont blancs" – skaffman

+3

Qu'entendez-vous par "largeur de pile"? – starblue

+0

Je suppose que la largeur de pile fait référence à l'intervalle minimum de points de mémoire adressables.Par exemple, si vous pouvez stocker un minimum de deux octets à la fois dans la pile, vous diriez que la largeur de la pile est de 16 bits? –

Répondre

5

Une CPU possède un bus de données et un bus d'adresses. Les can peuvent avoir la même largeur, mais ils ne le sont souvent pas. Le pointeur de pile est un pointeur vers la mémoire, donc souvent aussi large que le bus d'adresse, à moins qu'une conversion (bizarre/obscure) ne soit utilisée en interne. Le pointeur d'instruction (pointe vers l'instruction en cours) est également un pointeur vers la mémoire et, en tant que tel, aussi large que le pointeur de la pile.

D'autres registres traitent principalement des données et, en tant que tels, ont les mêmes dimensions que le bus de données. Mais comme d'habitude, il y a des exceptions.

Pour prendre un vieil exemple. Le 6502. Un cpu de 8 bits (bus de données 8 bits, bus d'adresse 16 bits). Il a les registres (plus ou moins) généraux X et Y, et l '"accumulateur" appelé A. Tous les registres à 8 bits. Il y a un pointeur de pile et un pointeur d'instruction, le pointeur de pile ayant 8 bits explicites et 8 bits implicites (la pile est toujours dans la même région de 256 octets) et donc le registre pointeur de pile ayant 8 bits, le pointeur d'instruction ayant 16 bits.

Le 8086 dispose d'un bus de données de 16 bits et d'un bus d'adresse de 20 bits. Les registres généraux où 8 (et 16 bits). Le pointeur d'instruction et le pointeur d'empilement ont 16 bits, mais le segment utilisé enregistre (également 16 bits) pour obtenir l'adresse complète de 20 bits.

4

CPU 8 bits, la taille de la pile s'attendrait être largeur 8 bits

Vous pourriez vous attendre, mais vous auriez tort. L'utilisation de base de la pile est de stocker & récupérer les adresses de retour, et sur les processeurs de 8 bits, il s'agit en fait de valeurs de 16 bits. Par exemple, l'instruction Z80:

PUSH HL 

pousse une valeur de 16 bits (les contenus des deux registres de 8 bits, H et L) dans la pile. Il n'y a pas d'instruction Z80 qui pousse une valeur de 8 bits.

1

La pile est vraiment juste un concept, et "largeur de pile" ne signifie vraiment rien. Vraisemblablement, vous voulez dire la largeur des éléments de la pile, mais vous pouvez généralement stocker des valeurs de taille arbitraires sur n'importe quelle pile (avec un peu de remplissage ou d'alignement), indépendamment de la largeur du bus ou de la taille du registre. Notez que les termes 8 bits, 16 bits, etc. sont un peu arbitraires et ne sont pas vraiment des définitions strictes, ce qui complique toute tentative de définition de "largeur".

1

Un point non encore mentionné est que certaines CPU (par exemple la famille PIC Microchip) ont une pile dédiée qui n'est pas accessible comme la RAM normale. Sur la série PIC16, la pile est liée exclusivement au compteur de programme, et la pile a (vraisemblablement) la même largeur que le compteur de programme. Sur la série PIC18, la pile et le compteur de programme ont tous deux une largeur de 21 bits; les 20 bits supérieurs peuvent être copiés vers ou depuis le compteur de programme; Le code peut également examiner l'élément de pile supérieur en tant que partie 5 bits et deux parties 8 bits.

Questions connexes