1 assembly em c - 2º parte Sáb Abr 20, 2013 6:48 pm
Moedas : 201
Mensagens : 92
Humor : *-*
Reputação : 5
Mensagens : 92
Humor : *-*
Reputação : 5
hacker fts315
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
para decrementar ao inves de incrementar se usa dec
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
no exemplo acima ele vai pular para o fts e nao vai fazer o "inc %%eax ;" voce tambem pode pular para traz
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
no exemplo acima ele so pula para fts se o valor for igual, para ele pular se for diferente se usa jne
para ele pular se for maior e ja
para pular se for menor e jb
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
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
bom galera e isso, talvez eu faça uma 3º parte desse tutorial ^^
by hacker fts315
- 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