HaWe, das mag sein.

Es ist eigentlich ganz einfach. ab 386er/486er aufwärts:

mov edx, offset meineVariable
mov bp, SegmentVonVariable

verschiedene Varianten für den Zugriff:

mov ax,bp:[edx]
mov ax,bp:[edx+1]
mov ax,bp:[edx+bx]

Entscheidend ist, ob ein Zugriff aus dem aktuellen Segment auf ein anderes überhaupt möglich ist. Das wird im Protected Mode via Descriptoren definiert und der CPU beim Erstellen eines neuen Segments (Programm oder Daten oder Stack) mitgegeben. Stimmen die Privilegien von Aufrufer und Ziel nicht überein, führt das zu einer Ausnahme.

//-----------------------------------------------------------

Wie das jetzt hier bei den Kontrollern so ist, weiß ich nicht, so weit habe ich mich dafür noch nicht interessiert. Wie oben in dem Beispiel zu sehen ist, benötigt man die Adresse der Variablen, über indirekte Adressierung kann man dann darauf zugreifen. So kenne ich das. Wenn man in C/C++ eine indirekte Adressierung nur über Pointer-Variablen hinbekommt (bspw: *p), dann ist das so. Wenn Du den Offset der externen Variablen anders dort rein bekommst, auch gut. Aber: die entscheidenden Hinweise sind: "Zeiger" und "&". Ob das ein oder andere für die Lösung des Problems relevant ist, musst Du dann schauen.

MfG