Primo sguardo a questo esempio:
Di seguito è riportato il codice C per un semplice programma C.
struct Foo {
char a;
int b;
double c;
} foo1,foo2;
void foo_assign(void)
{
foo1 = foo2;
}
int main(/*char *argv[],int argc*/)
{
foo_assign();
return 0;
}
Il codice ASM equivalente per foo_assign () è
00401050 <_foo_assign>:
401050: 55 push %ebp
401051: 89 e5 mov %esp,%ebp
401053: a1 20 20 40 00 mov 0x402020,%eax
401058: a3 30 20 40 00 mov %eax,0x402030
40105d: a1 24 20 40 00 mov 0x402024,%eax
401062: a3 34 20 40 00 mov %eax,0x402034
401067: a1 28 20 40 00 mov 0x402028,%eax
40106c: a3 38 20 40 00 mov %eax,0x402038
401071: a1 2c 20 40 00 mov 0x40202c,%eax
401076: a3 3c 20 40 00 mov %eax,0x40203c
40107b: 5d pop %ebp
40107c: c3 ret
Come puoi vedere che un compito è semplicemente sostituito da un'istruzione "mov" in assembly, l'operatore di compito significa semplicemente spostare i dati da una posizione di memoria a un'altra posizione di memoria. L'assegnazione lo farà solo per i membri immediati di una struttura e non riuscirà a copiare quando si hanno tipi di dati complessi in una struttura. In questo caso, COMPLESSO significa che non è possibile disporre di array di puntatori, che puntano a elenchi.
Una matrice di caratteri all'interno di una struttura non funzionerà da sola sulla maggior parte dei compilatori, questo perché l'assegnazione tenterà semplicemente di copiare senza nemmeno guardare il tipo di dati per essere di tipo complesso.