Ir al contenido principal

Entradas

Mostrando las entradas con la etiqueta assembler

Uso básico de la pila Gnu Assembler (GAS)

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. . 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 ...

Salto Incondicional JMP en Gnu Assembler (GAS)

Los saltos son la forma básica de control de flujo en lenguaje ensamblador, un salto acompañado de una etiqueta de destino, nos permite llevar al procesador a ejecutar en cualquier región de nuestro código. en este ejemplo, veremos la forma mas básica de salto, el salto incondicional, el cual modifica el flujo del programa, y lo dirige hacia una etiqueta definida. como primer paso para entender la forma en la que actúa una instrucción "jmp", vamos a usar un pequeño ejemplo, que imprime dos mensajes en pantalla, uno después de otro en una secuencia simple . text . global _start _start: # write msg movl $len , % edx movl $msg , % ecx movl $1 , % ebx movl $4 , % eax int $ 0x80 # write msg1 movl $len1 , % edx movl $msg1 , % ecx movl $1 , % ebx movl $4 , % eax int $ 0x80 # exit movl $0 , % ebx movl $1 , % ...

Hola Mundo en Ensamblador GNU Assembler (GAS)

Este post busca ayudar a dar los primeros pasos en el desarrollo de aplicaciones en lenguaje ensamblador, en entornos GNU Linux para el ejemplo se utiliza Debian Lenny, el ensamblador y enlazador de GNU contenidos en el paquete binutils (as, ld). Básicamente los pasos que debemos seguir son los siguientes instalar el paquete binutils, para esto en una consola iniciada en modo root. apt-get install binutils cuando la instalacion se completa correctamente, podemos ejecutar "as" y "ld" para ensamblar y linkar respectivamente. el programa que vamos a crear, es el hola mundo, para esto vamos a utilizar las llamadas al sistema "write" y "exit" como se detalla en el código fuente a continuación . text . global _start _start: movl $len , % edx movl $msg , % ecx movl $1 , % ebx movl $4 , % eax int $ 0x80 movl $0 , % ebx movl $1 , % eax int $ 0x80 . data    ...

Ensamblador : Hola Mundo en Linux Debian Lenny con NASM

En este post quiero mostrar como realizar un programa simple "hola mundo" en lenguaje ensamblador, en el sistema operativo Linux Debian Lenny, usando el ensamblador NASM como primer paso es necesario instalar nasm, en Debian esta tarea es trivial, y se reduce a ejecutar como root el comando apt-get install nasm una vez completa la instalación de nasm, pasamos al código fuente del ejemplo section . data     holaStr: db 'Hola Mundo!' , 10     holaSize: equ $ - holaStr section . text global _start _start: mov eax , 4 ; llamada del sistema 'write' identificador 4 mov ebx , 1 ; descriptor de archivo 1 = pantalla mov ecx , holaStr ; cadena a mostrar mov edx , holaSize ; longitud de la cadena int 80h ; invocar al kernel ; Terminate program mov eax , 1 ; llamada del sistema 'exit' mov ebx , 0 ; codigo...