![]() |
Pascal code to asm
Ich habe folgende Funktion in pascal:
Delphi-Quellcode:
Ich kann kein asm :(. Wenn jemand Zeit finden würde, diese Funktion nach asm zu übersetzen, wäre ich dankbar.
function func( PPS, BPP, A: Longint): Longint;
begin Dec(A); Result := ((PPS * BPP) + A) and not A; Result := Result div 8; end; Ich selber mag dieser Art der Fragestellung nicht, und ich verstehe es, wenn sorag diesen Thread geschlossen wäre, aber ich bin im Not. Danke. |
Re: Pascal code to asm
Du musst das garnicht übersetzen, lass es doch Delphi für dich machen ;) Einfach nen Breakpoint auf das begin setzen, F9, wenns am Breakpoint angekommen ist Strg+Alt+C und das was dann da steht abschreiben :)
Edit: ohne es zu testen würd ich tippen das es mit
Delphi-Quellcode:
funktionieren sollte...
function func( PPS, BPP, A: Longint): Longint;
asm sub ecx, 1 mul edx add eax, acx not ecx and eax, ecx sar eax, 3 end; |
Re: Pascal code to asm
die Parameter sollten doch so übergeben werden, oder?
EAX = PPS ECX = BBP EDX = A dann muss ganz am anfang von Dax code noch ein
Code:
rein und es sollte passen. (und noch aus acx ecx machen ;) )
xchg edx, ecx
edit: ich hab mir gerade mal den ASM-Code angeschaut, den der Delphi-Compiler daraus macht. Wieso macht der denn da so sachen wiw z.b.
Code:
statt einfach
Sub ecx, 1
Code:
:gruebel:
dec ecx
|
Re: Pascal code to asm
Wars nicht EAX, EDX, ECX, Stack? :gruebel:
@edit: ka :lol: |
Re: Pascal code to asm
Zitat:
|
Re: Pascal code to asm
Code:
stimmt auch nicht, da es sich hier um 'nen Integer und keinen LongWord/Cardinal handelt :zwinker:
shr eax, 3
|
Re: Pascal code to asm
Oh danke, hab doch echt Longword gelesen^^ Wurde in ein SAR verwandelt :)
|
Re: Pascal code to asm
[quote="BlackJack"]
edit: ich hab mir gerade mal den ASM-Code angeschaut, den der Delphi-Compiler daraus macht. Wieso macht der denn da so sachen wiw z.b.
Code:
statt einfach
Sub ecx, 1
Code:
:gruebel
dec ecx
Weil SUB ECX,1 schneller ist. Aus Intels Optimization Guidelines: Avoid instructions that unnecessarily introduce dependence-related stalls: inc and dec instructions, partial register operations (8/16-bit operands). |
Re: Pascal code to asm
Zitat:
@Amateurprofi: interessant, wusste ich noch gar nicht. aber was sind "dependence-related stalls" ? |
Re: Pascal code to asm
@BlackJack: IMUL ist, soweit ich weiß, signed multiplication
@Amateurprofi: muss ich gleich mal testen :) edit: sub ist wirklich schneller :shock: |
Re: Pascal code to asm
Zitat:
|
Re: Pascal code to asm
Zu MUL / IMUL: wenn einen bei einer 32x32-Bit-Multiplikation sowieso nur die unteren 32 Bits des Ergebnisses interessieren, dann ist es egal ob man MUL oder IMUL nimmt. Darum gibt's die Multiplikationsinstruktionen mit einfachem Ergebnis (z.B. IMUL EAX, EBX, 17) auch nur als IMUL.
Könnt ihr ja selbst mal ausprobieren. Denkt aber dabei daran, dass z.B. $FFFFFFF9 sowohl -7 (signed) als auch 4294967289 (unsigned) ist. |
Re: Pascal code to asm
Zitat:
Ja, da war ich auch sehr überrascht. Aber wenn ich Intels Ergüsse richtig interpretiere, dann ist das auch nicht bei allen CPU's so. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:34 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 by Thomas Breitkreuz