Assembly Expression:

1. Assembly Expression:

???
gokernel

(usa Linux Mint)

Enviado em 18/10/2018 - 11:49h

Estava testando um "brinquedinho" enquanto aguardava o almoço e resolvi compartilhar.


Um ( Assembly Expression ), para quem tem curiosidade ...



//-------------------------------------------------------------------
//
// 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;
}



Se for compilar esse exemplo o Registro ( %ecx ) teria um Valor = 215 ... e precisaria "zerar a stack" ( = 1 )...mas isso é uma outra história.





  


2. Re: Assembly Expression:

Natsu Dragneel
Natsu_Dragneel

(usa XUbuntu)

Enviado em 18/10/2018 - 13:02h

Isso, me lembra de eu fazendo uma maquina virtual do 0.







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts