Statische/Lokale Array's
-
Hi
Weis jemand wie Statische und Lokale Array's in Assembler erstellt werden wie es in C ist?
-
Das ist von Assembler zu Assembler verschieden. Du musst uns schon sagen, welchen Assembler du benutzt.
Lokale Arrays werden genauso erstellt wie lokale Variablen, nämlich mit "sub esp, iBytes" am anfang der Funktion.Alles was du mit dd, db, o.ä. definierst ist doch automatisch statisch im Sinne von C.
-
Ich benutze Borland Turbo Assembler
Wie werden Statische und Lokale Variablen und Array's in Assembler definiert wie in C:
int main(void)
{
unsigned char ucVariable; // Lokal
unsigned char ucArray[255]; // Lokalstatic unsigned char sucVariable; // Statisch
static unsigned char sucArray[255]; // Statisch
}
-
Ich glaube ich ahne worauf du hinaus willst.
Lokale Variablen werden einfach auf dem Stack angelegt, dass heißt deine main würde am Anfang
sub esp, 256
stehen, damit auf dem Stack genug platz für dienen lokalen Variablen geschaffen wird, im zweiten Fall würde wohl im Datensegment etwas wie
main_sucVariable: db ?
main_sucArray: times 255 db ?wobei die Bezeichner halt solche bezeichner bekommen, dass sie nicht mit anderen Variablen zusammenstoßen. Statische Variablen sind ja nichts anderes als globale Variablen, and ie nicht jeder ran darf, und daurm kümmert sich denke ich mal der Compiler
-
Das habe ich doch auch schon gesagt.
-
Wie werden dann nicht statische Variablen in TASM geschrieben wie in C:
unsigned char ucVariable;
-
Original erstellt von <Bartman>:
**Wie werden dann nicht statische Variablen in TASM geschrieben wie in C:unsigned char ucVariable;**
nicht statische = lokale (in funktionen), werden wie shcon oben beschrieben aufm stack angelegt. Der compiler nimmt die größe aller lokalen Variablen zusammen und macht dann entsprechend platz aufm stack per
sub esp, bytezahlwenn die variable da oben z.B. deine einzige ist
sub esp, 1Wenn du nicht statische, globale meinst, die werden wie funktionsstatische angelegt
-
Das geht nicht so einfach. Diese lokalen Variablen werden auf dem Stack abgelegt, d.h. Du musst sie in deinem code generieren... etwa so:
... mov ebp,esp sub esp,00000004h ;2 2Byte grosse "lokale Variablen" auf dem Stack "anlegen" mov [word ptr ss:ebp],1234h ;so wird in die 1. Variable geschrieben mov [word ptr ss:ebp-02h],5678h ;und so in die 2. ... mov esp,ebp ;Variablen wieder "loeschen"... ...
-
Wie oft denn noch?
-
*lol* Asm-Programmierung ist nunmal schwierig ;):D