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