โš™๏ธ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
    ---
    ret

El procedimiento se llama desde otra funcion utilizando la instruccion CALL. La instruccion CALL debe tener el nombre del procedimiento llamado como argumento:

call proc_name

El 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