Programación en ensamblador

Page 78

78

CC-BY-SA • PID_00178132

Programación en ensamblador (x86-64)

Variables locales En los lenguajes de alto nivel es habitual definir variables locales dentro de las funciones definidas en un programa. Las variables locales ocupan un espacio definido dentro de la pila. Ahora veremos cómo reservar espacio para variables locales en subrutinas definidas en ensamblador.

Para reservar el espacio necesario, hemos de saber cuántos bytes utilizaremos como variables locales. A continuación, es necesario decrementar el valor del apuntador a pila RSP tantas unidades como bytes se quieran reservar para las variables locales; de esta manera, si utilizamos las instrucciones que trabajan con la pila dentro de la subrutina (push y pop) no sobreescribiremos el espacio de las variables locales. La actualización de RSP se hace justo después de actualizar el registro que utilizamos para acceder a la pila, RBP.

subrutina: push rbp mov rbp, rsp sub rsp, n

mov rsp, rbp

RBP

pop rbp

ret

; ; ; ; ; ; ; ; ;

Almacenar el registro que utilizaremos de apuntador a la pila rbp Asignar a RBP el valor del registro apuntador RSP n indica el número de bytes reservados para las variables locales Instrucciones de la subrutina Restauramos el valor inicial de RSP con

; Restauramos el valor inicial de RBP

Como las variables locales están en la pila, se utiliza también el registro apuntador RBP para acceder a las variables. Se utiliza un direccionamiento indexado sobre el registro RBP para acceder al espacio reservado, restando un valor al registro RSP. Ejemplo push rbp mov rbp, rsp sub rsp, 8

;Almacenar el registro que utilizaremos ;de apuntador a la pila rbp ;Asignar a RBP el valor del registro apuntador RSP ;reservamos 8 bytes para variables locales

mov mov mov mov

;accedemos ;accedemos ;accedemos ;accedemos

al, byte[RBP-1] ax, word[RBP-2] eax, dword[RBP-4] rax, qword[RBP-8]

a a a a

1 2 4 8

byte de almacenamiento local bytes de almacenamiento local bytes de almacenamiento local bytes de almacenamiento local

5.4.4. Llamadas a subrutinas y paso de parámetros desde C En este subapartado se explica cómo llamar a subrutinas escritas en lenguaje de ensamblador desde un programa escrito en C y cómo transferirle parámetros.


Turn static files into dynamic content formats.

Create a flipbook

Articles inside

6.8. IDIV: división entera con signo

2min
pages 98-99

5.7.3. Retorno al sistema operativo (exit

0
page 90

6. Anexo: manual básico del juego de instrucciones

1min
page 91

5.6. Controlar la consola

1min
page 85

5.7. Funciones del sistema operativo (system calls

1min
page 86

5.7.1. Lectura de una cadena de caracteres desde el teclado

1min
page 87

5.4.4. Llamadas a subrutinas y paso de parámetros desde C

6min
pages 78-82

4.2.6. Apuntadores

1min
page 56

4.2.4. Control de flujo

3min
pages 51-53

4.2.5. Vectores

2min
pages 54-55

4.2.3. Operadores

1min
page 50

4.1.1. Generación de un programa ejecutable

1min
page 47

4.2.2. Variables

1min
page 49

3.4.2. Modos de direccionamiento

7min
pages 39-42

3.4.3. Tipos de instrucciones

3min
pages 43-45

3.4.1. Tipos de operandos de las instrucciones x86-64

5min
pages 36-38

3.2.3. Definición de otros elementos

2min
pages 31-32

2. Lenguajes de programación

1min
page 22

1.1.2. Modo heredado de 16 y 32 bits

1min
page 14

1.2.1. Organización de la memoria

1min
pages 16-17

2.1. Entorno de trabajo

2min
pages 23-24

1.2.2. Registros

5min
pages 18-21

Objetivos

0
pages 9-10

3.2.2. Definición de variables

5min
pages 27-30

Introducción

2min
pages 7-8
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.