在汇编程序中计算表达式


我必须计算给定的表达式
F= (A+B)^2*CA
在 0,1,2,3 地址机器上。
我需要 0 地址机器的帮助,其他机器的代码是否正确?

我尝试过的:

0 address machine
     Need help ??????

   1 address machine
       LOAD A
       ADD B
       STORE TEMP
       MUL TEMP
       MUL C
       SUB A
       STORE F

   2 address machine
       MOVE F, A
       ADD F, B
       MUL F, F
       MUL F, C
       SUB F, A

     3 address machine
       ADD F, A, B
       MUL F, F, F
       MUL F, F, C
       SUB F, F, A

解决方案1

虽然我们非常愿意帮助那些陷入困境的人,但这并不意味着我们会为您做这一切! 我们无法完成所有的工作,您要么为此获得报酬,要么这是您成绩的一部分,我们为您做这一切是不公平的。

所以我们需要你来做这项工作,当你遇到困难时我们会帮助你。 这并不意味着我们会给您一个可以提交的分步解决方案!
首先解释一下您目前所处的位置以及该过程的下一步是什么。 然后告诉我们您为下一步工作所做的努力,以及当您这样做时发生了什么。

目前,我们必须对您的各种“机器”做出假设,这些假设可能正确也可能不正确 – 我了解几种不同的现实世界汇编程序,它们针对特定处理器(或处理器系列),并且它们都以不同的方式工作:适用于一种情况的代码在另一种情况下会严重失败。 您需要阅读导师为您提供的每种“机器类型”的“机器代码定义”,以便获得它们的工作代码。 虽然看起来您的三个代码应该可以工作,但这涉及一些相当大的假设,这些假设可能对您的虚拟机无效。
例如,我可以编码的现实世界处理器系列中至少有两个根本没有乘法指令,并且其中一个对每条指令都有条件执行! 这些的汇编代码与您的示例有很大不同!

如果您在入门时遇到问题,那么这可能会有所帮助: 如何编写代码来解决问题,初学者指南[^]

解决方案2

鉴于您已经对三地址机器情况有了部分答案,那么这就是我对您的期望(适用于有问题的处理器架构):

先进制造商
LOAD A, R1
LOAD B, R2
ADD R1, R2, R3
MUL R3, R3, R4
LOAD C, R5
MUL R4, R5, R6
SUB R6, R1, R7

1) LOAD A, R1:加载值 A 进入寄存器 R1
2) LOAD B, R2:加载值 B 进入寄存器 R2
3) ADD R1, R2, R3:将寄存器中的值相加 R1R2 并将结果存入寄存器 R3
4) MUL R3, R3, R4: 乘以寄存器中的值 R3 本身并将结果存储在寄存器中 R4
5) LOAD C, R5:加载值 C 进入寄存器 R5
6) MUL R4, R5, R6:将寄存器中的值相乘 R4R5 并将结果存入寄存器 R6
7) SUB R6, R1, R7:减去寄存器中的值 R1 从寄存器中的值 R6 并将结果存入寄存器 R7

コメント

タイトルとURLをコピーしました