| |
|
|
| Frage: Wie sieht dann meine ASM-Routine aus, die ich zur Zeit mit Profan2ccp einbinde , wenn ich sie als Inline nutzen möchte für Borland 5.5 ?
So rufe ich diese auf : z&=Call(xpia_getprocaddressm(xpia_hmodule&,rgb_farbe),b#,c#,groesse&)
If 0
AsmStart rgb_farbe
Parameters b#,c#,groesse&
LOCAL r :BYTE
LOCAL g :BYTE
LOCAL b :BYTE
LOCAL gr :DWORD
LOCAL bb :DWORD
LOCAL cc :DWORD
mov eax,para3
mov gr,eax
mov eax,para2
mov cc,eax
mov eax,para1
mov bb,eax
mov ecx,0
.while ecx<=gr
mov ebx,para2
mov al,[ebx+ecx]
.if al>5
jmp weiter
.endif
mov ebx,para1
mov al,[ebx+ecx]
mov r,al
mov al,[ebx+ecx+1]
mov g,al
mov al,[ebx+ecx+2]
mov b,al
mov al,b
.if al>250
mov eax,255
.break
.endif
mov al,g
.if al>250
mov eax,255
.break
.endif
mov al,r
.if al>250
mov eax,255
.break
.endif
weiter:
add ecx,4
.endw
AsmEnd(z&)
endif
Danke.
mfg |
|
|
| |
|
|
|
Sebastian König | Hallo Peter,
ich habe die Frage mal in einen eigenen Beitrag verschoben.
Peter Bierbachh
Frage: Wie sieht dann meine ASM-Routine aus, die ich zur Zeit mit Profan2ccp einbinde , wenn ich sie als Inline nutzen möchte für Borland 5.5 ?
So rufe ich diese auf : z&=Call(xpia_getprocaddressm(xpia_hmodule&,rgb_farbe),b#,c#,groesse&) (...)
Der Rahmen wäre prinzipiell:
Allerdings glaube ich kaum, dass Du den Code so einfach komplett übernehmen kannst, denn Inline-Asm in C++ ist in der Regel für kurze Abschnitte, die direkt an der Stelle im Code, an der sie stehen, eingebunden werden, gedacht. Das Definieren von Funktionen, die Du dann von anderer Stelle mit Call() aufrufen kannst, geht ziemlich sicher nicht. Ohne es jetzt getestet zu haben vermute ich auch, dass Du nicht die volle Anzahl von Makros usw. zur Verfügung haben wirst.
Fazit: Du kannst mal mit der oben beschriebenen Schablone experimentieren, aber für größere ASM-Codes ist XPIA ziemlich sicher die bequemere Alternative.
MfG
Sebastian |
|
|
| |
|
|
|
| Das habe ich mir fast gedacht. XPIA bleibt die Lösung für längere Call-Funktionen.
mfg |
|
|
| |
|
|