1 assembly em c - 3º parte Sáb Abr 20, 2013 6:56 pm
Moedas : 201
Mensagens : 92
Humor : *-*
Reputação : 5
Mensagens : 92
Humor : *-*
Reputação : 5
hacker fts315
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
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),
em C(asm) ficaria assim
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
em C(asm) ficaria assim
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")
em C(asm)
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
em C(asm)
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
em C(asm)
e o shr desloca para direita
em C(asm)
bom galera esse tutorial continua no proximo episodio kkkkkkkk
by hacker fts315
- 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