ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Operaciones aritméticas


Enviado por   •  2 de Diciembre de 2020  •  Apuntes  •  1.405 Palabras (6 Páginas)  •  57 Visitas

Página 1 de 6

Operaciones aritméticas:

Ejemplo #1

Supongamos que se tiene la siguiente operación: x = a + y - z * w / a;

Lo primero que se debe realizar es el postfijo de la operación quedando de la siguiente manera: begin_main,x,a,y,+,z,w,*,a,/,-,=,end_main

Por el momento ignoraremos el inicio de main y fin de main, la expresión postfija se manejará como un arreglo de palabras, por lo tanto, se recorrerá hasta encontrar un operador aritmético, cuando se encuentre dicho operador se tomará su valor equivalente de ensamblador (Tabla 1.1), y se creara una nueva cadena de texto, donde numerotemporal es un contador

MOV temporal + numeroTemporal, i – 1

OP temporal + numeroTemporal, i – 2

En el arreglo de postfijo se sustituirá el valor i – 2 por el temporal y se eliminará el valor i – 1 e i.

MOV temporal1, a

SUM temporal1, y

Arreglo: begin_main,x,temporal1,z,w,*,a,/,-,=,end_main

MOV temporal2, z

MUL temporal2, w

Arreglo: begin_main,x,temporal1,temporal2,a,/,-,=,end_main

MOV temporal3, temporal2,

DIV temporal3, a

Arreglo: begin_main,x,temporal1,temporal3,-,=,end_main

MOV temporal4, temporal1,

SUB temporal4, temporal3

Arreglo: begin_main,x,temporal4,=,end_main

Nota: Cuando se encuentre un = el contador de temporales pasa a ser 0 y se elimina, i, i-1 e i-2

MOV x,temporal4,end_main

Arreglo: begin_main,end_main

Resultado:

MOV temp1, a

ADD temp1, y

MOV temp2, z

MUL temp2, w

MOV temp3, temp2

DIV temp3, a

MOV temp4, temp1

SUB temp4, temp3

MOV x, temp4

Operador Equivalente Ensamblador

+ SUM

- SUB

* MUL

/ DIV

Tabla 1.1

Ejemplo #2

Ahora supongamos que tenemos otra operación extra en nuestro código:

x = a + y - z * w / a;

y = x * w;

El postfijo queda de la siguiente manera:

begin_main,x,a,y,+,z,w,*,a,/,-,=,y,x,w,*,=,end_main

Se hace igual que en el ejemplo #1 se recorre la lista hasta encontrar un operador aritmetico:

MOV temporal1, a

SUM temporal1, y

Arreglo: begin_main,x,temporal1,z,w,*,a,/,-,=, y,x,w,*,=,end_main

MOV temporal2, z

MUL temporal2, w

Arreglo: begin_main,x,temporal1,temporal2,a,/,-,=, y,x,w,*,=,end_main

MOV temporal3, temporal2,

DIV temporal3, a

Arreglo: begin_main,x,temporal1,temporal3,-,=, y,x,w,*,=,end_main

MOV temporal4, temporal1,

SUB temporal4, temporal3

Arreglo: begin_main,x,temporal4,=, y,x,w,*,=,end_main

MOV x,temporal4

Arreglo: begin_main,y,x,w,*,=,end_main

Nota: Como se puede observar inicia en la temporal1, porque el contador se reinició con la igualación de la operación pasada

MOV temporal1, x

MUL temporal1, w

Arreglo: begin_main,y,temporal1,=,end_main

MOV y, temporal1

Arreglo: begin_main,end_main

Resultado:

MOV temp1, a

ADD temp1, y

MOV temp2, z

MUL temp2, w

MOV temp3, temp2

DIV temp3, a

MOV temp4, temp1

SUB temp4, temp3

MOV x, temp4

MOV temp1, x

MUL temp1, w

MOV y, temp1

Condiciones (if y while)

If sin else

Supongamos que tenemos el siguiente fragmento de código:

main {

if(x>10){

x = x + 10;

}

}

El postfijo queda de la siguiente manera:

begin_main,if1,x,10,>,begin_if1,x,x,10,+,=,end_if1,else1,begin_else1,end_else1,end_main

Se va recorrer el arreglo si se encuentra con un if, else, fin de else, while, inicio de main o fin de main se creará una etiqueta. Esto se hace solo concatenándole “:” a la palabra y se eliminara del arreglo.

begin_main:

Arreglo: if1,x,10,>,begin_if1,x,x,10,+,=,end_if1,else1,begin_else1,end_else1,end_main

if1:

...

Descargar como (para miembros actualizados)  txt (12.9 Kb)   pdf (66.3 Kb)   docx (21.4 Kb)  
Leer 5 páginas más »
Disponible sólo en Clubensayos.com