ดูตัวอย่างนี้ก่อน:
รหัส C สำหรับโปรแกรม 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;
}
รหัส ASM ที่เทียบเท่าสำหรับ 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
ดังที่คุณเห็นว่าการมอบหมายงานนั้นถูกแทนที่ด้วยคำสั่ง "mov" ในชุดประกอบตัวดำเนินการกำหนดค่านั้นหมายถึงการย้ายข้อมูลจากหน่วยความจำหนึ่งไปยังตำแหน่งหน่วยความจำอื่น การมอบหมายจะทำเพื่อสมาชิกโครงสร้างทันทีและจะไม่สามารถคัดลอกได้เมื่อคุณมีประเภทข้อมูลที่ซับซ้อนในโครงสร้าง COMPLEX นี่หมายความว่าคุณไม่สามารถมีอาร์เรย์ของตัวชี้ชี้ไปที่รายการ
อาเรย์ของตัวละครภายในโครงสร้างนั้นจะไม่สามารถใช้งานได้กับคอมไพเลอร์ส่วนใหญ่เนื่องจากการมอบหมายจะพยายามคัดลอกโดยไม่ต้องดูประเภทข้อมูลที่จะเป็นประเภทที่ซับซ้อน