Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Microsoft-spezifisch
Ein __asm Block kann keine C- oder C++-spezifischen Operatoren verwenden, z. B. den << Operator. Operatoren, die von C und MASM, z. B. dem *-Operator, gemeinsam genutzt werden, werden jedoch als Assemblysprachenoperatoren interpretiert. Außerhalb eines __asm Blocks werden z. B. eckige Klammern ([ ]) als eingeschlossene Arrayunterstellungen interpretiert, die C automatisch auf die Größe eines Elements im Array skaliert. Innerhalb eines Blocks werden sie als MASM-Indexoperator angesehen, der einen nicht skalierten Byte-Offset von einem Beliebigen Datenobjekt oder einer __asm Beschriftung (nicht nur ein Array) liefert. Der folgende Code veranschaulicht den Unterschied:
int array[10];
__asm mov array[6], bx ; Store BX at array+6 (not scaled)
array[6] = 0; /* Store 0 at array+24 (scaled) */
Der erste Verweis, auf array den verwiesen wird, ist nicht skaliert, aber die zweite ist. Beachten Sie, dass Sie den TYPE-Operator verwenden können, um die Skalierung basierend auf einer Konstante zu erzielen. Beispielsweise sind die folgenden Anweisungen äquivalent:
__asm mov array[6 * TYPE int], 0 ; Store 0 at array + 24
array[6] = 0; /* Store 0 at array + 24 */
Ende Microsoft-spezifisch