Deutsch
Assembler Forum

Erledigt: Pixel setzen, welche Register sichern

 
Welche Register müssen hier gesichert werden.
Oder wird das von Xpia4 bzw XProfan übernommen das richtige Sichern von Registern?

mfg
KompilierenMarkierenSeparieren
 $MAKE CLE
 $H Windows.ph
Declare hwin&,x&,y&,f&,hdcwin&
Window 20,20-200,200
hWin& = Create(Window, %hWnd, Test, 250, 20, 650,500)
hDCWin& = ~GetWindowDC(hWin&)

If 0

    AsmStart pset

        Parameters hdcwin&,x&,y&,f&
        mov ecx,para1
        mov eax,para2
        mov ebx,para3
        mov edi,para4
        invoke SetPixel,ecx,eax,ebx,edi

    AsmEnd

EndIf

whileloop 0,100,1

    x&=&loop
    y&=&loop
    f&=$ff0000
    Call(GetXpiaProcAddress(XpiaModule&,pset),hdcwin&,x&,y&,f&)

endwhile

WaitInput
End
 
15.05.2009  
 




Frank
Abbing
Quasi jede API verändert die Register. Wenn du die Daten nach der API wieder benutzen willst, musst du sie vorher auf den Stack pushen und später wieder runternehmen. Oder Variablen verwenden.
Welche Register eine API benutzt, ist immer verschieden. Du kannst auch nie ganz sicher sein, dass ein Register nicht verändert wird. Das kann sich bei nächsten Betriebssystem schon geändert haben.
Das hier geht übrigens auch:
KompilierenMarkierenSeparieren
 
15.05.2009  
 



Jup,danke.

Was macht die Profan2Cpp-Lösung?

mfg
 
15.05.2009  
 




Sebastian
König
2peter Bierbach, Beitrag=52367, Zeitpunkt=15.05.2009

Was macht die Profan2Cpp-Lösung?


Frank hat mir vorhin erklärt, was sich bei XPIA geändert hat. Ich werde dann demnächst mein Plug-In daran anpassen. Kann aber etwas dauern, da ich zur Zeit sehr mit anderen Dingen beschäftigt bin...

MfG

Sebastian
 
Windows XP, XProfan/Profan² 4.5 bis 11
Profan2Cpp-Homepage:  [...] 
Alte Profan²-Seite:  [...] 
15.05.2009  
 



Jup, alles klar.

Die erstellten Dll von Xpia4 laufen mit dem Profan2Cpp wunderbar.

Habe jetzt mal 2 Exe erstellt mit XProfan.
Einmal mit Asmstart/Asmend und einmal mit der oben erstellten Dll.

Mit Asmstart/Asmend 10200 Zeiteinheiten und das gleiche mit der Dll 4550 Zeiteinheiten.
Die Profan2Cpp läuft zur Zeit nur mit der Xpia4-Dll und braucht 4100 Zeiteinheiten.

Mit Dll :
KompilierenMarkierenSeparieren
 $H Windows.ph
DEF createpen(3) ! asm_grafik1.dll,createpen
DEF lineto(3) ! asm_grafik1.dll,lineto
DEF movetoex(3) ! asm_grafik1.dll,movetoex
DEF pset(4) ! asm_grafik1.dll,pset
Declare hwin&,x&,y&,f&,hdcwin&,pstyle&,pwidth&,pcolor&,mypen&,test%
Window 20,20-200,200
hWin& = Create(Window, %hWnd, Test, 250, 20, 650,500)
hDCWin& = ~GetWindowDC(hWin&)
pstyle&=3
pwidth&=0
pcolor&=$ff0000
mypen&=createpen(pstyle&,pwidth&,pcolor&)
~SelectObject( hdcwin&, mypen& )
test%=&GetTickCount

whileloop 1,10000,1

    x&=200
    y&=200
    movetoex(hdcwin&,x&,y&)
    x&=400
    y&=40
    lineto(hdcwin&,x&,y&)

endwhile

Print Str$(Int(&GetTickCount-test%))
WaitInput
End

Ohne Dll:
KompilierenMarkierenSeparieren
 $MAKE CLEI
 $H Windows.ph
