x86-64 ASM. Лучший способ выбрать использование регистра

#assembly #x86 #x86-64

#сборка #x86 #x86-64

Вопрос:

Давайте предположим, что у меня есть два регистра (скажем, RAX и RDX), которые я могу свободно использовать, не влияя на исходный код. Что лучше (предположим, мне не нужно временное значение из 0xabcd впоследствии):

 #1
MOV RAX, [0xabcd]
MOVSX RAX, BYTE PTR [RAX]
MOV [0xbcde], RAX

  

или

 #2
MOV RAX, [0xabcd]
MOVSX RDX, BYTE PTR [RAX]
MOV [0xbcde], RDX
  

Или есть другое решение, которое еще лучше? Также хотелось бы получить объяснение этого в целом, поскольку у меня есть довольно много точек, где у меня есть указатель памяти по определенному адресу, и мне нужно разыменовать этот указатель.

Комментарии:

1. Я предполагаю, что, поскольку каждая инструкция зависит от предыдущей, не имеет значения, что вы повторно используете rax значение, и это оставляет еще один слот доступным для переименования регистра в окружающем коде.

2. @Jester Итак, вы бы сказали # 1? Почти то, что я тоже подумал. Также это то, что я бы предпочел, поскольку это немного упрощает понимание программы IMO.

3. Это не имеет значения. Оба варианта хороши. В 32-разрядном коде первый вариант имеет немного более короткую кодировку и может быть предпочтительным при оптимизации по размеру. Однако это не относится к 64-разрядному коду.