Uno de los elementos clave en el proceso de aprender a programar en ensamblador es el uso de la pila, de forma típica la pila se utiliza en el paso de parámetros a métodos, pero también se acostumbra usar para guardar valores de registros, es decir, si un registro se usa en un método, el valor anterior del registro puede ser preservado, también para guardar por ejemplo los bits de estado para que una llamada a un método no afecte el estado, en este ejemplo se crea un procedimiento que preserva los valores de los registros que utiliza, y se demuestra guardando un valor en el registro antes de una llamada y luego usando un salto para omitir el segundo mensaje.
Descargar Codigo Fuente
los comandos para ensamblar , enlazar y ejecutar este ejemplo son
as -o hola4.o hola4.asm
ld -o hola4 hola4.o
./hola4
.text .global _start _start: # write msg movl $len, %edx movl $msg, %ecx #invocar el procedimiento call PrintMsg movl $100 , %eax # guardar 100 en eax call PrintMsg cmpl $100 , %eax # comparar 100 con eax je salir # si eax es igual a 100 , salir # write msg1 movl $len1, %edx movl $msg1, %ecx call PrintMsg salir: # exit movl $0, %ebx movl $1, %eax int $0x80 ########################################### # procedimiento PrintMsg # # recibe en %edx el tamaño de la cadena # # recibe en %ecx el apuntador a la cadena # # deja intactos los registros que utiliza # ########################################### PrintMsg: pushl %eax #guardar el contenido de eax en la pila pushl %ebx #guardar el contenido de ebx en la pila movl $1, %ebx movl $4, %eax int $0x80 popl %ebx #restaurar el valor de ebx popl %eax #testaurar el valor de eax ret #return ######################################### .data msg: .ascii "hola mundo!\n" len = 12 msg1: .ascii "mensaje 2!\n" len1 = 11
Descargar Codigo Fuente
los comandos para ensamblar , enlazar y ejecutar este ejemplo son
as -o hola4.o hola4.asm
ld -o hola4 hola4.o
./hola4
Comentarios
Publicar un comentario