2016-09-21 4 views
-1
movq %rax,%rdx 

movq 13(%rax),%rdx 

movq 0x47(%rax,%rcx),%rdx 

rcx = 0000000000000030 
rax = 0000000008048a37 

Мне было интересно, какая разница между этими тремя инструкциями на сборочной линии. Я знаю, что первый из них перемещает 8048a37 в% rdx. Во втором, я думаю, мне нужно добавить 13 до 8048a37, чтобы получить 8048a4a, а затем все, что 8048a4a указывает на то, чтобы попасть в% rdx. В третьем я думаю, что я добавляю rax, rdx и 47, чтобы получить 8048aae, а затем все 8048aae указывает на переход в% rdx.основы сборки - movq

+3

Руководства по процессорам можно бесплатно загрузить как из Intel, так и из AMD. Они включают всестороннюю ссылку на все инструкции и режимы адресации. –

+1

Точно. Ваши наблюдения верны. – fuz

+0

Ох .. Не видел ваших наблюдений правильно. Сожалею!!! – amanuel2

ответ

2

Разница между инструкциями по сборке заключается в том, что вы получаете доступ к смещению. Давайте пройти через них :)

movq %rax,%rdx 

Просто перемещает Rax регистр (64 бит регистра для EAX бита) для RDX регистр (64 бит регистра для EDX 32 бит)

movq 13(%rax),%rdx 

Перемещает адрес регистра Rax со смещением от 13 до RDX регистре

movq 0x47(%rax,%rcx),%rdx 

перемещает адрес 0x47 + Rax регистра + RCX регистра в регистр RDX.

+3

Инструкция по эффективному адресу нагрузки ('lea') переместит адрес. Описание в вопросе верное. – user3386109

0

movq %rax, %rdx - Перемещение содержимого регистра RAX в регистр RDX.

movq 13(%rax), %rdx - Загружает 8-байтовое значение по адресу [RAX + 13] из памяти в регистр RDX.

movq 0x47(%rax,%rcx),%rdx - Загружает 8-байтовое значение по адресу [RAX + RCX + 0x47] из памяти в регистр RDX.

+0

Нет, смещение (0x47) не масштабируется по размеру операнда. Перемещения в источнике asm всегда находятся в байтах. (Удовлетворительный факт: машинная кодировка для перемещений disp8 AVX512 масштабируется размером операнда, поэтому вы можете достичь +127 * 64 байта с компактным перемещением, но 'vcmpeqps 13 (% rax),% zmm1,% k1' (512 -битный операнд памяти) потребует disp32, потому что 13 не кратно 64. Но, как я уже сказал, это не влияет на то, как вы пишете его в источнике). –

 Смежные вопросы

  • Нет связанных вопросов^_^