Declare hwin&,x&,y&,f&,hdcwin&,pstyle&,pwidth&,pcolor&,mypen&,test%
Window 20,20-200,200
hWin& = Create(Window, %hWnd, Test, 250, 20, 650,500)
hDCWin& = ~GetWindowDC(hWin&)

If 0

    AsmStart createpen

        Parameters pstyle&,pwidth&,pcolor&
        invoke CreatePen,para1,para2,para3

    AsmEnd(mypen&)

    AsmStart movetoex

        Parameters hdcwin&,x&,y&
        invoke MoveToEx,para1,para2,para3,0

    AsmEnd

    AsmStart pset

        Parameters hdcwin&,x&,y&,f&
        invoke SetPixel,para1,para2,para3,para4

    AsmEnd

    AsmStart lineto

        Parameters hdcwin&,x&,y&
        invoke LineTo,para1,para2,para3

    AsmEnd

EndIf

pstyle&=3
pwidth&=0
pcolor&=$ff0000
mypen&=Call(GetXpiaProcAddress(XpiaModule&,createpen),pstyle&,pwidth&,pcolor&)
~SelectObject( hdcwin&, mypen& )
test%=&GetTickCount

whileloop 1,10000,1

    x&=200
    y&=200
    Call(GetXpiaProcAddress(XpiaModule&,movetoex),hdcwin&,x&,y&)
    x&=400
    y&=40
    Call(GetXpiaProcAddress(XpiaModule&,lineto),hdcwin&,x&,y&)

endwhile

Print Str$(Int(&GetTickCount-test%))
WaitInput
End

mfg

2 kB
Hochgeladen:15.05.2009
Ladeanzahl188
Herunterladen
 
15.05.2009  
 




Sebastian
König
Ist das jetzt nur ein Beispiel oder warum kapselt du diese einfachen API-Aufrufe in DLL-Funktionen? Ich meine, ein einfaches

DEF SetPixel(3) !GDI32,SetPixel
usw.

ist doch sicher die effizienteste Lösung...

MfG

Sebastian
 
Windows XP, XProfan/Profan² 4.5 bis 11
Profan2Cpp-Homepage:  [...] 
Alte Profan²-Seite:  [...] 
15.05.2009  
 



ist doch sicher die effizienteste Lösung...

Wird vom Tool, welches bei Xpia4 mit dabei ist, so angefertigt für den Aufruf.

Ist das jetzt nur ein Beispiel oder warum kapselt du diese einfachen API-Aufrufe in DLL-Funktionen?

Die Routinen wurden mal mit invoke über Xpia4 aufgerufen. Ist ein Funktionstest.

mfg
 
15.05.2009  
 




Frank
Abbing

ist doch sicher die effizienteste Lösung...


Die effizienteste Lösung ist wohl, auch die Schleife in ASM zu programmieren.
 
16.05.2009  
 



Die effizienteste Lösung ist wohl, auch die Schleife in ASM zu programmieren.

Die Scheife selber ist mit Profan2Cpp schon ein Blitz, wo es ja jetzt wunderbar über dem Aufruf von Xpia4 läuft.

Ich wollte nur mal das wesentliche Testen.

mfg
 
16.05.2009  
 




Sebastian
König
2peter Bierbach, Beitrag=52377, Zeitpunkt=16.05.2009
Die effizienteste Lösung ist wohl, auch die Schleife in ASM zu programmieren.

Die Scheife selber ist mit Profan2Cpp schon ein Blitz, wo es ja jetzt wunderbar über dem Aufruf von Xpia4 läuft.

Ich wollte nur mal das wesentliche Testen.


Mir ging es jetzt nur darum, dass man einfache API-Funktionen auch direkt mit DEF bzw. External() verwenden kann - eine Kapselung in einen ASM-Block bringt nur zusätzlichen Overhead mit sich...

MfG

Sebastian
 
Windows XP, XProfan/Profan² 4.5 bis 11
Profan2Cpp-Homepage:  [...] 
Alte Profan²-Seite:  [...] 
16.05.2009  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

11.159 Betrachtungen

Unbenanntvor 0 min.
funkheld31.08.2023
p.specht14.06.2021
RudiB.15.01.2016
Georg Teles09.01.2016
Mehr...

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie