Computer science 通过编写程序来计算等式来比较多个地址机?

Computer science 通过编写程序来计算等式来比较多个地址机?,computer-science,computer-architecture,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) 我会

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

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)

我会尽快给你最好的答案!感谢您的帮助

编辑:我相信我解决了一个。。。我得到

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地址

看起来,根据堆栈寄存器的预期顺序,您的顺序可能不正确。之后

堆栈将包含

它们可能会按相反的顺序分开

2) 1-地址

看来这样做会更有效率

假设内存延迟加上乘法延迟高于除法延迟。 还假设允许它进行转换

x=(B-C)/(A*D)转化为x=((B-C)/A)/D

3) 双地址

如果我们假设可以有2个临时寄存器,那么:

如果我们假设只有一个临时寄存器,但允许更改公式,就像在2中一样,那么

如果两者均不允许,则:

4) 3-地址


不是100%的肯定,但我很确定这是分数或者类似的:)我知道雅虎的答案是+10。我有一个超过2000分的帐户,但是stack对于我的计算机科学问题来说要好得多。
Load A
MUL D
Store T
Load B
Sub C
Div T 
Store X
Push B
Push C
Sub
Push A
Push D
MUL
A*D
B-C
Load B
Sub C
Div A
Div D
Store X
MOV B T1
SUB T1 C
MOV A T2
MUL D T2
DIV T1 T2
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
SUB T1, B, C     # T1 = B - C
MUL T2, A, D     # T2 = A * D
DIV T2, T1, T2