0
使用野牛生成一個簡單的計算器彙編代碼,但我想不出我的錯誤是在這裏到底是什麼,所有的答案似乎是一個乘法關閉...冪函數Intel彙編
global intpow
intpow:
push ebp
mov ebp,esp
mov ecx,[ebp+8]
mov eax,[ebp+12]
loop:
cmp eax,1
jle finish
dec eax
imul ecx,ecx
jmp loop
finish:
mov eax,ecx
mov esp,ebp
pop ebp
ret
下面的代碼在我.Y文件,當我確定一個指數的呼叫:
exp '^' exp { $$ = pow ($1, $3);
printf("call\tintpow\n");
printf("push\tDWORD eax\n");
}
,大會錯了嗎?他們?都?
我建議你使用橡皮鴨調試和評論每個組裝行與你相信它正在做什麼。 –
'imul ecx,ecx'會用相乘結果覆蓋原始值。循環的第二次迭代將計算'(y * y)*(y * y)'而不是'(y * y)* y',依此類推。 – DCoder
與[Knuth的雙箭頭函數](http://en.wikipedia)相同,您已經編寫[功能函數](http://en.wikipedia.org/wiki/Tetration) .ORG /維基/ Knuth's_up-arrow_notation)。這是有效的代碼,僅用於不同的目的。 – nrz