2016-09-29 5 views
1

Le documentation for LDP and STP donne une instruction d'exemple, avec un point d'exclamation à la fin:Que signifie le point d'exclamation à la fin d'une instruction A64?

LDP X8, X2, [X0, #0x10]! 

Aussi les documentation about porting A32 PUSH/POP instructions dans A64 donne les exemples suivants:

PUSH {r0-r1} ---> STP X0, X1, [SP, #-16]! 
POP {r0-r1} ---> LDP X0, X1, [SP], #16 

Aucune des pages explique ce que le point d'exclamation à la fin des moyens d'instructions. Qu'est-ce que c'est?

+1

Avez-vous envisagé de lire la documentation sur les modes d'adressage (le! Indique que non seulement le décalage est ajouté à 'sp' mais que le résultat est également réécrit en' sp' si je me souviens bien). – fuz

+4

Cela signifie exactement la même chose que cela a signifié dans les modes d'adressage pré-indexés ARM pour les 3 dernières décennies, et que chaque référence de jeu d'instructions couvre, y compris la section appropriée du document que vous avez lié ... (6.3.4 – Notlikethat

Répondre

6

Le ! signifie "Registre ré-écriture": le registre de base est utilisé pour calculer l'adresse du transfert, et est mis à jour.

Dans votre exemple:

LDP X8, X2, [X0, #0x10]! 

X0 modifié de sorte que, après l'opération:

X0 = X0 + 0x10 

Si vous ne mettez pas le !, X0 n'est pas modifiée par l'opération.

Sur le second exemple concernant PUSH/POP, la différence est quand l'incrément est fait:

STP X0, X1, [SP, #-16]! magasins à l'adresse SP-16 et SP est décrémenté de la même manière

LDP X0, X1, [SP], #16 charges de l'adresse SP, et après que le transfert est effectué, stocke SP+16 à SP.

+0

Cette documentation dit une chose différente: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.den0024a/ch05s01s03.html. Avec '!', Le registre cible est incrémenté avant l'opération, sans '!' - après. –

+0

Le lien ne semble pas correct. Mais de toute façon je pense que vous comparez les 2 formes de réécriture: 'LDR x1, [x0, #imm]!' Ou 'LDR x1, [x0], # imm'. La première forme charge à 'x0 + # imm' (incrément avant), la seconde charge à' x0'. – Dric512

+0

Ce lien doit être correct: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.den0024a/CJAIFJII.html –