Ich vermite mal, für main wurde ein Frame angelegt. Y ist der Frame-Pointer, über den auf lokale Variablen zugegriffen wird.

Die Variablen im Frame liegen dann bei Y+1, Y+2, Y+3, ... etc, zumindest dann, wenn es Bytes sind. Sind die Typen größer, werden auch die Offsets größer, wobei das untere Byte des Frames immer bei Y+1 liegt. Steht dort ein int, dann fängt die nächste Variable bei Y+3 an, etc.

Der Code ist doch in Ordnung. Zu Bedenken ist nur, daß CopyX ein char ist (1 Byte), MyX.X jedoch ein int (2 Bytes). Daher wird von MyX.X nur das untere Byte gespeichert.

Wenn die Variablen nicht volatile sind und du Zuweisungen machst, die zugewiesenen Werte aber nicht benutzt werden, dann wird das wegoptimiert und es gibt keinen Code, der der den C-Anweisungen entspricht.

Es genügt übrigens volatile einmal hinzuschreiben, bei dir steht's dreimal! (Bei der Strukturkomponente, im der Typdefinition und bei der Variablendefinition...)