
Enviado em 18/10/2018 - 11:49h
Estava testando um "brinquedinho" enquanto aguardava o almoço e resolvi compartilhar.
//-------------------------------------------------------------------
//
// ASM Expr X86( 32 bits ):
//
// ARQUIVO:
// expr.c
//
// COMPILE:
// gcc expr.c -o expr -Wall -m32
//
//-------------------------------------------------------------------
//
#include <stdio.h>
#define REG_MAX 6
enum {
EAX = 0,
ECX,
EDX,
EBX,
ESI,
EDI
};
static char *REGISTER[REG_MAX] = { "%eax", "%ecx", "%edx", "%ebx", "%esi", "%edi" };
static int stack;
void push (void) {
if (stack < REG_MAX)
stack++;
}
void pop (void) {
if (stack)
stack--;
}
void push_number (int i) {
push();
printf ("mov $%d, %s\n", i, REGISTER[stack]);
}
void add (void) {
printf ("add %s, %s\n", REGISTER[stack], REGISTER[stack-1]);
pop();
}
void imul (void) {
printf ("imul %s, %s\n", REGISTER[stack], REGISTER[stack-1]);
pop();
}
void print_stack(void) {
printf ("Stack(%s) = %d\n",REGISTER[stack], stack);
}
int main (void) {
//----------------------------
//
// Expression:
// 10 * 20 + 3 * 5;
//
// Result: ecx = 215
//
//----------------------------
//
push_number(10);
push_number(20);
imul();
push_number(3);
push_number(5);
imul();
add();
print_stack();
return 0;
}
Berry Bank: Criando um Banco Digital Gamificado para seus Filhos com Gentoo, Flask e Tailscale
Papagaiando o XFCE com temas e recursos
Steam (Flatpak) rodando jogos em partição NTFS
O dock Plank + U-Launcher deixam qualquer desktop mais produtivo
Recuperando arquivos com o Photorec de discos zoados
Instalar Linux em notebook Sony Vaio VPCEG13EB (17)
Alguém tem que acabar com ANATEL!!! (10)
O que você está ouvindo agora? [2] (229)









