Bem vindo ao LifeGames Demo
Cadastre-se agora para ter acesso a todos os nossos recursos. Uma vez cadastrado e logado, você será capaz de criar tópicos, postar respostas a tópicos já existentes, a reputação de seus companheiros, começar seu próprio mensageiro privado, atualizações de status post, gerir o seu perfil e muito mais. Esta mensagem será removida assim que tiver logado.
Entrar Cadastre-se


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

Ver o tópico anterior Ver o tópico seguinte Ir em baixo  Mensagem [Página 1 de 1]

1 assembly em c - 2º parte em Sab Abr 20, 2013 6:48 pm

Moedas Moedas : 201
Mensagens Mensagens : 92
Humor Humor : *-*
Reputação Reputação : 5
Quebra de regras:
0 / 1000 / 100

avatar

hacker fts315

Moderador Informática

Moderador Informática

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



[center][Você precisa estar registrado e conectado para ver esta imagem.]


Contato:
Facebook: /hacker.fts315
Ask: /hfts315
Ver perfil do usuário http://www.facebook.com/hacker.fts315

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo  Mensagem [Página 1 de 1]

Permissão deste fórum:
Você não pode responder aos tópicos neste fórum