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