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