seja bem vindo ao forum eof, caso nao seja cadastrado se cadastre para poder visualizar todo o conteudo ^^

Participe do fórum, é rápido e fácil

seja bem vindo ao forum eof, caso nao seja cadastrado se cadastre para poder visualizar todo o conteudo ^^
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Você não está conectado. Conecte-se ou registre-se

[tutorial] assembly em c - 2º parte

Ir para baixo  Mensagem [Página 1 de 1]

1[tutorial] assembly em c - 2º parte Empty [tutorial] assembly em c - 2º parte Dom Set 16, 2012 2:42 pm

Kodo no Kami

Kodo no Kami
master
master

continuando o tutorial anterior, agora vamos usar o comando para incrementar um valor ou seja ele vai adicionar + 1 ao valor para isso agente usar o comando inc, esse comando e util na hora de criar loop ou alguma coisa do genero, a sintaxe do inc e ele e depois o registrador

Código:
#include <stdio.h>

int main(void)
{
  int x;

  asm("mov $315,%%eax ;"
      "inc %%eax ;"
      :"=a"(x));
   
  printf("%d",x);
}

para decrementar ao inves de incrementar se usa dec

Código:
#include <stdio.h>

int main(void)
{
  int x;

  asm("mov $315,%%eax ;"
      "dec %%eax ;"
      :"=a"(x));
   
  printf("%d",x);
}

agora vamos da um pulo, para isso agente usa um label (um ponto de referencia) para criar um label basta escrever um nome seguido de dois pontos por exemplo fts: , para pular basta usar o comando jmp depois o nome do label

Código:
#include <stdio.h>

int main(void)
{
  int x;

  asm("mov $315,%%eax ;"
      "jmp fts ;"
      "inc %%eax ;"
     "fts:"
      :"=a"(x));
   
  printf("%d",x);
}

no exemplo acima ele vai pular para o fts e nao vai fazer o "inc %%eax ;" voce tambem pode pular para traz

Código:
#include <stdio.h>

int main(void)
{
  int x;

  asm("mov $315,%%eax ;"
     "fts:"
      "inc %%eax ;"
     "jmp fts ;"
      :"=a"(x));
   
  printf("%d",x);
}

no exemplo acima ele fica preso em um loop infinito =/ , para comparar dois valores se usa cmp seguido dos dois registradores, para deixar mais completo se usa o comando de pulo condicional para pular se for igual ou diferente dependendo da logica para pular se o valor for igual e o comando je

Código:
#include <stdio.h>

int main(void)
{
  int x;

  asm("mov $315,%%eax ;"
      "cmp $315,%%eax ;"
     "je fts ;"
      "inc %%eax ;"
     "fts:"
      :"=a"(x));
   
  printf("%d",x);
}

no exemplo acima ele so pula para fts se o valor for igual, para ele pular se for diferente se usa jne

Código:
#include <stdio.h>

int main(void)
{
  int x;

  asm("mov $315,%%eax ;"
      "cmp $316,%%eax ;"
     "jne fts ;"
      "inc %%eax ;"
     "fts:"
      :"=a"(x));
   
  printf("%d",x);
}

para ele pular se for maior e ja

Código:
#include <stdio.h>

int main(void)
{
  int x;

  asm("mov $315,%%eax ;"
      "cmp $314,%%eax ;"
     "ja fts ;"
      "inc %%eax ;"
     "fts:"
      :"=a"(x));
   
  printf("%d",x);
}

para pular se for menor e jb


Código:
#include <stdio.h>

int main(void)
{
  int x;

  asm("mov $315,%%eax ;"
      "cmp $314,%%eax ;"
     "jb fts ;"
      "inc %%eax ;"
     "fts:"
      :"=a"(x));
   
  printf("%d",x);
}

tambem existe maior ou igual e o comando jae, menor ou igual a jbe, se for igual a zero jz, se for diferente de zero jnz, nao vou mostrar eles pq e mesma coisa XD , veja um exemplo dele repetido enquato for menor ou igual q 315

Código:
#include <stdio.h>

int main(void)
{
  int x;

  asm("mov $0,%%eax ;"
      "hack:"
     "inc %%eax ;"
      "cmp $315,%%eax ;"
     "jbe hack ;"
      :"=a"(x));
   
  printf("%d",x);
}

para colocar uma valor na pilha se usa push e para tirar se usa pop, a pilha usa a logica do primeiro a entrar vai ser o ultimo a sair, voce pode usar ela para diversas coisa por exemplo inverter algun registrador veja

Código:
#include <stdio.h>

int main(void)
{
  int x , y;

  asm("mov $315,%%eax ;"
      "mov $666,%%ebx ;"
     "push %%eax ;"
     "push %%ebx ;"
     "pop %%eax ;"
     "pop %%ebx"
      :"=a"(x), "=b"(y));
   
  printf("%d \n%d",x,y);
}

bom galera e isso, talvez eu faça uma 3º parte desse tutorial ^^

by hacker fts315

https://endoffile.umforum.net

Ir para o topo  Mensagem [Página 1 de 1]

Permissões neste sub-fórum
Não podes responder a tópicos