Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Assembler und Arrays (https://www.delphipraxis.net/57361-assembler-und-arrays.html)

Mystic 19. Nov 2005 21:52


Assembler und Arrays
 
Ich habe herausgefunden wie ich an Elemente eines Arrays komme:

Code:
mov ecx, dword ptr a + eax*4
wobei jetzt a ein nullbasiertes Integer-Array sei und in eax mein Index.

Wie komme ich jetzt an die Adresse eines Array-Elementes ran um dorthin schreiben zu können?

Flocke 19. Nov 2005 22:35

Re: Assembler und Arrays
 
Nimm ganz einfach lea statt mov (LEA = Load Effective Address).

himitsu 19. Nov 2005 23:48

Re: Assembler und Arrays
 
dynamisches Array:
Delphi-Quellcode:
// eax = Index
// a  = Array
// ecx = ausgelesener/zu speicherner Wert, oder Pointer auf's Element

// auslesen
mov edx, [&a]
mov ecx, [edx + eax * 4]

// speichern
mov edx, [&a]
mov [edx + eax * 4], ecx

// Pointer auf Element
mov edx, [&a]
lea ecx, [edx + eax * 4]
statisches Array:
Delphi-Quellcode:
// auslesen
mov ecx, [&a + eax * 4]

// speichern
mov [&a + eax * 4], ecx

// Pointer auf Element
lea ecx, [&a + eax * 4]

Mystic 20. Nov 2005 00:42

Re: Assembler und Arrays
 
Alles klar. Danke! :)

himitsu 20. Nov 2005 01:30

Re: Assembler und Arrays
 
statt
Delphi-Quellcode:
// Pointer auf Element
mov edx, [&a]             // dynamisch
lea ecx, [edx + eax * 4]

lea ecx, [&a + eax * 4]   // statisch
könnte man es natürlich auch selber machen (wobei hier der Pointer nicht in ecx, sondern in eax landet - es geht auch anders, aber so isses einfacher)

Delphi-Quellcode:
mov edx, [&a]    // dynamisch
imul eax, eax, 4
add eax, [edx]

imul eax, eax, 4  // statisch
add eax, [&a]

// optimiert

mov edx, [&a]    // dynamisch
shl eax, 2
add eax, [edx]

shl eax, 2        // statisch
add eax, [&a]


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:17 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