instrução mov em conjunto x86
Pergunta
Pelo que li sobre mov
, ele copia o segundo argumento para o primeiro argumento.Então, o que isso faz?
movl 8(%ebp), %edx
Ele copia tudo o que está em edx para o primeiro parâmetro da função (uma vez que um deslocamento de +8 de ebp
é um parâmetro)?
Acho que isso realmente significa mover o primeiro parâmetro para o registro edx
, mas li na Wikipedia que é o contrário?
Solução
movl 8(%ebp), %edx
está em "AT&T Syntax";nesta sintaxe, a origem vem primeiro e o destino depois.Então, sim, sua crença está correta.A maior parte da documentação usa a "sintaxe Intel", que tem a ordem inversa.Esta é uma fonte de confusão considerável para pessoas novas no assembly x86.
Na sintaxe da Intel, sua instrução seria escrita:
mov edx, [ebp + 8]
Observe a ausência de %
antes dos nomes de registro, o uso de colchetes em vez de parênteses para o endereço e a falta de um sufixo l
na instrução.Essas são dicas mortas para saber qual forma de montagem você está olhando.