Pasaje de Parámetros en 64 bits para C

Slides:



Advertisements
Presentaciones similares
Curso de java básico (scjp)
Advertisements

FUNDAMENTALS OF THE JAVA PROGRAMMING LANGUAGE (SL-110) CAPÍTULO 5: DECLARACIÓN, INICIALIZACIÓN Y USO DE VARIABLES Ing. Ronald Criollo.
Curso de java básico (scjp)
VAX Diego Esteban Moreno Félix Huete García Germán Aguado Llorente.
El lenguaje C Introducción.
Repaso para la construcción del intérprete 2012
Fundamentos de la Programación Estructurada
Procedimientos y Funciones
Algoritmos y Estructuras de Datos
Algoritmo y Estructura de Datos I
Arquitectura de Conjunto de Instrucciones (ISA)
Unidad 3 Punteros.
Ingeniero Anyelo Quintero
17/09/2014Catedra de Programacion I1 Programación I Funciones.
Conceptos Básicos de Java
Material Elaborado por: Lic. Saily González. CONTENIDO 2.1- Estructura de una Aplicación JAVA 2.2- Elementos básicos de la Programación JAVA Comentarios.
Funciones “En C” Semestre de Otoño 2006 Claudio Gutiérrez-Soto.
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
CI TEORIA semana 8 Subprogramas o funciones Definición de funciones.
Subrutinas.
SEMANA 05_2.
Modificadores.
Clases y objetos La unidad fundamental de programación OO son las clases. Conjunto de métodos y semántica Qué se va a hacer POO Clase: que define la implementación.
Creación de Aplicaciones
Archivos. fopen(...) Para comenzar a utilizar un archivo primero se debe abrir, invocando a la función fopen(...) FILE * fopen(char* nombre_arch, char*
Nombre, Alcance y Asociaciones (Bindings). Agenda Definición Nombre y Bindings Binding Time Importancia del Binding Time Eventos relacionados a la Asociación.
SCJP Sun Certified Programmer for Java 6
MIPS Intermedio.
Suponiendo que además en la clase U hay: import java.util.*; class U{ static Scanner teclado = new Scanner(System.in); static public int readInt(String.
FUNCIONES EN C. SOBRE FUNCIONES... Caja negra in_1 in_N out_1 In_2 Función: Nombre. (Con el cual es invocada). Entradas. (Parámetros de la función). Salida.
C++ LISTAS C++ 11/04/2017 Ing. Edgar Ruiz Lizama.
Introducción a los punteros
JAVA J.A.C..
Tema 2: Los tipos de datos
Índice. Revisando conceptos acerca de la memoria.
Programación III Clase 08 Arreglos.
Java. Java nació el año 1991, por un par de ingenieros de la Sun Microsystems.
ATC-DistribuidasUniversidad de Oviedo / Dpto. de Informática XDR (External Data Representation) Tipos y codificación.
Programa Vespertino de Automatización Equipos y Sistemas de Control Digital Lenguaje C Profesor: Felipe Páez Mejías D e p a r t a m e n t o d e I n g e.
Entrada / Salida. Java adopta de Unix el concepto de stream Un stream es un flujo de datos (secuencia de bytes) que va de una fuente a un destino. Desde.
Programación I Técnico Universitario en Web Dpto. de Informática FCFMyN - UNSL -11-
Tipo de Datos Básicos.
El lenguaje de programación C - Identificadores y variables – Isidro González Caballero ( Introducción.
1 Asignación Dinámica de Memoria Agustín J. González Versión original de Kip Irvine ELO 329.
Archivos Programación I MC Beatriz Beltrán Martínez.
Tipos de Datos. Entrada-Salida.. La entrada-salida (I/O) le permite a un programa comunicarse con el mundo exterior. Esta comunicación puede realizarse.
Manejo de Punteros y objetos en memoria dinámica en C++
Unidad 2 REUTILIZACIÓN DE CLASES Programación Orientada a Objetos M.S.C. Ivette Hernández Dávila.
FUNCIONES Conceptos básicos. Retorno de una función Clases de funciones. Paso de parámetros. Funciones y arrays.
Programación Técnica1UVM Tipos de Datos. Programación Técnica2UVM.
Programación en C para electrónicos
Listas Ligadas Simples. Definíción I  Es, en sencillas palabras. un grupo de datos organizados secuencialmente, pero a diferencia de los arreglos, la.
PAQUETES Un paquete es un conjunto de clases, interfaces y subpaquetes relacionados. El paquete define un ámbito de visibilidad: los miembros que no tienen.
1 Definición y Conversión de datos Agustín J. González ELO-329.
1 Algunas ideas básicas en C++ Agustín J. González ELO-329.
1 Algunas ideas básicas de C++ Agustín J. González ELO-329.
Programación Procedural y Recursiva en C++
C# desde cero.
CARACTERÍSTICAS Es un lenguaje de programación estructurado de propósito general. Está estrechamente asociado al sistema operativo UNIX, ya que el propio.
1 Asignación Dinámica de Memoria Agustín J. González ELO 329.
Ejemplos: float R[10] = {2, 32, 4.6, 2, 1, 0.5, 3, 8, 0, 12}; float S[] = {2, 32, 4.6, 2, 1, 0.5, 3, 8, 0, 12}; int N[] = {1, 2, 3, 6}; int M[][3] = {
Programación estructurada
Tipos de datos básicos en Java
ARREGLOS. La sintaxis para declarar e inicializar un array será: Tipo_de_variable[ ] Nombre_del_array = new Tipo_de_variable[dimensión]; También podemos.
Conceptos y Lenguaje Imperativo
1 Definición y Conversión de datos Agustín J. González ELO-329.
MIPS Intermedio.
Reutilización de código Elementos básicos del lenguaje Java Definición de variables, expresiones y asignaciones Fundamentos de Programación Departamento.
This y static. This Normalmente, dentro del cuerpo de un método de un objeto se puede referir directamente a las variables miembros del objeto. Sin embargo,
3.6 Manejo de E/S Estructuras En la creación de soluciones para algunos problemas surge la necesidad de agrupar datos de diferente tipo o de manejar datos.
Transcripción de la presentación:

Pasaje de Parámetros en 64 bits para C Presentación

Arquitectura x86-64

Convención Registros a preservar: %rbp %rsp %rbx %r12 %r13 %r15 Estos registros pertenecen a la función llamadora y deben mantener su valor al terminar la función

Clases de Datos Los tipos de argumentos se agrupan en 3 clases. INTEGER SSE MEMORY Existen más clasificaciones, pero estas clases son las que nos interesan.

Tipos de Datos Los tipos built-in de C se clasifican cómo: INTEGER: char, short, int, long, long long y punteros. SSE: float y double MEMORY: Tamaño mayor a 4 quadwords (8 bytes) o datos desalineados

Pasaje de Parámetros Si el tipo es INTEGER, el argumento se pasa en el siguiente registro libre de izquierda a derecha en la secuencia %rdi, %rsi, %rdx, %rcx, %r8 y %r9 Si son necesarios más argumentos se pushean al stack de derecha a izquierda.

Pasaje de Parámetros Si el tipo es SSE, el argumento se pasa en el siguiente registro libre de izquierda a derecha en la secuencia %xmm0, %xmm1, %xmm2, %xmm3, %xmm4, %xmm5, %xmm6 y %xmm7 Si son necesarios más argumentos se pushean al stack de derecha a izquierda. Si la función es f(…) %al es una cóta sup. de cuantos argumentos se pasaron por registro.

Pasaje de Parámetros Si el tipo es MEMORY, se pushea al stack de derecha a izquierda

Pasaje de Parámetros Cuando se pasan datos por stack, estos siempre son redondeados (hacia arriba) a un multiplo de quadword (8 bytes). Los miembros de las estructuras tambíen son redondeados. Esto mantiene la alineación a palabra.

Valores de Retorno Si es tipo INTEGER, el retorno se hace por el primer registro libre de la secuencia %rax, %rdx Si es tipo SSE, el retorno se hace por el primer registro libre de la secuencia %xmm0, %xmm1 Si es tipo MEMORY, la función llamadora proveé espacio para el retorno, el registro %rdi apunta a esta zona como si fuera un argumento más. Al salir de la función el valor de %rax es el mismo que el de %rdi.

Uso de los registros

Ejemplos Las siguientes funciones reciben los argumentos de la misma forma: double foo(long arg1, double arg2); double bar(double arg2, long arg1);

Ejemplos La siguiente función recibe todos sus argumentos por registro. long foo(int integer1, float sse1, long integer2, float sse2, void *integer3, double sse4, short integer4, float sse5, char integer5, double sse6, long long integer6, double sse7, double sse8);

Ejemplos La siguiente función recibe sus últimos 3 argumentos por stack. long foo(long arg1, long arg2, long arg3, long arg4, long arg5, long arg6, long arg7, long arg8, long arg9);

Ejemplo de Integración Escribir una implementación de la llamada al system call int write(int fd, const void *buff, int count); Datos: Las llamadas a los system calls en x86-64 es el mismo que en i386. El número de system call de write es 4.

Preguntas Alguna duda? Porqué se usan los registros en lugar del stack en esta arquitectura?