Можно ли объединить две инструкции? - PullRequest
0 голосов
/ 26 октября 2018

Есть несколько примеров сборки ATT от Computer Systems: точка зрения программиста.Вот один из них:

элемент массива A [i] [j] может быть скопирован для регистрации% eax с помощью следующего кода:

(A in %rdi, i in %rsi, and j in %rdx)

1 leaq (%rsi,%rsi,2), %rax Compute 3i
2 leaq (%rdi,%rax,4), %rax Compute x_A + 12i
3 movl (%rax,%rdx,4), %eax Read from M[x_A + 12i + 4j]

Может первые дваинструкции должны быть объединены в

leaq (%rdi,%rsi,12), %rax

, поскольку он также вычисляет x_A + 12i?

Почему книга предпочитает писать две инструкции вместо?То же самое происходит и в других примерах.

Спасибо.

1 Ответ

0 голосов
/ 26 октября 2018

Нет, существуют только масштабные коэффициенты 1, 2, 4 и 8 (возможно, ноль, для случая «без индекса», но кодирование предполагает другую интерпретацию), ничто другое не может быть закодировано. Масштабный коэффициент не является произвольным целым числом, которое закодировано как таковое, кодировка предлагает только определенные варианты выбора.

...