LIBRERÍA alfalib Introducción

Anuncio
LIBRERÍA alfalib
Índice
Marina de la Cruz
Alfonso Ortega
Introducción
Las funciones print_int, print_float y print_boolean
La función print_string
Las funciones print_blank y print_endofline
Las funciones scan int, scan float y scan_boolean
La función ld_float
La función alfa_malloc
La función alfa_free
Prácticas de Procesadores de Lenguaje 2008-2009
1
Introducción
La librería alfalib proprciona funciones de apoyo para la generación de código de
operaciones de entrada/salida y de reserva y liberación de memoria.
Las funciones incluidas en la librería son:
print_int
print_float
print_boolean
print_string
print_blank
print_endofline
scan_int
scan_float
scan_boolean
ld_float
alfa_malloc
alfa_free
2
Las funciones print_int, print_float y print_boolean
Imprime un valor entero, real o lógico por la salida estándar. En eax deja 0 si la impresión ha
terminado con éxito y algo distinto de 0 en caso contrario.
Antes de invocar a la función hay que apilar el valor entero que se quiere imprimir:
push dword <valor>
Invocar a la función:
call print_int
call print_float
call print_boolean
Restaurar el puntero de pila:
add esp, 4
En el caso de la escritura de valores lógicos, la salida puede ser “true” o “false”
3
La función print_string
Imprime una cadena de caracteres por la salida estándar. En eax deja 0 si la impresión ha
terminado con éxito y algo distinto de 0 en caso contrario.
Antes de invocar a la función hay que apilar la dirección de comienzo de la cadena que se
quiere imprimir:
push dword <dirección de inicio de la cadena>
Invocar a la función:
call print_string
Restaurar el puntero de pila:
add esp, 4
4
Las funciones print_blank y print_endofline
Las funciones print_blank y print_endofline imprimen por la salida estándar un espacio en
blanco y un salto de línea respectivamente. En eax deja 0 si la impresión ha terminado con
éxito y algo distinto de 0 en caso contrario.
Ninguna de las dos funciones tiene parámetros, y por lo tanto, simplemente se invocan sin
necesidad de preparar y restaurar la pila. Las llamadas son:
call print_blank
call print_endofline
5
Las funciones scan_int, scan_float y scan_boolean
Lee un valor entero, real o lógico de la entrada estándar. En eax deja 0 si la lectura ha
terminado con éxito y algo distinto de 0 en caso contrario.
Antes de invocar a la función hay que apilar la dirección donde se quiere que la función
deposite el valor leído:
push dword <dirección>
Invocar a la función:
call scan_int
call scan_float
call scan_boolean
Restaurar el puntero de pila:
add esp, 4
En el caso de la lectura de valores lógicos, la entrada puede ser “true” o “false”
6
La función ld_float
Deja en eax el valor real resultante de dividir dos números. Tiene por lo tanto dos parámetros,
el numerador y el denominador.
Antes de invocar a la función hay que apilar los parámetros, primero el numerador y después
el denominador:
push dword <valor del numerador>
push dword <valor del denominador>
Invocar a la función:
call ld_float
Restaurar el puntero de pila:
add esp, 8
7
La función alfa_malloc
Reserva 32 bits de memoria y deja en eax la dirección reservada.
No tiene parámetros, y por lo tanto simplemente se invoca sin necesidad de preparar y
restaurar la pila. La llamada sería:
call alfa_malloc
8
La función alfa_free
Libera una dirección de memoria.
Antes de invocar a la función hay que apilar la dirección que se va a liberar:
push dword <dirección>
Invocar a la función:
call alfa_free
Restaurar el puntero de pila:
add esp, 4
9
Descargar