PDA

View Full Version : تولید کد اسمبلی در Codeblok و مقایسه با ان با MSVC



UfnCod3r
سه شنبه 27 فروردین 1392, 11:25 صبح
in the name of coding
:لبخند:

سلام اول از هم بگین چطور کدبلاک رو تنظیم کنم که خروجی سمبلی + سورس رو بده .
اصلا با کد بلاک اشنا نیستم .
تو VS از تنظیمات راحت می شه این کارو کرد .
تو نت سرچ کردم به این دستور برا GCC رسیدم
gcc -c -g -Wa,-a,-ad c:\main.cpp > main.lst

ولی این کده ماشین هم اضافه می کنه . درضمن نمیخوام هی با خط فرمان کامپایل کنم .
سینتکس اسمبلش هم برام فضاییه :متفکر:

می خوام این تابع رو بررسی کنم ببینم VS چه می کنه و GCC چه می کنه . VS vs GCC :تشویق:

size_t Test123(float f)
{
return ((size_t)f)*4;
}


این جور که بوش میاد GCC تو بهینه کردن خوب پیش نمیره :ناراحت:

MSVC10 اینو تولید میکنه

?Test123@@YAIM@Z PROC ; Test123, COMDAT

; 58 : {

push ebp
mov ebp, esp
sub esp, 8

; 59 : return ((size_t)f)*4;

fld DWORD PTR _f$[ebp]
fnstcw WORD PTR tv66[ebp]
movzx eax, WORD PTR tv66[ebp]
or eax, 3072 ; 00000c00H
mov DWORD PTR tv70[ebp], eax
fldcw WORD PTR tv70[ebp]
fistp QWORD PTR tv72[ebp]
mov eax, DWORD PTR tv72[ebp]
add eax, eax
add eax, eax
fldcw WORD PTR tv66[ebp]

; 60 : }

mov esp, ebp
pop ebp
ret 0
?Test123@@YAIM@Z ENDP ; Test123

فقط نمیدونم چرا عوض 2 تا شیفت دادن به چپ میاد 2 بار جمع می کنه . هرکدی بزنم باز خودش اینو تولید میکنه . فکرکنم این از شیفت هم سریع تر باشه :متفکر:

ولی gcc اینو تولید کرد :قهقهه:

6:c:/main.cpp **** size_t Test123(float f)
7:c:/main.cpp **** {
16 shl %ebp
17 0000 55 LCFI0:
18 movl %esp, %ebp
19 0001 89E5 LCFI1:
20 subl $16, %esp
21 0003 83EC10 LCFI2:
22 .loc 1 8 0
8:c:/main.cpp **** return ((size_t)f)*4;
23 (%ebp)
24 0006 D94508 fnstcw -2(%ebp)
25 0009 D97DFE movw -2(%ebp), %ax
26 000c 668B45FE movb $12, %ah
27 0010 B40C movw %ax, -4(%ebp)
28 0012 668945FC fldcw -4(%ebp)
29 0016 D96DFC fistpq -16(%ebp)
30 0019 DF7DF0 fldcw -2(%ebp)
31 001c D96DFE movl -16(%ebp), %eax
32 001f 8B45F0 movl -12(%ebp), %edx
33 0022 8B55F4 sall $2, %eax
34 0025 C1E002 .loc 1 9 0
9:c:/main.cpp **** }


راسته که کامپایلر مایکروسافت فجیح بهینه سازی می کنه ؟ :متفکر: