AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

[ASM] Set-Ausdruck modifizieren

Ein Thema von Neutral General · begonnen am 12. Jun 2010 · letzter Beitrag vom 13. Jun 2010
Antwort Antwort
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

AW: [ASM] Set-Ausdruck modifizieren

  Alt 12. Jun 2010, 15:17
Moin Michael,

was soll die Methode NumberProc denn eigentlich machen?
Damit parst der Assembler-Highlighter von Synedit Zahlen.

Erst zuende schreiben, dann auf "Antworten" klicken

Also habe da an der Bitmaske schon was getüftelt aber leider nicht erfolgreich.
Du mußt nicht nur die Bitmaske ändern, sondern so wie idefix2 schrieb auch das cmp al,47 entsprechend anpassen. Meiner Meinung nach sollte der Vergleich cmp al,50 sein um auch das 'x' zu erfassen.
Ja auf die 50 bin ich auch schon mal gekommen allerdings würden nach meinem Verständnis einige ungewollte Zeichen in das Set gelangen.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.123 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: [ASM] Set-Ausdruck modifizieren

  Alt 12. Jun 2010, 15:31
Moin Michael,

Damit parst der Assembler-Highlighter von Synedit Zahlen.
Wird der so mitgeliefert, oder ist das von Dir, denn ich sehe darin zwei Probleme:
1. Wenn FLine nicht auf ein ungültiges Zeichen endet, läuft die Methode in eine AV
2. Es werden auch ungültige Zeichenkombinationen als Zahl erkannt.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#3

AW: [ASM] Set-Ausdruck modifizieren

  Alt 12. Jun 2010, 18:16
Zitat:
1. Wenn FLine nicht auf ein ungültiges Zeichen endet, läuft die Methode in eine AV
2. Es werden auch ungültige Zeichenkombinationen als Zahl erkannt.
zu 1.: wird sich die Routine wohl auf ein "eol" Zeichen, egal wie es aussieht, am Zeilenende verlassen

zu 2. Wäre bei einem Syntax Highlighter zumindest nicht sehr tragisch, weil in der Praxis in einem Programm nur sehr selten Nicht-Zahlen, die allen Bedingungen entsprechen, vorkommen werden. Es könnte aber sein, dass im Programm danach noch zusätzliche Checks gemacht werden, um ungültige Strings auszuschliessen, dann könnte auch die Änderung dieser Routine u.U. nichts helfen.

Zitat:
Erst zuende schreiben, dann auf "Antworten" klicken
Tut mir leid, bin vorzeitig am Antworten Knopf angekommen. Aber die drei Änderungen, die ich Dir vorgeschlagen habe, hast Du anscheinend noch nicht ausprobiert, weil zumindest diese Routine müsste dann funktionieren.

Zitat:
Meiner Meinung nach sollte der Vergleich cmp al,50 sein um auch das 'x' zu erfassen.
der Wert von 'x' ist um 16, also um 0x10 grösser als der wert von 'h'. Der Wert 47 steht für das h, also müsste 0x10 dazu gezählt werden, damit die Werte bis inklusive x nicht schon beim Bereichstest rausfliegen. Muss also mindesten 0x57 sein - ich habe mich bei meinem 1. Post also um 1 verzählt - ein etwas grösserer Wert schadet aber nicht, weil alle Werte, die nicht schon beim Vergleich als zu gross herausfallen, noch einmal über die Maske überprüft werden.


edit: Ihr habt Recht, es genügt doch 0h50 - 0x47 entspricht nicht dem 'h', sondern dem letzten Zeichen, das im Set im gleichen byte wie das h untergebracht ist, also dem 'o'.

Geändert von idefix2 (12. Jun 2010 um 21:49 Uhr)
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.101 Beiträge
 
Delphi XE2 Professional
 
#4

AW: [ASM] Set-Ausdruck modifizieren

  Alt 12. Jun 2010, 22:47
Zitat von Neutral General;:
Ja auf die 50 bin ich auch schon mal gekommen allerdings würden nach meinem Verständnis einige ungewollte Zeichen in das Set gelangen.
Die werden dann durch bt [bitmaske],eax gefolgt von jb schleife ausgefiltert.

Optimal ist der OriginalCode nicht, weil die Zeichen ()*+,- und die Zeichen ijklmno nicht durch das cmp al,xx ausgefiltert werden, sondern erst durch das teure bt [475bf8],eax als nicht zum Set gehörend erkannt werden.

Besser wäre, add al,d2 nebst cmp al,3a.
Das würde Zeichen < '.' bzw. > 'h' ausfiltern.
Allerdings müßte auch die Bitmaske entsprechend angepaßt werden.
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#5

AW: [ASM] Set-Ausdruck modifizieren

  Alt 13. Jun 2010, 08:57
Zitat:
Besser wäre, add al,d2 nebst cmp al,3a.
Der Delphi Compiler arbeitet bei Sets nur mit ganzen Bytegrenzen, also mit Vielfachen von 8.
z.B. die Konstante [6..10] benötigt zwei bytes, also den Speicherbereich von [0..15], obwohl die Bits um weniger als 8 auseinander liegen und in einem Byte Platz hätten. Deshalb add al,d8 statt add al,d2.
Bei der Abfrage cmp al,47 bin ich selbst reingefallen und habe erst geglaubt, dass 47 dem grössten Buchstaben der Setkonstante entspricht, statt dessen entspricht 47 dem grössten Buchstaben, der in den Bytes Platz hätte, die für die Setkonstante benötigt werden.

Aber ich würde sagen, die "Kosten" für das "teure" bt [475bf8],eax fallen nicht wirklich ins Gewicht.

Geändert von idefix2 (13. Jun 2010 um 09:05 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 04:41 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