sábado, 6 de junho de 2009

Como usar assembler com delphi?

{É fácil. 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 você 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
... (código em Object Pascal) ...
asm
... (código em Assembler) ...
end;
... (código em Object Pascal) ...
end; // fim da rotina {Eu não pretendo me aprofundar 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, você terá que fazer isto na mão.

A forma mais simples de definir um string é o PChar do delphi.

O PChar é uma seqüência de caracteres terminado com o caractere nulo (#0 ).

Para trabalhar com matriz, você terá que fazer o endereçamento na mão.}

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 informações
out dx,al
end; //pronto, a rotina tem 50x mais velocidade e funciona com perfeição.

Nenhum comentário:

Postar um comentário