Dúvida Aula 12

4 views
Skip to first unread message

Stefan Teixeira

unread,
Dec 15, 2010, 7:11:13 PM12/15/10
to Comp-Prog
Na aula 12, slide 18 e 20, tem o código da função f() que chama a subrotina troca_soma. No código da f, ele reserva 24 bytes na pilha, o que faz o esp ficar em -24(ebp), certo? Aí ele adiciona arg1, arg2, depois pega os endereços de cada um, &arg1 e &arg2 e coloca no topo da pilha pra que, quando chamar a subrotina troca_soma, esses sejam os argumentos dela, né?

Beleza, mas aí na troca_soma, me confundi agora com esse leal, tipo, em eax tá o x, em edx tá o y, ele tem que retornar x+y, não poderia fazer um "addl %edx, %eax" ?

O leal serve pra armazenar endereço, enquanto o movl armazena valor, certo?

Mais uma coisa: em f, depois de chamar a troca_soma, em %eax vou ter o x+y né?

Fernando Silva

unread,
Dec 15, 2010, 7:47:18 PM12/15/10
to comp...@googlegroups.com
Stefan,

O leal pega um endereço e copia para algum outro lugar, porém se eu faço:

leal (%EDX, %EAX), %EAX

O que o programa interpreta é que eu tenho uma posição de memória que é dada por [%EDX + %EAX] e ele quer copiar o endereço dela, dado por %EDX + %EAX e copiar para %EAX. É um "macete" para fazer a conta.

Sim, em f, depois de chamar a função troca_soma vai ter o resultado x+y em %EAX

Stefan Teixeira

unread,
Dec 15, 2010, 8:07:24 PM12/15/10
to comp...@googlegroups.com
Mas dá na mesma fazer esse leal ou fazer um addl %edx, %eax, certo?

Fernando Silva

unread,
Dec 16, 2010, 3:03:22 AM12/16/10
to comp...@googlegroups.com
sim, mesma coisa
Reply all
Reply to author
Forward
0 new messages