Je me demandais s'il est possible d'encoder une instruction comme:L'opérande de mémoire directe de 64 bits est-il possible sur x86-64?
add rax, [adresse]
où < adresse> est une adresse de 64 bits complet pointant vers un 64 bits valeur. NASM semble simplement tronquer l'adresse et l'encoder comme une adresse 32 bits. La seule forme de 64 bits d'adressage (avec une adresse directe) qui semble fonctionner est:
mov rax, [adresse QWORD]
qui est codée par NASM utilisant REX.W = 1 et des opcodes spéciaux de MOV avec adressage direct. L'utilisation de REX.W avec l'instruction add lui fait simplement interpréter l'adresse cible comme contenant une valeur de 64 bits, mais ne permet pas la spécification d'une adresse de 64 bits. Mais je suis curieux de savoir s'il y a un autre moyen.
(En passant, à cause de ce problème, je suis pour l'instant en train d'utiliser l'adressage relatif RIP). Est-ce que quelqu'un peut confirmer que la forme directe d'adressage de 64 bits est impossible?
La référence de jeu d'instructions peut confirmer que, pas un étranger de l'Internet;) – Jester
Jester, j'ai regardé la référence de jeu d'instructions. Mais il est quelque peu difficile d'exclure qu'il puisse y avoir un moyen surtout parce que je n'ai pas l'habitude de le lire. La référence du jeu d'instructions répertorie une option "[REX.W + 03/r] ADD r64, r/m64" mais basée sur l'expérimentation et vos réponses (et les tableaux concernant l'octet MOD R/M) je conclus que cela fait référence à un 64 valeur -bit stockée à une adresse de mémoire spécifiée de 32 bits (sans possibilité d'étendre l'adresse à 64 bits en dehors de l'utilisation d'instructions supplémentaires). – Morty
@Morty L'ensemble ordinaire de modes d'adressage n'inclut pas un mode avec une disposition 64 bits ou absolue. Seules certaines instructions spéciales fournissent un tel mode d'adressage. – fuz