2010-07-12 15 views
3

Tout en passant par des fiches de données d'une architecture de processeur, j'ai vu les termes, court mode d'adressage et à long mode d'adressageQuelle est la différence entre le mode court adressage et à long mode d'adressage

Quelqu'un peut-il me donner l'idée générale des termes (pas besoin d'être processeur spécifique!)

/renjith_g

+0

Quelle architecture de processeur? Des choses comme celles-ci sont spécifiques au processeur. –

+0

freescale sc140 –

Répondre

3
  • un mode d'adressage court utilise une adresse relative, calculée comme (certains registre + quelques s constant mallish), qui permet généralement de petites/quelques/rapides instructions, mais ne peut s'adresser qu'à une petite plage de mémoire;
  • Un mode d'adressage long utilise des adresses absolues, lesquelles requièrent généralement des instructions grandes/nombreuses/lentes, mais qui peuvent accéder à n'importe quelle mémoire.

Je donnerai un exemple de code ARM, mais cela s'applique probablement (au sens général) à de nombreux autres processeurs.

Chaque instruction ARM (ignorant Thumb) a une longueur de 32 bits, et dans l'intérêt de cet exemple, nous allons prétendre que l'ARM peut accéder à un espace d'adressage de 32 bits.

Chaque instruction doit être décodée, essentiellement en décomposant ces 32 bits en divers champs - et certains de ces bits doivent être utilisés pour stocker le type de l'instruction.

Espérons donc, il devrait être clair que vous ne pouvez pas charger une adresse arbitraire dans un registre dans une instruction:

MOV Rn, #AABBCCDD 

Ne fonctionne pas - puisque nous devons utiliser bits pour spécifier l'instruction (MOV) et le registre de destination (Rn), il ne nous reste plus que 32 bits pour stocker une adresse 32 bits.

Donc, si nous voulons que l'adresse de quelque chose dans un registre, nous avons quelques options:

1. Utilisez PC-relatifs

Il y a une pseudo-op qui fonctionne comme suit:

ADR Rn, .label 
... 
.label 

qui obtient étendu à:

ADD Rn, PC, (.label - here) 

Fourni .label est dans environ 4k de l'instruction en cours, nous pouvons ajouter/soustraire du PC actuel (compteur de programme) pour obtenir cette adresse. C'est une adresse relative.

2. Utilisez plusieurs instructions

Vous pouvez construire une adresse arbitray en utilisant permet d'ajouter ou ORS:

MOV Rn, #AA000000 
ADD Rn, Rn, #00BB0000 
ADD Rn, Rn, #0000CC00 
ADD Rn, Rn, #000000DD 

(En fait, vous pouvez le faire beaucoup plus efficacement, mais vous voyez l'idée) .

3.Stocker l'adresse absolue dans un endroit relativement connu

Si vous connaissez l'adresse que vous voulez est à proximité stockée, vous pouvez le charger de la mémoire:

ADR Rn, .store 
LDR Rn, [Rn] 

.store 
EQU #AABBCCDD 

Maintenant, d'autres architectures de traitement peuvent avoir des instructions de longueur variable (par exemple x86), vous pouvez donc choisir d'utiliser un mode d'adressage relatif court (par exemple par rapport à un PC ou un autre registre), ou une instruction plus longue (et probablement) plus lente qui contient une adresse entière de 32 bits.

+0

J'ai une idée. Mais pouvez-vous être un peu spécifique aux deux modes d'adressage ci-dessus? /renjith_g –

+0

@RenjithG les exemples sont très spécifiques. Étant donné que vous n'indiquez pas le processeur, la réponse est parfaite et ne peut pas être améliorée. Si vous faites de l'ASM, vous devriez être capable de porter l'exemple à n'importe quel CPU a votre attention. –