Wie können C-Strukturen in der ARM-Assembly in einer wartbaren und lesbaren Weise wiederverwendet werden?

8

Beim Zugriff auf Strukturfelder habe ich manuell Offsets zu Adressen hinzugefügt, um Zugriff auf die Felder zu erhalten. Das ist ziemlich mühsam, schwer zu lesen und ein Maintenance-Kopfschmerz.

Gibt es eine bessere Möglichkeit, auf C-Struct-Felder zuzugreifen?

Zum Beispiel denke ich an eine Syntax wie diese:

Beispiel.h: typedef struct { int a; int b; } MyStruct;

Beispiel: ldr r1, [r2, #MyStruct.b] // r2 contains an address to a MyStruct

    
Martijn Thé 05.03.2014, 00:04
quelle

1 Antwort

5

Es gibt wirklich keinen sauberen und tragbaren Weg. Die meisten Projekte, die ich gesehen habe, haben einen Build-Schritt, der eine Header-Datei mit Struktur-Offsets generiert. Es geht ein bisschen so:

1) Erstellen Sie eine C-Datei, die Ihre Offsets definiert

%Vor%

2) Kompilieren Sie diese Datei mit dem Flag, um eine Assembly zu generieren (-S on Clang oder GCC). Dadurch wird eine Assemblydatei mit einer Reihe definierter Zeilen erstellt, z. B .:

%Vor%

3) Verwenden Sie einige Shell-Tricks, um diese in eine Header-Datei für Ihren Assembler-Code umzuwandeln.

%Vor%

Dies ergibt eine Datei, die so aussieht und in Ihre Assembly-Quellen eingefügt werden kann.

%Vor%

Sie können das dann direkt verwenden.

%Vor%     
Variable Length Coder 05.03.2014 02:21
quelle

Tags und Links