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 - 3º parte em Sab Abr 20, 2013 6:56 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

bom galera continuando o tutorial de asm em c nesse eu vou ensinar mais alguns comandos, vamos começar com o comando loop esse comando permite repetir usando o registrado ecx como base para usar ele basta colocar a quantidade de loop no registrador ecx, no exemplo abaixo eu coloquei o valor 0 no registrador eax e o valor 15 no ecx e criei um label chamado fts, a cada loop ele vai incrementar 1 no registrador eax

Código:
#include <stdio.h>

int main(void)
{
  int x;

  asm("mov $0,%%eax ;"
      "mov $15,%%ecx ;"
      "fts: ;"
     "inc %%eax ;"
     "loop fts ;"
     :"=a"(x)
    );
   
  printf("%d",x);
}

a operaçao bit a bit permite manipular o numero (binario), retornando verdadeiro e falso dependendo dos numeros, por exemplo o numero 5 em binario e 101 e o numero 4 e 100, o numero 1 e representado como verdadeiro e o 0 falso, se agente comparar ambos os numeros pode retorna operaçao bit a bit, a operaçao bit a bit or ela retorna verdadeiro caso algun dos numeros seja verdadeiro (vamos usar como exemplo o numero 5 e 4 ou seja 101 e 100),

101 = 5
100 = 4
----
101 = 5

em C(asm) ficaria assim

Código:
#include <stdio.h>

int main(void)
{
  int x;

  asm("mov $5,%%eax ;"
      "mov $4,%%ebx ;"
      "or %%ebx,%%eax ;"
     :"=a"(x)
    );
   
  printf("%d",x);
}

entao na operaçao bit a bit or entre 5 e 4 vai dar como resultado 5, na operaçao bit a bit and ele apenas retorna verdadeiro se os dois numeros forem verdadeiros, vamos usar como exemplo 5 e 4 denovo

101 = 5
100 = 4
----
110 = 6

em C(asm) ficaria assim

Código:
#include <stdio.h>

int main(void)
{
  int x;

  asm("mov $5,%%eax ;"
      "mov $4,%%ebx ;"
      "and %%ebx,%%eax ;"
     :"=a"(x)
    );
   
  printf("%d",x);
}

na operaçao bit a bit xor ele faz o inverso apenas vai ser verdadeiro se os numeros forem opostos (essa operaçao e muito usado para zerar o registrador por exemplo "mov %%eax,%%eax")

101 = 5
100 = 4
----
001 = 1

em C(asm)

Código:
#include <stdio.h>

int main(void)
{
  int x;

  asm("mov $5,%%eax ;"
      "mov $4,%%ebx ;"
      "xor %%ebx,%%eax ;"
     :"=a"(x)
    );
   
  printf("%d",x);
}

tambem existe o not q nega e inverte um numero se ele for 1 ele vira 0 se for 0 ele vira 1, esse nao precisa de uma comparaçao entre dois numeros

101 = 5
----
010 = 2 (ou -6 caso tenha sinal)

em C(asm)

Código:
#include <stdio.h>

int main(void)
{
  int x;

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

tambem existe o deslocamento para direita e esquerda q sao operaçao bit a bit, shl e desloca para esquerda adicionando um 0 no final

101 = 5
----
1010 = 10

em C(asm)

Código:
#include <stdio.h>

int main(void)
{
  int x;

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

e o shr desloca para direita

101 = 5
----
10 = 2

em C(asm)

Código:
#include <stdio.h>

int main(void)
{
  int x;

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

bom galera esse tutorial continua no proximo episodio kkkkkkkk

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