Enviado em 29/06/2014 - 09:49h
#include <stdio.h>
int i;
//
// i = 10 * 20 + 3 * 5; // igual = 215
//
void funcao (void)
{
// push 2 valores:
//
asm ("push $10");
asm ("push $20");
// MULTIPLICA:
asm ("pop %eax");
asm ("imul (%esp), %eax"); // resultado: %eax
asm ("mov %eax, (%esp)"); // copia %EAX para (%ESP)
// push 2 valores:
//
asm ("push $3");
asm ("push $5");
// MULTIPLICA:
asm ("pop %eax");
asm ("imul (%esp), %eax"); // resultado: %eax
asm ("mov %eax, (%esp)"); // copia %EAX para (%ESP)
// SOMA:
asm ("pop %eax");
asm ("add %eax, (%esp)"); // resultado: (%esp) ---- EXCELENTE RESULTADO
#ifdef _WIN32
asm ("pop _i");
#endif
#ifdef __linux__
asm ("pop i");
#endif
}
int main (void)
{
funcao();
printf("\nresult( 10 * 20 + 3 * 5 ) = %d\n", i); // 215
return 0;
}