本帖最后由 CC2530 于 2011-5-10 11:05 编辑
c++ 我也来试试:
测试代码改成:- typedef struct SA
- {
- char x;
- } A;
- A a1, a2;
- void test1 (void)
- {
- a1 = a2;
- }
- void test2 (void)
- {
- A a1, a2;
- a1 = a2;
- }
C++Builder 2009- File1.cpp.23: void test1 (void)
- 00401168 55 push ebp
- 00401169 8BEC mov ebp,esp
- File1.cpp.25: a1 = a2;
- 0040116B A075214000 mov al,[$00402175]
- 00401170 A274214000 mov [$00402174],al
- File1.cpp.26: }
- 00401175 5D pop ebp
- 00401176 C3 ret
- 00401177 90 nop
- File1.cpp.28: void test2 (void)
- 00401178 55 push ebp
- 00401179 8BEC mov ebp,esp
- 0040117B 51 push ecx
- File1.cpp.31: a1 = a2;
- 0040117C 8A45FE mov al,[ebp-$02]
- 0040117F 8845FF mov [ebp-$01],al
- File1.cpp.32: }
- 00401182 59 pop ecx
- 00401183 5D pop ebp
- 00401184 C3 ret
VC 2008-
- void test1 (void)
- {
- 004113B0 push ebp
- 004113B1 mov ebp,esp
- 004113B3 sub esp,0C0h
- 004113B9 push ebx
- 004113BA push esi
- 004113BB push edi
- 004113BC lea edi,[ebp-0C0h]
- 004113C2 mov ecx,30h
- 004113C7 mov eax,0CCCCCCCCh
- 004113CC rep stos dword ptr es:[edi]
- a1 = a2;
- 004113CE mov al,byte ptr [a2 (417140h)]
- 004113D3 mov byte ptr [a1 (417141h)],al
- }
- 004113D8 pop edi
- 004113D9 pop esi
- 004113DA pop ebx
- 004113DB mov esp,ebp
- 004113DD pop ebp
- 004113DE ret
- void test2 (void)
- {
- 004113F0 push ebp
- 004113F1 mov ebp,esp
- 004113F3 sub esp,0D8h
- 004113F9 push ebx
- 004113FA push esi
- 004113FB push edi
- 004113FC lea edi,[ebp-0D8h]
- 00411402 mov ecx,36h
- 00411407 mov eax,0CCCCCCCCh
- 0041140C rep stos dword ptr es:[edi]
- A a1, a2;
- a1 = a2;
- 0041140E mov al,byte ptr [a2]
- 00411411 mov byte ptr [a1],al
- }
- 00411414 push edx
- 00411415 mov ecx,ebp
- 00411417 push eax
- 00411418 lea edx,[ (41142Ch)]
- 0041141E call @ILT+140(@_RTC_CheckStackVars@8) (411091h)
- 00411423 pop eax
- 00411424 pop edx
- 00411425 pop edi
- 00411426 pop esi
- 00411427 pop ebx
- 00411428 mov esp,ebp
- 0041142A pop ebp
- 0041142B ret
IAR AVR 5.51 C++-
- RSEG CODE:CODE:NOROOT(1)
- // 13 void test1 (void)
- ??test1:
- // 14
- // 15 {
- // 16
- // 17 a1 = a2;
- LDS R16, (a1 + 1)
- STS a1, R16
- // 18
- // 19 }
- RET
- // 20
- // 21
- // 22
- RSEG CODE:CODE:NOROOT(1)
- // 23 void test2 (void)
- ??test2:
- // 24
- // 25 {
- // 26
- // 27 A a1, a2;
- // 28
- // 29 a1 = a2;
- // 30
- // 31 }
- RET
IAR ARM 5.41 C++-
- SECTION `.text`:CODE:NOROOT(1)
- THUMB
- // 15 void test1 (void)
- // 16
- // 17 {
- // 18
- // 19 a1 = a2;
- _Z5test1v:
- LDR.N R0,??DataTable0 ;; a1
- LDR R1,[R0, #+4]
- STR R1,[R0, #+0]
- // 20
- // 21 }
- BX LR ;; return
- SECTION `.text`:CODE:NOROOT(2)
- DATA
- ??DataTable0:
- DC32 a1
- // 22
- // 23
- // 24
- SECTION `.text`:CODE:NOROOT(1)
- THUMB
- // 25 void test2 (void)
- // 26
- // 27 {
- // 28
- // 29 A a1, a2;
- // 30
- // 31 a1 = a2;
- // 32
- // 33 }
- _Z5test2v:
- BX LR ;; return
IAR 430 5.20 C++-
- RSEG CODE:CODE:REORDER:NOROOT(1)
- // 15 void test1 (void)
- ??test1:
- // 16
- // 17 {
- // 18
- // 19 a1 = a2;
- MOV.B &a2, &a1
- // 20
- // 21 }
- RET
- // 22
- // 23
- // 24
- RSEG CODE:CODE:REORDER:NOROOT(1)
- // 25 void test2 (void)
- ??test2:
- // 26
- // 27 {
- // 28
- // 29 A a1, a2;
- // 30
- // 31 a1 = a2;
- // 32
- // 33 }
- RET
IAR STM8 1.3 C++
-
- SECTION `.near_func.text`:CODE:REORDER:NOROOT(0)
- CODE
- // 15 void test1 (void)
- // 16
- // 17 {
- // 18
- // 19 a1 = a2;
- _Z5test1v:
- LD A, L:a2
- LD L:a1, A
- // 20
- // 21 }
- RET
- // 22
- // 23
- // 24
- SECTION `.near_func.text`:CODE:REORDER:NOROOT(0)
- CODE
- // 25 void test2 (void)
- // 26
- // 27 {
- // 28
- // 29 A a1, a2;
- // 30
- // 31 a1 = a2;
- // 32
- // 33 }
- _Z5test2v:
- RET
|