通过编写程序来计算零,一,二和三个地址机器:
X = (B - C) / (A * D)
对于四台机器中的每台机器,可以使用的说明如下:
0 Address
PUSH
POP
ADD
MUL
DIV
SUB
1 Address
LOAD
STORE
MUL
DIV
SUB
2 Address
MOVE (X, Y)
MUL (X, Y)
DIV (X, Y)
SUB (X, Y)
3 Address
SUB (X, X, Y)
MUL (X, X, Y)
DIV (X, X, Y)
a) Zero-Address ...
b) One-Address ...
c) two-Address ...
d) three--Address ...
我会尽快给出最佳答案!感谢所有帮助!
编辑:我相信我解决了A ......我得到了
Push B
Push C
Sub
Push A
Push D
MUL
DIV
Pop X
Edit2:我相信我也解决了B,如果你看到我的答案有问题,请告诉我...
Load A
MUL D
Store T
Load B
Sub C
Div T
Store X
答案 0 :(得分:1)
1)0地址
似乎根据堆栈寄存器的预期顺序,您的排序可能不正确。之后
Push B Push C Sub Push A Push D MUL
堆栈将包含
A*D B-C
可能会以相反的顺序分开。
2)1地址。
执行
似乎更有效率Load B Sub C Div A Div D Store X
假设您的内存延迟加上乘法延迟高于分区延迟。 还假设允许转换
x =(B - C)/(A * D)成X =((B - C)/ A)/ D
3)2地址
如果我们假设我们可以有2个临时寄存器:
MOV B T1 SUB T1 C MOV A T2 MUL D T2 DIV T1 T2
如果我们只假设一个临时寄存器,但允许更改公式,就像在2中一样,那么
MOV B T SUB T C DIV T A DIV T D
如果这些都不被允许,那么:
MOV B T SUB T C MOV C MEM MOV A T MUL A D DIV MEM T
4)3地址
SUB T1, B, C # T1 = B - C MUL T2, A, D # T2 = A * D DIV T2, T1, T2