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;
}
Programa IRPF - Guia de Instalação e Resolução de alguns Problemas
Criando uma Infraestrutura para uma micro Empresa
Criar entrada (menuentry) ISO no Grub
Como gerar qualquer emoji ou símbolo unicode a partir do seu teclado
Instalando o Pi-Hole versão v5.18.4 depois do lançamento da versão v6.0
Instalar o VIM 9.1 no Debian 12
Como saber o range de um IP público?
Muitas dificuldades ao instalar distro Linux em Notebook Sony Vaio PCG-6131L (VPCEA24FM)
Erro ao instalar o ChatGPT Desktop (9)
Liberação de alguns links no squid (13)