2016-10-15 3 views
-1

Я должен перебирать стека временного перемещения значения слов к регистру, что-то вроде этого:Iterate стек в AT & T x64 сборки

movq ((i - 3)*8)(%rsp), %esi 

или

movq %rcx, %rbx    # where %rcx is the counter 
     subq $3, %rbx   
     movq $8, %rax 
     mulq %rbx 
     movq (%rbx)(%rsp), %esi 

Но очевидно, ни одна из вышеперечисленных работ, так как я должен изменить ее, чтобы она работала?

+0

почему вы не делаете непосредственно 'мов еси, [RSP + RCX * 8-24]'? (Я не мог потрудиться с синтаксисом AT & T, извините). ... кстати, не очевидно, почему ваш не работает. Я бы предположил, что компилятор не любит дополнительные скобки? Может быть, 'movq -24 (% rsp,% rcx, 8),% esi' - синтаксис AT & T? Я не хочу возиться с этим, blargh. Прочитайте некоторые документы, если вы действительно этого хотите. – Ped7g

+0

@ Ped7g ваш ответ является самой прямой интерпретацией 'movq ((i-3) * 8) (% rsp),% esi', за исключением обоих случаев, 64-битное значение не может быть перенесено в 32-битный регистр , поэтому он должен быть «movl». Кроме того, вы должны быть сформулированы как ответ, поэтому читатели, просматривающие список вопросов, могут видеть, что на него был дан ответ, и в идеале OP отмечает, что он является решением. –

+0

@ Ped7g В синтаксисе AT & T это 'mov -24 (% rsp,% rcx, 8),% esi'. – fuz

ответ

0

movl -24(%rsp,%rcx,8),%esi

Пожалуйста, прочитайте документацию T синтаксис AT & (и он вокруг).

Личные предубеждения: в то время как обычно я не возражаю против альтернатив, в случае сборки x86 я думаю, что режим причуды MASM должен быть сгорел, а AT & T должен использоваться только компиляторами в качестве машинного формата для дальнейшей компиляции/etc, но не людьми. Если вы настаиваете на использовании AT & T, продолжайте, но я буду считать вас мазохистом.

Для сравнения, Intel синтаксис (NASM):
mov esi,[rsp+rcx*8-24]

+0

Я действительно натолкнулся на что-то подобное в документах, но он все еще был довольно расплывчатым. Спасибо за ответ! – Ralph

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

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