Hallo,
Folgender Delphi-Code:
procedure TSynAsmSyn.NumberProc;
begin
inc(Run);
fTokenID := tkNumber;
while FLine[Run] in ['0'..'9', '.', 'a'..'f', 'h', 'A'..'F', 'H'] do
Inc(Run);
end;
Dazu wird folgender (von mir so gut wie möglich lesbar gemachter) Assemblercode generiert:
(Hier externe Version mit Highlighting:
*klick*)
; Label | Adresse | Opcode | Mnemonic
; Initialisierung
00475bac 55 push ebp
00475bad 8bec mov ebp,esp
00475baf 51 push ecx
00475bb0 8945 fc mov dword ptr ss:[ebp-4],eax
00475bb3 8b45 fc mov eax,dword ptr ss:[ebp-4]
; inc(Run)
00475bb6 ff80 70080000 inc dword ptr ds:[eax+870]
00475bbc 8b45 fc mov eax,dword ptr ss:[ebp-4]
; fTokenID := tkNumber;
00475bbf c680 80080000 mov byte ptr ds:[eax+880],4
00475bc6 eb 09 jmp short 00475bd1 ; ---> 1.Durchl
Schleife: 00475bc8 8b45 fc / mov eax,dword ptr ss:[ebp-4]
; inc(Run)
00475bcb ff80 70080000 | inc dword ptr ds:[eax+870]
; al := FLine[Run]
1.Durchl: 00475bd1 8b45 fc | mov eax,dword ptr ss:[ebp-4]
00475bd4 8b40 68 | mov eax,dword ptr ds:[eax+68]
00475bd7 8b55 fc | mov edx,dword ptr ss:[ebp-4]
00475bda 8b92 70080000 | mov edx,dword ptr ds:[edx+870]
00475be0 8a0410 | mov al,byte ptr ds:[eax+edx]
; al in ['0'..'9', '.', 'a'..'f', 'h', 'A'..'F', 'H'] ?
00475be3 04 d8 | add al,0d8
00475be5 3c 47 | cmp al,47
00475be7 77 0a | ja short 00475bf3 ; ---> Schl_end
00475be9 83e0 7f | and eax,7f
00475bec 0fa305 f85b470> | bt dword ptr ds:[475bf8],eax ; **** Bitmaske
Schl_end: 00475bf3 72 d3 \ jb short 00475bc8 ; ---> Schleife
; Finalisierung
00475bf5 59 pop ecx
00475bf6 5d pop ebp
00475bf7 c3 retn
; Daten
Bitmaske: 00475bf8 40ff037e dd 7e03ff40
00475bfc 01 db 01
00475bfd 00 db 00
00475bfe 00 db 00
00475bff 7e db 7e
00475c00 01 db 01
00475c01 00 db 00
00475c02 00 db 00
00475c03 00 db 00
Das ist der Codes von dem
SEG-Editor, der mir sehr gefällt, aber dessen (auf TSynEdit basierendes) Syntaxhighlighting gefällt mir leider nicht so, weswegen ich die exe gerade (bisher sehr erfolgreich) meinen Wünschen anpasse.
Mein Problem ist dass er keine Hexzahlen im Format 0xABCDEF erkennt, da er das "x" nicht als Bestandteil einer Zahl ansieht.
Ziel ist es jetzt den Assemblercode so umzugestalten (die Dateigröße darf natürlich nicht wachsen!), dass auch "x"-Zeichen akzeptiert werden.
Der Assemblercode soll dann äquivalent sein zu einer der folgenden Delphi-Codes:
A)
procedure TSynAsmSyn.NumberProc;
begin
inc(Run);
fTokenID := tkNumber;
while FLine[Run] in ['0'..'9', '.', 'a'..'f', 'h', 'A'..'F', 'H', 'x', 'X'] do
Inc(Run);
end;
B)
// auf das "H" kann ich persönlich verzichten
procedure TSynAsmSyn.NumberProc;
begin
inc(Run);
fTokenID := tkNumber;
while FLine[Run] in ['0'..'9', '.', 'a'..'f', 'x', 'A'..'F', 'X'] do
Inc(Run);
end;
Würde mich freuen wenn mir da jemand helfen könnte
Lg
Cjreek