AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Findfirst/Findnext in Assembler

Ein Thema von Dannyboy · begonnen am 15. Sep 2003 · letzter Beitrag vom 16. Sep 2003
 
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#25

Re: Findfirst/Findnext in Assembler

  Alt 16. Sep 2003, 11:33
Aus Classes.pas

Delphi-Quellcode:
procedure BinToHex(Buffer, Text: PChar; BufSize: Integer); assembler;
const
  Convert: array[0..15] of Char = '0123456789ABCDEF';
var
  I: Integer;
begin
  for I := 0 to BufSize - 1 do
  begin
    Text[0] := Convert[Byte(Buffer[I]) shr 4];
    Text[1] := Convert[Byte(Buffer[I]) and $F];
    Inc(Text, 2);
  end;
end;
{asm
        PUSH    ESI
        PUSH    EDI
        MOV    ESI,EAX
        MOV    EDI,EDX
        MOV    EDX,0
        JMP    @@1
@@0:    DB      '0123456789ABCDEF'
@@1:    LODSB
        MOV    DL,AL
        AND    DL,0FH
        MOV    AH,@@0.Byte[EDX]
        MOV    DL,AL
        SHR    DL,4
        MOV    AL,@@0.Byte[EDX]
        STOSW
        DEC    ECX
        JNE    @@1
        POP    EDI
        POP    ESI
end;}


function HexToBin(Text, Buffer: PChar; BufSize: Integer): Integer; assembler;
const
  Convert: array['0'..'f'] of SmallInt =
    ( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,-1,-1,-1,-1,-1,-1,
     -1,10,11,12,13,14,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,
     -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
     -1,10,11,12,13,14,15);
var
  I: Integer;
begin
  I := BufSize;
  while I > 0 do
  begin
    if not (Text[0] in ['0'..'f']) or not (Text[1] in ['0'..'f']) then Break;
    Buffer[0] := Char((Convert[Text[0]] shl 4) + Convert[Text[1]]);
    Inc(Buffer);
    Inc(Text, 2);
    Dec(I);
  end;
  Result := BufSize - I;
end;

{asm
        PUSH    ESI
        PUSH    EDI
        PUSH    EBX
        MOV    ESI,EAX
        MOV    EDI,EDX
        MOV    EBX,EDX
        MOV    EDX,0
        JMP    @@1
@@0:    DB      0, 1, 2, 3, 4, 5, 6, 7, 8, 9,-1,-1,-1,-1,-1,-1
        DB      -1,10,11,12,13,14,15,-1,-1,-1,-1,-1,-1,-1,-1,-1
        DB      -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
        DB      -1,10,11,12,13,14,15
@@1:    LODSW
        CMP    AL,'0'
        JB      @@2
        CMP    AL,'f'
        JA      @@2
        MOV    DL,AL
        MOV    AL,@@0.Byte[EDX-'0']
        CMP    AL,-1
        JE      @@2
        SHL    AL,4
        CMP    AH,'0'
        JB      @@2
        CMP    AH,'f'
        JA      @@2
        MOV    DL,AH
        MOV    AH,@@0.Byte[EDX-'0']
        CMP    AH,-1
        JE      @@2
        OR      AL,AH
        STOSB
        DEC    ECX
        JNE    @@1
@@2:    MOV    EAX,EDI
        SUB    EAX,EBX
        POP    EBX
        POP    EDI
        POP    ESI
end;}
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz