通过编写程序来计算方程式来比较多个地址机器?

时间:2013-11-18 14:54:09

标签: computer-science computer-architecture

通过编写程序来计算零,一,二和三个地址机器:

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

1 个答案:

答案 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