Buscar

Assembler com delphi

Código

{Existem duas maneiras de vc trabalhar com ASM no Delphi:
1 - Se toda a rotina form em ASM, crie a função com a directiva Assembler.
Dessa maneira, o compilador entenderá que toda a função é escrita em Assembler, e vc faz exatamente isso, cria toda a função em ASM.
Ex.:
procedure MinhaFuncao(param1: integer); Assembler;
begin
(todo o código deve ser em Assembler)
end;
2 - Se apenas parte da rotina for em ASM, use o bloco asm .. end;
Ex.:}

procedure MinhaFuncao(param1: integer);
begin
//... (codigo em Object Pascal) ...
asm
//... (codigo em Assembler) ...
end;
//... (codigo em Object Pascal) ...
end; // fim da rotina

{Eu nao pretendo me aprofuncar muito em ASM, apenas quero aprender a fazer algo como um loop ou um laço e trabalhar com strings e matrizes...
Para fazer um loop basta definir um label e depois fazer um salto para ele. ex.:}

Loop_1:
xxxx
jmp Loop_1
{
O ASM não tem suporte para string e matriz, vc terá que fazer isto na mão.
A forma mais simples de definir um string é o PChar do delphi.
O PChar é uma sequencia de caracteres terminado com o caracter nulo (#0 ).
Para trabalhar com matriz, vc terá que fazer o endereçamento na mão.
> Estao se eu for ler todos os conceitos do ASM e todo o material que tem por ai eu perderia muito tempo, entao o melhor para resolver meu caso sao exemplos mesmo.
Se vc não quer "perder tempo" não utilize ASM, pois qualquer coisa que vc for fazer é demorado para implementar. Qualquer erro, por menor que seja, em ASM pode travar a máquina.
Pesquisando por ai olha oque eu consegui fazer....
antes:}


for x := 1 to length(dados) do begin
b := byte(dados[x]);
asm
mov dx,$17
mov al,b
out dx,al
end;
end;

//agora:

asm
mov dx,$17
mov al,dados // string contendo as informacoes
out dx,al
end;

{pronto, minha rotina tem 50x mais velocidade e funcionou com perfeicao...baixei uma apostila que sitava alguns exemplos e resolvi dar uma tentada e deu certo....
Bom um problema eu resolvi, faltam outros...hehehe
Quanto a problemas de travar, estou trabalhando em um sistema grande que opera em maquinas de todos os tipo, portanto tenho de montar rotinas complexas e rapidas, isso me obriga a ir muitas vezes buscar ajuda no ASM que tem me motrado muitas solucoes para meus problemas de performance.
O meu maior problema e que nao posso pedir ao cliente para trocar a maquina e sim eu tenho que me adaptar.
Bom, vom continuar estudando, se alguem tiver mais material me mande que eu agradeco.
Gostaria de agradecer tambem a todos os emails que foram enviados com este topico.}

Publicidade

Vote na dica




Quantidade de votos: 1 voto
Aceitação: 20%


Detalhes da dica

Categoria: Object pascal
Adicionada dia: 13/01/04
Por: Fabricio Giovanni Costa De Souza
Visualizada: 7666 vezes

Planeta Delphi - Tudo sobre programação Delphi Planeta Delphi - www.planetadelphi.com.br - Todos os direitos reservados | Copyright 2001-2009