1
這個C++:關於這個彙編程序在做什麼MOV的建議?
int my_func(int y, int t){
int m = 0;
m= y*t;
return m;
}
int main(){
int h = my_func(1,2);
return 1;
}
生產這種86:
int main(){
push ebp
mov ebp,esp
sub esp,8
int m = my_func(1,2);
mov dword ptr [ebp-4],0
mov eax,1
imul eax,eax,2
mov dword ptr [ebp-4],eax ;Why?
mov ecx,dword ptr [ebp-4] ;Why?
mov dword ptr [m],ecx ;Why?
return 1;
mov eax,1
}
mov esp,ebp
pop ebp
ret
時m
價值已經包含在寄存器eax
我不明白爲什麼需要三個mov
秒,imul
後?
難道是因爲eax
必須用於return 1
行而eax
因此是一個特殊的註冊?
另外,dword ptr [ebp-4]究竟是指什麼?是1還是2?
您是否編譯過任何級別的優化? – Leeor
@Leeor否,因爲如果我這樣做,我不會有一個imul指令,我只是將值2返回,而不是....(並且我希望函數被內聯) – user997112
冗餘加載的原因是因爲您選擇構建未優化的代碼。 –