โ๏ธPROCEDIMIENTOS
Los procedimientos o subrutinas son muy importantes , ya que los programas tienden a ser grandes. Los procedimientos se identifican con un nombre. A continuacion de este nombre, se escribe el cuerpo del procedimiento que realiza un trabajo bien definido:
proc_name:
procedure body
---
retEl procedimiento se llama desde otra funcion utilizando la instruccion CALL. La instruccion CALL debe tener el nombre del procedimiento llamado como argumento:
call proc_nameEl procedimiento llamado devuelve el control al procedimiento de llamada mediante la instruccion RET.
EJEMPLO:
Escribamos un procedimiento muy simple llamado sum que suma las variables almacenadas en el registro ECX y EDX y devuelve la suma en el registro EAX:
section .data
msg db 'La suma es', 0xa, 0xd
len equ $ - msg
section .bss
res resb 1
section .text
global _start
_start:
mov ecx, '4'
sub ecx, '0'
mov ebx, '5'
sub ebx, '0'
call sum
mov [res], eax
mov ecx, msg
mov edx, len
mov ebx, 1
mov eax, 4
int 0x80
mov ecx, res
mov edx, 1
mov ebx, 1
mov eax, 4
int 0x80
mov eax, 1
int 0x80
sum:
mov eax, ecx
add eax, edx
add eax, '0'
ret
Estructura de Datos de Pilas
Una pila es una estructura de datos similar a una matriz en la mamoria en la que los datos se pueden almacenar y eliminar de una ubicacion llamada 'Parte Superor' de la pila. Los datos que deben almacenarse se 'empujan' en la pila y los datos que se deben recuperar se 'sacan' de la pila. Stack es una estructura de datos LIFO, es decir, los datos almacenados primero se recuperan en ultimo lugar.
El lenguaje asm proporciona dos instrucciones para las operaciones de pila: PUSH y POP . Estas instrucciones tienen sintaxis:
El espacio de memoria reservado en el segmento de la pila se utiliza para implementar la pila. Los registros SS y ESP (o SP) se utilizan para implementar la pila. La parte superior de la pila, que apunta al ultima elemento de datos insertado en la pila, es apuntada por el registro SS:ESP, donde el registro SS apunta al comienzo del segmento de pil y el SP (o ESP) da el desplazamiento en el segmento de la pila.
La implementacion de la pila tiene las siguientes caracteristicas:
Solo se puede guardar strings o dobles en la pila, no un byte.
La pila crece en la direccion inversa es decir, hacia la direccion de memoria inferior,
La parte superior de la pila apunta al ultimo elemento elemento insertado en la pila, apunta al byte inferior de la ultima palabra insertada.
Como discutimos sobre almacenar los valores de los registros en la pila antes de usarlos para algun uso; se puede hacer de la siguiente manera:
EJEMPLO:
El siguiente programa muestra todo el juego de caracteres ASCII. El programa principal llama a un procedimiento denominado display, que muestra el juego de caracteres ASCII.
รltima actualizaciรณn