Calcular expresión en ensamblador.

programación


tengo que calcular la expresión dada
F= (A+B)^2*CA
en una máquina de direcciones 0,1,2,3.
Necesito ayuda para la máquina de 0 direcciones y ¿si el código de otras máquinas es correcto?

Lo que he probado:

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

Solución 1

Si bien estamos más que dispuestos a ayudar a aquellos que están estancados, ¡eso no significa que estemos aquí para hacerlo todo por usted! No podemos hacer todo el trabajo, o te pagan por esto o es parte de tus calificaciones y no sería nada justo que lo hiciéramos todo por ti.

Por eso necesitamos que usted haga el trabajo y lo ayudaremos cuando se quede atascado. ¡Eso no significa que le daremos una solución paso a paso que pueda entregar!
Empiece por explicar dónde se encuentra en este momento y cuál es el siguiente paso del proceso. Luego cuéntenos qué ha intentado para que el siguiente paso funcione y qué sucedió cuando lo hizo.

Por el momento, tenemos que hacer suposiciones sobre sus diversas “máquinas” que pueden ser correctas o no. Entiendo varios ensambladores diferentes del mundo real que están dirigidos a procesadores específicos (o familias de procesadores) y todos funcionan de diferentes maneras: el código que funciona para uno fallará gravemente en otro. Debes leer lo que tu tutor te dio como “definición de código de máquina” para cada uno de tus “tipos de máquina” para poder obtener un código que funcione para ellos. Si bien parece que su código tres debería funcionar, eso implica algunas suposiciones bastante importantes que pueden no ser válidas de ninguna manera para sus máquinas virtuales.
Por ejemplo, al menos dos de las familias de procesadores del mundo real para las que puedo codificar no tienen ninguna instrucción de multiplicación, ¡y una de ellas tiene ejecución condicional para cada instrucción! ¡El código ensamblador para estos sería muy diferente de sus ejemplos!

Si tiene problemas para comenzar, esto puede ayudar: Cómo escribir código para resolver un problema, una guía para principiantes[^]

Solución 2

Dado que ya tiene una respuesta parcial al caso de la máquina de tres direcciones, esto es lo que esperaría de usted (adaptado para la arquitectura del procesador en cuestión):

MAPE
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: Carga el valor de A en el registro R1.
2) LOAD B, R2: Carga el valor de B en el registro R2.
3) ADD R1, R2, R3: Suma los valores en los registros. R1 y R2 y almacenar el resultado en el registro R3.
4) MUL R3, R3, R4: Multiplica el valor en el registro. R3 por sí mismo y almacenar el resultado en el registro R4.
5) LOAD C, R5: Carga el valor de C en el registro R5.
6) MUL R4, R5, R6: Multiplica los valores en los registros. R4 y R5 y almacenar el resultado en el registro R6.
7) SUB R6, R1, R7: Resta el valor en el registro R1 del valor en el registro R6 y almacenar el resultado en el registro R7.

コメント

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