Entwickler-Ecke
Algorithmen, Optimierung und Assembler - Asm Speicherzuweisung
patrick - Fr 10.12.04 10:35
Titel: Asm Speicherzuweisung
nachdem meine prüfung jetzt vorbei ist, bin ich wieder fleißig am asm programmieren.
allerdings habe ich noch eine sehr grundlegende frage:
kann ich werte einfach so in einen beliebigen speicherbereich abspeichern oder muss ich zuvor einen gewissen speicherbereich in windows reservieren (wovon ich ausgehe).
wenn ja, wie sag ich windows wo mein speicherbereich liegt?
BenBE - Fr 10.12.04 14:42
GetMem \ FreeMem. Diese brauchst du einfach in deiner Prozedur aufrufen und erhälst dann in EAX eine Adresse für diesen Speicherblock.
patrick - Sa 11.12.04 13:11
achso, danke.
und wie groß ist so ein speicherblock?
tommie-lie - Sa 11.12.04 13:18
Deklaration: function _GetMem(Size: Integer): Pointer;;-)
patrick - Sa 11.12.04 15:12
plofff :autsch: :D
zu dem selben thema noch ne erweiterte frage:
wie ist das mit vollständig in asm geschriebenen programmen?
da hat man ja diese nützliche funktion nicht.
I.MacLeod - Sa 11.12.04 15:16
Hi,
Quelltext
1: 2: 3: 4: 5:
| push PAGE_READWRITE push MEM_COMMIT push Groesse_in_bytes push 0 call VirtualAlloc |
=> EAX: Adresse
Quelltext
1: 2: 3: 4:
| push MEM_DECOMMIT push Groesse_in_bytes push Adresse call VirtualFree |
Ohne Gewähr :P
tommie-lie - Sa 11.12.04 15:24
Nuja, VirtualAlloc ist nichtmal nötig, die System.pas ist ja so oder so eingebunden, GetMem steht also so oder so zur Verfügung (vorausgesetzt du benutzt den Delphi-Inline-Assembler ;-)). Daher kannst du GetMem wie jede andere stdcall-Funktion auch aufrufen: Größe in EAX, Call, Pointer befindet sich anschließend in EAX ;-)
Nur ob der Funktionsname im Assembler GetMem oder _GetMem heißt, weiß ich nicht, denn ich weiß nicht, wie CompilerMagic in Assembler-Blöcken eingreift. Das kann man aber einfach mal ausprobieren ;-)
patrick - Sa 11.12.04 21:42
@tommie-lie: nein, ich wollte eigendlich auch mal entfernt von delphi etwas asm programmieren 8)
tommie-lie - Sa 11.12.04 21:52
Tja, dann müsstest du dir Header für die Windows-Funktionen besorgen, die dein Assembler versteht (Win32-Assembler), dann gibt's VirtualAlloc und VirtualAllocEx für sowas, und wie das geht, hat I.MacLeod schon geschrieben.
patrick - So 12.12.04 23:33
danke für eure antworten.
das beantwortet weitestgehend meine fragen. :P
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!