![]() |
Assembler und Arrays
Ich habe herausgefunden wie ich an Elemente eines Arrays komme:
Code:
wobei jetzt a ein nullbasiertes Integer-Array sei und in eax mein Index.
mov ecx, dword ptr a + eax*4
Wie komme ich jetzt an die Adresse eines Array-Elementes ran um dorthin schreiben zu können? |
Re: Assembler und Arrays
Nimm ganz einfach lea statt mov (LEA = Load Effective Address).
|
Re: Assembler und Arrays
dynamisches Array:
Delphi-Quellcode:
statisches Array:
// 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]
Delphi-Quellcode:
// auslesen
mov ecx, [&a + eax * 4] // speichern mov [&a + eax * 4], ecx // Pointer auf Element lea ecx, [&a + eax * 4] |
Re: Assembler und Arrays
Alles klar. Danke! :)
|
Re: Assembler und Arrays
statt
Delphi-Quellcode:
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)
// Pointer auf Element
mov edx, [&a] // dynamisch lea ecx, [edx + eax * 4] lea ecx, [&a + eax * 4] // statisch
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