【问题标题】:Comparing multiple address machines by writing programs to compute an equation?通过编写程序计算等式来比较多个地址机?
【发布时间】:2013-11-18 14:54:09
【问题描述】:

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

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

【问题讨论】:

  • 不是 100% 肯定的,但我很确定这是点或类似的东西 :) 我知道雅虎回答是 +10。我有一个超过 2,000 点的帐户,但堆栈对于我的计算机科学问题来说要好得多。

标签: computer-science computer-architecture


【解决方案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) 三地址

SUB T1, B, C     # T1 = B - C
MUL T2, A, D     # T2 = A * D
DIV T2, T1, T2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-16
    相关资源
    最近更新 更多