AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Assemler Routine ummodeln - wer kann bitte helfen
Thema durchsuchen
Ansicht
Themen-Optionen

Assemler Routine ummodeln - wer kann bitte helfen

Ein Thema von turboPASCAL · begonnen am 7. Okt 2007 · letzter Beitrag vom 7. Okt 2007
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von OldGrumpy
OldGrumpy

Registriert seit: 28. Sep 2006
Ort: Sandhausen
941 Beiträge
 
Delphi 2006 Professional
 
#11

Re: Assemler Routine ummodeln - wer kann bitte helfen

  Alt 7. Okt 2007, 17:30
Zitat von turboPASCAL:
Hi,

ich habe volgende Procedure:

Delphi-Quellcode:
{------------------------------------------------------------------}
{  Swap bitmap format from BGR to RGB                              }
{------------------------------------------------------------------}
[...]
  add ebx,3
[...]
und möchte sie wiefolgt verändern:
[...]
Das soll ein Array umformen in etwa so:

Code:
BGRA, BGRA, BGRA...
// nach:
RGBA, RGBA, RGBA...
[...]
Abgesehen von allen anderen Kommentaren: Deine ursprüngliche Routine setzte 24 Bit pro Pixel (je 8 für R,G,B) voraus, Du hättest gerne 32 pro Pixel. Alles was dazu notwendig ist, ist die Schleife statt in 3er-Schritten in 4er-Schritten laufen zu lassen. Statt add ebx,3 also einfach add ebx,4 und fertig. Nichtsdestotrotz sind alle restlichen Warnungen bzgl. EBX=self etc. zu beherzigen
"Tja ja, das Ausrufezeichen... Der virtuelle Spoiler des 21. Jahrhunderts, der Breitreifen für die Datenautobahn, die k3wle Sonnenbrille fürs Usenet. " (Henning Richter)
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#12

Re: Assemler Routine ummodeln - wer kann bitte helfen

  Alt 7. Okt 2007, 17:55
@sirius, das tut das was es soll.

Es währe noch nett wen mir das jemand kommentiert bis auf die mov ...,... da seh ich durch.
Aber sonst

@OldGrumpy,
Zitat:
Deine ursprüngliche Routine setzte 24 Bit pro Pixel [...]
Alles was dazu notwendig ist, ist die Schleife statt in 3er-Schritten in 4er-Schritten laufen zu lassen
Ja, wenn man weis wie ...
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#13

Re: Assemler Routine ummodeln - wer kann bitte helfen

  Alt 7. Okt 2007, 18:04
Delphi-Quellcode:
procedure SwapRGB(data : Pointer; Size : Integer; Alpha:byte);
asm
  push ebx //ebx sichern
  test edx,edx //Wenn Größe=0, Abbruch
  jz @@end

@@loop :
  mov bl,[eax+0] //R holen
  mov bh,[eax+2] //B holen
  mov [eax+2],bl //und tauschen
  mov [eax+0],bh
  mov [eax+3],cl //den Alpha-Wert speichern

  add eax, 4 //die nächsten vier Byte
  sub edx, 4 //Size:=Size-4
  jnle @@loop //Müssen wir nochmal?
@@end:
  pop ebx //ebx zurückholen
end;
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#14

Re: Assemler Routine ummodeln - wer kann bitte helfen

  Alt 7. Okt 2007, 18:48
Ja, danke.

Wo kann man so ein Zeugs nachlesen ?
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#15

Re: Assemler Routine ummodeln - wer kann bitte helfen

  Alt 7. Okt 2007, 19:02
Wahrscheinlich in Büchern

Was willst du denn nachlesen? Also ASM in Delphi ist recht einfach. Die Anzahl der Befehle in ASM sind ja recht übersichtlich (und gibts hier und da im Internet oder im Buch).
Um alle anderen Sachen (Stack einrichten etc.) muss man sich ja unter Delphi nicht mehr kümmern. Das zum Thema ASM benutzen.
(ich habe übrigens nur im Internet nachgelesen und besitze kein Buch)

Jetzt zum besonderen von ASM unter Delphi:
du musst dich eben ein wenig mit dem Compiler arrangieren (z.B. das Wissen wie delphi die Parameter übergibt etc.). Dazu hat balu der Bär mal ein TUT geschrieben.
Edit: Das tut ist hier
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#16

Re: Assemler Routine ummodeln - wer kann bitte helfen

  Alt 7. Okt 2007, 19:20
Ich habe mir das "Zeugs" im Frühjahr angeeignet, ebenfalls nur aus dem Internet. Ungemein geholfen hat es mir, dass beim kostenlsoen Delphi 2005 die Quellcodes der Standardunits nicht dabei sind. Wenn man da wissen will, wie etwas gemacht wird, hilft nur noch eine gute Assembler-Kenntnis. Ich habe da wirklich Stunden daran gesessen, herauszufinden, wie der Aufruf von dynamischen Methoden erfolgt - und nebenbei noch herauszuarbeiten, wie die DMT denn aussieht.
Kurz gesagt gilt auch hier: Übung macht den Meister.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 16:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz