cer-0 / 5cv14

Práctica de la materia de compiladores
0 stars 0 forks source link

Numeros decimales en ensamblador #19

Open DavidENicolasC opened 9 months ago

DavidENicolasC commented 9 months ago

Se requiere que el compilador trabaje con expresiones como:

a = 4.7 * 2;

Con una precisión de dos decimales

DavidENicolasC commented 8 months ago

Para los números decimales, propongo el siguiente método para manejarlos:

Se supondrá que se utiliza una precisión de 2 decimales

Almacenamiento

Las variables de punto flotante se guardarán como si fueran enteros.

Ejemplo:

45.67 se guardará como:

a DW ?
mov ax, 4567
mov a, ax

Ventaja: Las operaciones aritméticas son más sencillas de realizar en el código ensamblador. Limitación: La capacidad de la variable que podemos ofrecer para el tipo de dato float.

El procesador Intel 8086 utiliza 4 registros de propósito general de 16 bits: AX, BX, CX y DX. Que se dividen, a su vez, en 8 registros de propósito general de 8 bits: AH, AL, BH, BL, CH, CL, DH, DL

Con la información anterior, los tamaños de palabra que maneja el procesador Intel 8086 son los siguientes: palabra tamaño rango
B (Byte) 8 bits o 2 bytes (FF) -128 a 127
W (Word) 16 bits o 4 bytes (FFFF) -32768 a 32767

El tamaño de palabra más grande que podemos ofrecer para el tipo de dato int es el de 16 bits.

Si guardamos los datos de tipo float como enteros, el rango que podemos ofrecer es: -327.68 a 327.67

Para garantizar que las literales numéricas escritas en el ensamblador cumplan estos rangos, hay que incluir esta verificación en el análisis semántico.