单地址机汇编实现F=(A+B)²*C-A:如何计算(A+B)的平方?
单地址指令机计算(A+B)²的最优实现
针对你要计算的表达式F=(A+B)²*C-A,在已经完成LOAD A和ADD B(此时累加器ACC中存储的是A+B)的前提下,最优的平方计算方式是利用临时存储单元暂存累加器的值,再执行乘法,比重复计算A+B要少两条指令,效率更高。
完整的汇编代码如下:
LOAD A ADD B STORE TEMP ; 将A+B的结果存入临时单元TEMP MUL TEMP ; 累加器值(A+B)乘以TEMP的值(A+B),得到(A+B)² MUL C SUB A STORE F
补充说明:
- 如果你的单地址指令集支持累加器自乘的隐含指令(部分架构中
MUL无操作数时默认执行ACC*ACC),那么可以省略临时单元,直接写:LOAD A ADD B MUL ; 直接执行ACC=ACC*ACC,得到(A+B)² MUL C SUB A STORE F
但这种指令不是所有单地址机都支持,所以用临时单元的写法是更通用的最优方案。
内容的提问来源于stack exchange,提问作者alex
相关产品推荐
相关产品推荐

