ELO311 Estructuras de Computadores Digitales. Estructuras de Datos
|
|
- Irene San Martín Acosta
- hace 5 años
- Vistas:
Transcripción
1 ELO311 Estructuras de Computadores Digitales Estructuras de Datos Tomás Arredondo Vidal Este material está basado en: material de apoyo del texto de David Patterson, John Hennessy, "Computer Organization & Design", (segunda y tercera edición), Morgan Kaufmann, CA material del curso anterior ELO311 del Prof. Leopoldo Silva
2 Arreglos Arreglos son una estructura de datos consecutivos en memoria usados para almacenar elementos. Se requiere una variable entera sin signo, denominada el índice del arreglo, generalmente se emplea un registro para este índice. (e.g. en C es A[i]) Todas los elementos tienen igual tamaño, típicamente se asume que están almacenadas en forma contigua En assembler si se conoce la dirección del primero entonces la dirección del elemento i, queda dada por: Dirección del primero + i * (tamaño del elemento en bytes) En assembler típicamente el tamaño del elemento es una constante (múltiplo de dos) y la multiplicación puede efectuarse como corrimientos a la izquierda.
3 Arreglos (cont) En C, si se usan índices se inicia con el elemento 0 (e.g. A[0] es el primer elemento del arreglo). Este modelo de representación de los arreglos en assembler, es el que usa el lenguaje C, que emplea el nombre del arreglo como un puntero al primer elemento (e.g. A es la misma dirección que &A[0] para el arreglo A). C también permite acceder a un elemento vía indirección, con la expresión A+i, que es la dirección del elemento i del arreglo A. En C la aritmética de punteros (e.g. A+i) calcula la posición de memoria del elemento i acuerdo al tamaño de los elementos i (e.g. primer elemento es A + 0, segundo es A + 1, ).
4 Arreglos (cont) Con este modelo es posible ubicar un elemento cualquiera del arreglo sin tener que acceder a los elementos secuencialmente. Ubicar cualquier elemento del arreglo (e.g. el primero, A[0] o el ultimo: A[99]) toma el mismo tiempo. Porque tiene la capacidad de acceder a cualquier elemento de memoria de acuerdo a la necesidad del usuario sin tener que hacerlo secuencialmente es que esta estructura se la denomina RAM (Random Access Memory) o Memoria de Acceso Aleatorio.
5 Ejemplo: Arreglos con Índices El siguiente segmento, en C, describe la manipulación mediante acceso vía un índice: int a[ ] = {0,1,2,3,4,5,6}; int i = 0; int k = 0; void main(void) { i = 5;... k = a[i]; /* lectura de elemento de arreglo */... a[i] = k; /* escritura en elemento de arreglo */ }
6 Ejemplo: Arreglos con Índices En assembler:.data 0x # comienzo segmento datos a:.word 0,1,2,3,4,5,6 i:.word 0 k:.word 0.text.globl main main: # inicia variable i, en zona estática, con constante 5. li $t3, 5 # t3=5 Macro que puede escribirse: ori $t3,$zero,5 la $t0, i # t0=&i t0 es un puntero. Apunta a variable i. # este macro se puede remplazar por un lui y un ori sw $t3, 0($t0) # *t0=t3 Escribe en lo que apunta t0: i=5 # Los 2 comandos anteriores pueden escribirse con macro: sw $t3, i($zero)
7 Ejemplo: Arreglos con Índices (cont) #Primero se obtiene en t2, el offset en bytes respecto al inicio. la $t0, i # t0 = &i lw $t0, 0($t0) # t0 = *t0 o también t0 = i sll $t2, $t0, 2 # t2 = 4*i # Luego se forma, en t2, la dirección de a[i] la $t1, a # t1 = &a[0] = &a, sin usar macro la: lui $t1, 0x1001 # ori $t1, $t1, 0 addu $t2, $t2, $t1 # t2 = &a + 4*i = &( a[i] ) # Finalmente se deposita en t3 el contenido de a[i] lw $t3, 0($t2) # t3 = a[i] # Los comandos previos pueden escribirse con un macro: lw $t3, a($t2) la $t4, k # t4 = &k sw $t3, 0($t4) # k = a[i] jr ra # De similar forma se implementa a[i] = k
8 Ejemplo: Arreglos con Punteros El siguiente segmento, en C, describe la manipulación mediante acceso vía un puntero: int a[ ] = {0,1,2,3,4,5,6}; int i = 0; int k = 0; void main(void) { i = 5;... k = *(a + i); /* lectura de elemento de arreglo */... *(a + i) = k; /* escritura en elemento de arreglo */ }
9 Ejemplo: Arreglos con Punteros (cont) En assembler:.data a:.word 0,1,2,3,4,5,6 i:.word 0 k:.word 0.text.globl main main: # por defecto comienza en 0x # inicia variable i, en zona estática, con constante 5. li $t3, 5 # t3=5 Macro que puede escribirse: ori $t3,$zero,5 la $t0, i # t0=&i t0 es un puntero. Apunta a variable i. sw $t3, 0($t0) # *t0=t3 Escribe el contenido de $t3 donde apunta $t0. # Los 2 comandos anteriores pueden escribirse con macro: sw $t3, i($zero
10 Ejemplo: Arreglos con Punteros (cont) #Primero se obtiene en t2, el offset en bytes respecto al inicio. la $t0, i # t0 = &i lw $t0, 0($t0) # t0 = *t0 o también t0 = i sll $t2, $t0, 2 # t2 = 4*i # Luego se forma, en t2, la dirección de (a+i) la $t1, a # t1 = &a, sin usar macro la: lui $t1, 0x1001 # ori $t1, $t1, 0 addu $t2, $t2, $t1 # t2 = a+4*i # Finalmente se deposita en t3 el contenido de *(t2) lw $t3, 0($t2) # t3 = *(t2) # Los comandos previos pueden escribirse con un macro: lw $t3, a($t2) la $t4, k # t4 = &k sw $t3, 0($t4) # k = *(a + i); jr ra De similar forma se implementa *(a+i) = k
11 Arreglos de Caracteres (Strings) Arreglos de caracteres (e.g. strings) son arreglos en el cual cada elemento almacenado es un carácter (típicamente de un byte si es ASCII). Z-strings (vs L-strings) son los strings usados en C y assembler normalmente, estos strings están terminados por un carácter NULL ASCII (0x00) como delimitador. Al inicializar un string usando el carácter NULL es insertado automaticamente (e.g. hola string ) pero de generar strings carácter por carácter hay que insertar el NULL explicitamente.
12 Ejemplo: Strings Este ejemplo en C recorta largo carácteres de un string, desde la posición inicial ; y devuelve un puntero al string resultante. Se le pasa como argumentos la dirección del string y punteros a variables enteras que contienen la posición inicial y el largo. Entonces, un ejemplo de invocación es: pchar = recortastring(arr, &inicio, &largo); Recordar que en assembler: los argumentos van en registros $a0, $a1, $a2 y resultado en registro $v0 char *recortastring(register char *s, register int *inicial, { } s = s + *inicial; *(s + *largo) = '\0'; return s; register int *largo)
13 Ejemplo: Strings (cont) # v0 = recortastring($a0, $a1, $a2) # char *recortastring(register char *s, register int *inicial, register int *largo) recortastring: # no usa el stack al usar solo registros tn move $t0, $a0 # t0 = s, macro puede usar: addu $t0, $zero, $a0 lw $t2, 0($a1) addu $t0, $t0, $t2 lw $t1, 0($a2) addu $t1, $t0, $t1 sb $zero, 0($t1) move $v0, $t0 # t2 = *inicial # t0 = s + *inicial # t1 = *largo # t1 = s + *largo # *t1 = '\0' Coloca el carácter nulo de fin de string. # vo = nuevo inicio del string recortado. return(s) jr $ra
14 Manipulación de arreglos via índice vs punteros Existen diferencias en la eficiencia de manipular arreglos usando índices vs punteros. void cleararray1(int a[], int celdas) { } int i; for( i = 0; i < celdas ; i++) { } a[i] = 0; Código assembler generado por lcc ($4 = $a0, $5 = $a1) ->.text.ent cleararray1 cleararray1: addu $sp,$sp,-8 sw $30,0($sp) addu $30, $zero, $zero # i = 0 b L.5 L.2: sll $24,$30,2 # $t8 = 4*i addu $24,$24,$4 # $t8 = a + 4*i sw $0,($24) # Mem($t8) = 0 la $30,1($30) # i = i + 1 L.5: blt $30,$5,L.2 # $ i < a1 -> L.2 lw $30,0($sp) addu $sp,$sp,8 j $31.end cleararray1
15 Manipulación de arreglos via índice vs punteros Versión con punteros 1: void clearpunt1(int *a, int celdas) // Versión con punteros { int *p; for( p = a; p < a+celdas ; *p = 0, p++); } Código assembler generado por lcc -> a+celdas es una constante.text.ent clearpunt1 clearpunt1: addu $sp,$sp,-8 sw $30,0($sp) addu $30, $zero, $4 # p = a b L.10 L.7: sw $0,($30) # Mem(p) = 0 la $30,4($30) # p = p + 4 L.10: addu $24, $zero, $30 # $t8 = p sll $15,$5,2 # $t7 = 4*celdas addu $15,$15,$4 # $t7 = a + 4*i bltu $24,$15,L.7 # $t8 < t7 -> L.7 lw $30,0($sp) addu $sp,$sp,8 j $31.end clearpunt1
16 Manipulación de arreglos via índice vs punteros Versión con punteros 2: void clearpunt2(int *a, int celdas) // Versión con punteros { int *p, *q; for( p = a, q=a+celdas; p < q; p++) *p = 0; } En general los punteros son mas eficientes ya que referenciar a+celdas requiere menos instrucciones que a[i] en el lazo interno (inner loop)..text.ent clearpunt2 clearptr2: addu $sp,$sp,-8 sw $23,0($sp) # guardar $s7 en stack sw $30,4($sp) # guardar $fp en stack addu $30, $zero, $4 # p = a sll $24,$5,2 # $t8 = 4*celdas addu $23,$24,$4 # $s7 = a + 4*i b L.15 L.12: sw $0, ($30) # *p = 0 la $30,4($30) # p = p + 4 L.15: addu $24, $zero, $30 # $t8 = p bltu $24,$23,L.12 # if $t8 < $s7 -> L.12 lw $23,0($sp) lw $30,4($sp) addu $sp,$sp,8 j $31.end clearpunt2
17 Estructuras En C se puede definir estructuras que contienen elementos compuestos de diferentes tipos de datos (e.g. int, char, float, etc). Para declarar estas estructuras se usa la palabra struct La dirección del primer campo está dada por la dirección de inicio de la estructura. La dirección del segundo campo está dada por la dirección de inicio de la estructura + tamaño del primer campo. La dirección del tercer campo está dada por la dirección de inicio de la estructura + suma de los tamaños del primer y segundo campo. Puede ser necesario el uso de.space para mantener el alineamiento (ver ejemplo mas adelante)
18 Ejemplo: Estructuras En lenguaje C: struct punto { int x; int y; }; struct punto a = { 1, 2}; /* Se inicializan al definir el espacio */ struct punto b = { 3, 4}; void main(void) { a.x=b.x; a.y=b.y; /* Se puede escribir a = b, pero es una */ } /* copia superficial (o shallow copy) */
19 Ejemplo: Estructuras En lenguaje C: struct punto { int x; int y; }; struct punto a = { 1, 2}; struct punto b = { 3, 4}; void main(void) { a.x=b.x; a.y=b.y; } En assembler:.data structa:.word 1.word 2 structb:.word 3.word 4.text.globl main main: # apuntar a estructuras, registro base con offset la $t0, structb la $t1, structa lw $t3, 0($t0) # t3=b.x sw $t3, 0($t1) lw $t4, 4($t0) # t4=b.y sw $t4, 4($t1) jr ra # retorna del main.
20 Ejemplo: Estructuras con Strings En lenguaje C: struct pixel{ char color[6]; int lugar[2]; }; struct pixel p1 = {"red", {10,20}}; void main(void) { p1.color[0]='g'; p1.color[1]='r'; p1.color[2]='e'; p1.color[3]='e'; p1.color[4]='n'; p1.color[5]='\0'; }
21 Ejemplo: Estructuras con Strings (cont) En lenguaje C: struct pixel{ char color[6]; int lugar[2]; }; struct pixel p1 = {"red", {10,20}}; void main(void) { p1.color[0]='g'; p1.color[1]='r'; p1.color[2]='e'; p1.color[3]='e'; p1.color[4]='n'; p1.color[5]='\0'; } En assembler:.globl p1.data.align 2 p1:.byte 114 # 104 = r en ASCII.byte 101 # 101 = e en ASCII.byte 100 # 100 = d en ASCII.byte 0 # 0 = NULL Terminator.space 2 # 2 bytes de espacio.space 2 # 2 bytes de espacio.word 0xa # 10.word 0x14 # continua...
22 Ejemplo: Estructuras con Strings (cont) En lenguaje C: struct pixel{ char color[6]; int lugar[2]; }; struct pixel p1 = {"red", {10,20}}; void main(void) { p1.color[0]='g'; p1.color[1]='r'; p1.color[2]='e'; p1.color[3]='e'; p1.color[4]='n'; p1.color[5]='\0'; } En assembler: main:.frame $sp,0,$31 la $24,103 # $t8 = g = 103 sb $24,p1 # p1.color[0] = g la $24,114 # $t8 = r = 114 sb $24,p1+1 # p1.color[1] = r la $24,101 # etc... sb $24,p1+2 la $24,101 sb $24,p1+3 la $24,110 sb $24,p1+4 sb $0,p1+5 L.1: j $31.end main
23 Manejo dinámico de la memoria malloc, calloc y free se usan para obtener memoria dinámicamente Del Linux Programmer's Manual (man malloc): NAME calloc, malloc, free, realloc - Allocate and free dynamic memory SYNOPSIS #include <stdlib.h> void *calloc(size_t nmemb, size_t size); void *malloc(size_t size); void free(void *ptr); DESCRIPTION calloc() allocates memory for an array of nmemb elements of size bytes each and returns a pointer to the allocated memory. The memory is set to zero. malloc() allocates size bytes and returns a pointer to the allocated memory. The memory is not cleared.
24 Manejo dinámico de la memoria (cont) Se puede usar la función estándar sizeof para determinar el número de bytes de un cierto tipo de datos que se solicitaran al administrador de memoria (parte del sistema operativo) sizeof(char *) es igual a 4 (un word) y no refleja el tamaño de un string (usar strlen) Si es posible asignar espacio retorna un puntero a carácter del primer byte asignado; en caso contrario retorna Null. El administrador dinámico mantiene datos para asignar y desasignar segmentos de memoria en la zona de memoria dinámica (denominada heap). En MIPS por defecto el inicio del segmento datos es 0x el comienzo del heap es 0x y el comienzo de datos estáticos es 0x
25 Organización de Memoria en MIPS (spim) $sp Memory Mem Map I/O f f f f f f f c Kernel Code & Data Stack 7f f e f f fc 2 30 words $gp PC Dynamic data Static data Your Code Reserved OS
26 Manejo dinámico de la memoria (cont) El código siguiente ilustra la forma de pedir espacio para un entero y luego libera el espacio asignado. #include <stdio.h> #include <stdlib.h> /* Para incluir prototipos de malloc y free */ int main(void) { } int *punt=0; /*Define e inicia puntero*/ punt = (int *) malloc(sizeof(int));/*pide espacio y lo encadena. */ if (punt ==0) return(1); /* si no hay espacio */ *punt=5; printf("%d\n",*punt); free(punt); return(0); /*Libera espacio*/
27 Manejo dinámico de la memoria (cont) Otro ejemplo de asembler MIPS usando servicios: main:... li $v0,9 # $v0=9 para pedir memoria en heap (sbrk) li $a0,8 # se pide en bytes (dos palabras) syscall # heap por defecto en 0x move $t0,$v0 # retorna en $v0 un puntero al espacio li $t1,0xffffffff sw $t1,0($t0) # escribe en las celdas asignadas. sw $t1,4($t0)
Direccionamiento y Estructuras de Datos.
Capítulo 7. 1 Direccionamiento y Estructuras de Datos. Una vez conocidos los mecanismos de direccionamiento de un procesador es útil visualizar cómo se pueden emplear para manipular arreglos y estructuras.
Más detallesFunciones. Diseño de funciones. Uso de instrucción jal y retorno de subrutina.
MIPS Funciones 1 Funciones Diseño de funciones. Uso de instrucción jal y retorno de subrutina. Se suelen denominar funciones, procedimientos, subrutinas, subprogramas a las estructuras que emplean los
Más detallesAnalista Universitario en Sistemas. Taller de Programación II. Instituto Politécnico Superior MEMORIA DINAMICA
MEMORIA DINAMICA 1 Introducción La allocación dinámica de memoria en C trata de la solicitud de memoria en tiempo de ejecución La memoria se administra estática, automática o dinámicamente - Las variables
Más detallesProgramación 1 Grado de Ingeniería Robótica
Programación 1 Grado de Ingeniería Robótica Tema 6: Datos estructurados Índice (sesión 11/11/2015): Arrays estáticos Cadenas de caracteres Funciones de la librería string.h Punteros Declaración de punteros
Más detallesPunteros. Programación en C 1
Punteros Programación en C 1 Índice Variables y direcciones de memoria. Punteros definición, declaración e inicialización. Punteros declaración, asignación y dereferencia. Puntero nulo, tipo void. Aritmética
Más detallesTema 18: Memoria dinámica y su uso en C
Tema 18: Memoria dinámica y su uso en C M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com edfrancom@ipn.mx @edfrancom edgardoadrianfrancom Estructuras de datos (Prof. Edgardo A. Franco) 1
Más detallesGeneración de un ejecutable
ASSEMBLER Generación de un ejecutable Programa de alto nivel Programa Compiler Assembler Linker Archivo Ejecutable Programa en lenguaje assembler Archivo Fuente Assembler Archivo Objeto Archivo Fuente
Más detallesUNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA ELO311 Estructuras de Computadores Programación Assembler.
2. Creación del ambiente de trabajo. Una vez instalado el compilador cruzado lcc, éste queda en C:\Program Files\lcc\4.1 Conviene crear una subcarpeta para colocar los ejemplos. Sea ésta ej. En la carpeta
Más detallesCreación del ambiente de trabajo.
Capítulo 2. 1 Creación del ambiente de trabajo. Una vez instalado el compilador cruzado lcc, éste queda en C:\Program Files\lcc\4.1 Conviene crear una subcarpeta para colocar los ejemplos. Sea ésta ej.
Más detallesGuía práctica de estudio 04. Almacenamiento en tiempo de ejecución
Guía práctica de estudio 04. Almacenamiento en tiempo de ejecución Elaborado por: M.C. Edgar E. García Cano Ing. Jorge A. Solano Gálvez Autorizado por: M.C. Alejandro Velázquez Mena Guía práctica de estudio
Más detallesPUNTEROS (Apuntadores)
PUNTEROS (Apuntadores) Unidad III INTRODUCCIÓN A PUNTEROS. CONCEPTOS BÁSICOS. DECLARACIÓN DE PUNTEROS. PUNTEROS Como una colección de posiciones de memoria consecutivas. En ella se almacenan los distintos
Más detalles2. Variables dinámicas
2. Variables dinámicas 1. Introducción 2. Gestión de memoria dinámica 3. Punteros y variables dinámicas en lenguaje algorítmico 4. Gestión de memoria dinámica y punteros en C Bibliografía Biondi y Clavel.
Más detallesPUNTEROS (APUNTADORES)
2010 UNAN LEON Departamento de Computación Ing. En Sistemas Sabatino Autor: Ing: Karina Esquivel Alvarado. Asignatura: Algoritmo y Estructura de Datos. PUNTEROS (APUNTADORES) TEMA 4: PUNTEROS (APUNTADORES)
Más detallesGESTIÓN DE MEMORIA DINÁMICA EN C 1. Creación y destrucción de variables dinámicas
GESTIÓN DE MEMORIA DINÁMICA EN C 1. Creación y destrucción de variables dinámicas en lenguaje algorítmico Partimos de: p: puntero de tipo T; ok, lógico; En general, el MGMD dispondrá d de alguna versión
Más detallesMemoria Dinámica. Jornadas de Marzo 2010 Grupo de Usuarios de Linux Tania Pérez
Jornadas de Marzo 2010 Grupo de Usuarios de Linux Tania Pérez 1. PUNTEROS 2. MEMORIA DINÁMICA 2 1. PUNTEROS 3 Qué es un puntero? Un tipo de variable cuyo valor es la dirección de memoria de otra variable.
Más detallesTema 13: Apuntadores en C
Tema 13: Apuntadores en C M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com edfrancom@ipn.mx @edfrancom edgardoadrianfrancom Estructuras de datos (Prof. Edgardo A. Franco) 1 Contenido Introducción
Más detallesClase Práctica Administración de Memoria en C. Organización de Computadoras Depto. Cs. e Ing. de la Comp. Universidad Nacional del Sur
Clase Práctica Administración de Memoria en C Depto. Cs. e Ing. de la Comp. Universidad Nacional del Sur Copyright Copyrigth 2018 Ing. Federico Joaquín. Las presentes transparencias constituyen una guía
Más detallesELO311 Estructuras de Computadores Digitales. Ambiente de Ejecución de Funciones
ELO311 Estructuras de Computadores Digitales Ambiente de Ejecución de Funciones Tomás Arredondo Vidal Este material está basado en: material de apoyo del texto de David Patterson, John Hennessy, "Computer
Más detallesRepaso 02: Apuntadores y manejo de memoria dinámica
Repaso 02: Apuntadores y manejo de memoria dinámica Solicitado: Ejercicios 02: Programación con memoria dinámica M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com edfrancom@ipn.mx @edfrancom
Más detallesApuntadores en C y C++
Apuntadores en C y C++ Universidad de Carabobo Facultad Experimental de Ciencias y Tecnología Prof. Marcos A. Gil T. 8 de diciembre de 2004 1. Introducción Los apuntadores en C y C++ son una herramienta
Más detallesGrupo de Arquitectura y Tecnología de Computadores (ARCOS)
Grupo de Arquitectura y Tecnología de Computadores (ARCOS) http://arcos.inf.uc3m.es/~ec 2 http://arcos.inf.uc3m.es/~ec 4 http://arcos.inf.uc3m.es/~ec 5 http://arcos.inf.uc3m.es/~ec 6 Código fuente en
Más detallesManejo de memoria en C
Manejo de memoria en C Todas las variables, en el lenguaje C, se definen dentro de alguna función, fuera de esa función no es posible acceder a ellas. Al entrar a una función, a cada una de las variables
Más detallesUNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA ELO320 Estructuras de Datos y Algoritmos. 3. Estructuras. Tomás Arredondo Vidal
26/8/2008 UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA ELO320 Estructuras de Datos y Algoritmos 3. Estructuras Tomás Arredondo Vidal 1.Arreglos (arrays) Los arreglos son estructuras
Más detallesApuntadores y Memoria dinámica. Apuntadores. M.C. Yolanda Moyao Martínez
Apuntadores y Memoria dinámica Apuntadores M.C. Yolanda Moyao Martínez Por que? Es la única forma de expresar algunos cálculos. Se genera código compacto y eficiente. Es una herramienta muy poderosa. Uso
Más detallesProgramación I Teoría III.
Programación I Teoría III http://proguno.unsl.edu.ar proguno@unsl.edu.ar DATOS ESTRUCTURADOS Estructuras de Datos Hasta ahora hemos trabajado con Datos simples enteros reales Caracteres punteros Sin embargo,
Más detallesPunteros. 1.- Paso de parámetros por referencia. Ya hablamos de ésto en funciones. 2.- Declaración de arreglos dinámicos.
1 Punteros. Dentro de la memoria de la computadora cada dato almacenado ocupa una o más celdas contiguas de memoria. El número de celdas de memoria requeridas para almacenar un dato depende de su tipo.
Más detallesESTRUCTURA DE DATOS. Memoria estática Memoria dinámica Tipo puntero Declaración de punteros Gestión de memoria dinámica Resumen ejemplo
ESTRUCTURA DE DATOS Memoria estática Memoria dinámica Tipo puntero Declaración de punteros Gestión de memoria dinámica Resumen ejemplo DATOS ESTÁTICOS Su tamaño y forma es constante durante la ejecución
Más detallesApuntadores (Punteros)
Apuntadores (Punteros) x9ff10 X int 209 SESION 7 *ptr Definición Llamados también punteros. Un Apuntador es una variable que contiene una dirección de memoria, la cual corresponderá a un dato o a una variable
Más detallesAlgoritmos y estructuras de datos
Algoritmos y estructuras de datos Estructuras, apuntadores y memoria dinámica Francisco Javier Zaragoza Martínez Universidad Autónoma Metropolitana Unidad Azcapotzalco Departamento de Sistemas 11 de mayo
Más detallesAlgoritmos y Programación I
Algoritmos y Programación I ARREGLOS Y ESTRUCTURAS EN C Arreglos Un arreglo o vector es un conjunto de datos del mismo tipo, almacenados de forma contigua (es decir uno al lado del otro) en memoria principal.
Más detallesInformática Ingeniería en Electrónica y Automática Industrial
Informática Ingeniería en Electrónica y Automática Industrial Asignación dinámica de memoria en lenguaje C V1.2 Asignación dinámica de memoria en lenguaje C Definición La memoria en los programa en ejecución
Más detallesLaboratorio 2: Uso de un Simulador MIPS32: PCSpim
Laboratorio 2: Uso de un Simulador MIPS32: PCSpim Objetivos. Dominar el uso de un simulador assembler y herramientas para la depuración de programas. Analizar la creación de frames en la invocación de
Más detallesAlgoritmo, Estructuras y Programación II Ing. Marglorie Colina
Unidad III Punteros Algoritmo, Estructuras y Programación II Ing. Marglorie Colina Ejemplo: Paso de Punteros a una Función Arreglos (Arrays) Unidimensionales Los Arreglos son una colección de variables
Más detallesUn puntero no es más que una variable estática cuyo contenido es una dirección de memoria.
Los punteros en C 1 Introducción Cómo se organiza la memoria asociada a un programa? Como una colección de posiciones de memoria consecutivas. En ellas se almacenan los distintos tipos de datos, que ocupan,
Más detallesESTRUCTURAS. Struct Identificador_ tipo_estructura { Tipo miembro_1; /*Declaración de los miembros*/
DECLARACION DE ESTRUCTURAS ESTRUCTURAS La estructura es una colección de variables, la cual puede poseer distintos tipos de datos (a diferencia de los arreglos que solamente pueden tener un solo tipo de
Más detallesUniversidad del Papaloapan
Universidad del Papaloapan Materia: Programación Estructurada Tema: Punteros Expositor: M. C. Bertha López Azamar Tuxtepec, Oaxaca. Enero/2005-2006 1 PUNTEROS M. C. Bertha López Azamar Un tema muy ligado
Más detallesEstructuras y Uniones
1 Estructuras y Uniones Estructuras. Las estructuras ( struct ) son agrupaciones de una o más variables de tipos posiblemente diferentes, agrupadas bajo un mismo nombre. Esto permite un manejo más cómodo
Más detallesPunteros. Índice. 1. Qué es un puntero y por que son importantes.
Punteros Índice 1. Qué es un puntero y por que son importantes. 2. Punteros a tipos básicos. 3. Punteros sin tipo. 4. Memoria dinámica. 5. Punteros a estructuras. 6. Punteros a matrices. 7. Punteros a
Más detallesMIPS. Universidad de Sonora 2
MIPS MIPS (Microprocessor without Interlocked Pipeline Stages) es una familia de microprocesadores RISC desarrollada por MIPS Technologies desde 1981 y por Imagination Technologies desde 2012. Principio
Más detallesPunteros y Memoria Dinámica I
Memoria Punteros y Memoria Dinámica I Curso INEM. Programación en C++ Santiago Muelas Pascual smuelas@fi.upm.es! Lugar donde almacenan los datos y las instrucciones! Compuesta de un gran número de bytes!
Más detallesLaboratorio de Arquitectura de Redes. Punteros en lenguaje C
Laboratorio de Arquitectura de Redes Punteros en lenguaje C Punteros en lenguaje C Definición Declaración e inicialización de punteros Operadores de punteros: «*» y «&» Operaciones con punteros Operaciones
Más detallesEstructura de Computadores 2 [08/09] Entrada/Salida en procesadores MIPS
Estructura de Computadores 2 [08/09] Entrada/Salida en procesadores MIPS GAC: Grupo de Arquitectura de Computadores Dpt. Electrónica e Sistemas. Universidade da Coruña. Bibliografía Computer Organization
Más detallesProgramación I Teoría II.
Programación I Teoría II http://proguno.unsl.edu.ar proguno@unsl.edu.ar MODULARIDAD FUNCIONES EN C Modularidad Principio para resolución de problemas: Dividir para reinar Modularidad Módulo Función Procedimiento
Más detalles3.1. Definición de datos enteros como variables globales.
3. Variables. 3.. Definición de datos enteros como variables globales. El siguiente segmento ilustra una serie de definiciones de enteros inicializados. En C, se denomina definición de datos, la instancia
Más detallesFUNDAMENTOS DE PROGRAMACIÓN. PRÁCTICA 11: Apuntadores
Objetivos El alumno conocerá y aplicará el concepto de apuntadores para la solución de programas en Lenguaje C Introducción Un apuntador es una variable que mantiene la dirección de memoria de un elemento
Más detallesLaboratorio de Arquitectura de Redes. Asignación dinámica de memoria en lenguaje C
Laboratorio de Arquitectura de Redes Asignación dinámica de memoria en lenguaje C Asignación dinámica de memoria en lenguaje C Definición La memoria en los programa en ejecución Asignación y liberación
Más detallesUNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA ELO311 Estructuras de Computadores
6.5. Comunicación de las funciones con su entorno. Hasta el momento se ha conceptualizado una subrutina como un segmento de código que ocurre a menudo en un programa. La idea puede flexibilizarse y aumentar
Más detallesEl operador contenido ( ) permite acceder al contenido de
3. Memoria Dinámica y Punteros Objetivos: Distinguir los conceptos de memoria estática y memoria dinámica Comprender el concepto de puntero como herramienta de programación Conocer cómo se definen y cómo
Más detallesEjercicio 1. Considere el siguiente fragmento en ensamblador:
UNIVERSIDAD CARLOS III DE MADRID DEPARTAMENTO DE INFORMÁTICA GRADO EN INGENIERÍA INFORMÁTICA. ESTRUCTURA DE COMPUTADORES Para la realización del presente examen se dispondrá de 1:30 horas. NO se podrán
Más detalles05 Funciones en lenguaje C. Diego Andrés Alvarez Marín Profesor Asociado Universidad Nacional de Colombia Sede Manizales
05 Funciones en lenguaje C Diego Andrés Alvarez Marín Profesor Asociado Universidad Nacional de Colombia Sede Manizales 1 Temario Programación funcional Declaración (prototipos) y definición de funciones
Más detallesPunteros. Lenguaje C ANSI
Punteros. Lenguaje C ANSI Qué es un PUNTERO?: Un puntero es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la dirección de memoria de otra variable. No hay que confundir una dirección
Más detallesInformática Ingeniería en Electrónica y Automática Industrial
Informática Ingeniería en Electrónica y Automática Industrial Punteros en lenguaje C Punteros en lenguaje C Definición Declaración e inicialización de punteros Operadores de punteros: «*» y «&» Operaciones
Más detallesTEMA 7. ARRAYS (LISTAS Y TABLAS).
TEMA 7. ARRAYS (LISTAS Y TABLAS). En capítulos anteriores se han descrito las características de los tipos de datos básicos o simples (carácter, entero y coma flotante). Asimismo, se ha aprendido a definir
Más detalles* Operador de Indirección ( o de referencia ) ( o de desreferencia )
PUNTEROS INTRODUCCION Una de las características más poderosas del C, es el puntero o apuntador. Los punteros permiten simular las llamadas por referencia y crear y manipular estructuras de datos dinámicas,
Más detallesProgramación en ensamblador Ejercicios propuestos
Programación en ensamblador Ejercicios propuestos Ejercicio 1. Dada la siguiente expresión de un lenguaje de alto nivel int a = 6; int b = 7; int c = 3; int d; d = (a+b) * (a+b); Indique un fragmento de
Más detallesPUNTEROS EN C (APUNTADORES)
2010 UNAN LEON Departamento de Computación Ing. En Sistemas Sabatino Autor: Ing: Karina Esquivel Alvarado. Asignatura: Programación Estructurada PUNTEROS EN C (APUNTADORES) TEMA 10: PUNTEROS (APUNTADORES)
Más detallesTipos de Datos Recursivos
1/1 Tipos de Datos Recursivos Josefina Sierra Santibáñez 15 de mayo de 2018 2/1 Introducción La recursividad no sólo se puede aplicar a la definición de procedimientos (i.e. funciones o acciones), sino
Más detallesELO311 Estructuras de Computadores Digitales. Operaciones MIPS para Control de flujo
ELO311 Estructuras de Computadores Digitales Operaciones MIPS para Control de flujo Tomás Arredondo Vidal Este material está basado en: material de apoyo del texto de David Patterson, John Hennessy, "Computer
Más detallesEl repertorio de instrucciones
El repertorio de instrucciones Montse Bóo Cepeda Este trabajo está publicado bajo licencia Creative Commons Attribution- NonCommercial-ShareAlike 2.5 Spain. Estructura del curso 1. Evolución y caracterización
Más detallesProgramación en ensamblador Ejercicios resueltos
Programación en ensamblador Ejercicios resueltos Ejercicio 1. Dado el siguiente fragmento de programa en ensamblador..globl main main:... li $a0, 5 jal funcion move $a0, $v0 li $v0, 1 li $v0, 10 funcion:
Más detallesCAPITULO 2: VARIABLES Y CONSTANTES
CAPITULO 2: VARIABLES Y CONSTANTES 1. TIPOS DE DATOS. Existen cinco tipos de datos atómicos en C; char: carácter, int: entero, float: real coma flotante, double: real de doble precisión y void: sin valor.
Más detallesEstructuras Dinámicas
Departamento de Lenguajes yciencias de la Computación 4 Estructuras Dinámicas Contenido 1. Gestión dinámica de memoria. 2. El tipo puntero. 3. Operaciones con punteros. 4. Operaciones básicas sobre listas
Más detallesTipos Recursivos de Datos
1/1 Tipos Recursivos de Datos Josefina Sierra Santibáñez 27 de noviembre de 2016 2/1 Introducción La recursividad no sólo se puede aplicar a la definición de procedimientos (i.e. funciones o acciones),
Más detallesEjercicios del Tema 3. Fundamentos de la programación en ensamblador
Ejercicios del Tema 3. Fundamentos de la programación en ensamblador Ejercicio 1. Dada la siguiente expresión de un lenguaje de alto nivel int a = 6; int b = 7; int c = 3; int d; d = (a+b) * (a+b); Indique
Más detalles3.1. Definición de datos enteros como variables globales.
Capítulo 3. Variables. 3.. Definición de datos enteros como variables globales. El siguiente segmento ilustra una serie de definiciones de enteros inicializados. En C, se denomina definición de datos,
Más detallesEstructura de Datos ARREGLOS
Estructura de Datos ARREGLOS ESTRUCTURAS DE INFORMACIÓN Una estructura de datos o de información es una colección de datos que pueden ser caracterizados por su organización y las operaciones que se definen
Más detallesTipos de Datos Estructurados
Departamento de Informática Universidad Técnica Federico Santa María Tipos de Datos Estructurados Programación de Computadores IWI-131-p1 Prof.: Teddy Alfaro Olave Arreglos (array) El arreglo es un tipo
Más detallesARREGLOS, PUNTEROS Y ASIGNACIÓN DINÁMICA DE MEMORIA
CAPÍTULO 3 ARREGLOS, PUNTEROS Y ASIGNACIÓN DINÁMICA DE MEMORIA Un arreglo, también llamado matriz (array), es un conjunto de elementos dispuestos secuencialmente, que contienen datos del mismo tipo. El
Más detalles2.2 Nombres, Ligado y Ámbito
2.2 Nombres, Ligado y Ámbito Ligado estático y dinámico, reglas de ámbito y prueba de tipos. Conceptos Nombres e Identificadores Variables Tipos Ámbito Constantes Nombres Identificador que designa en el
Más detallesCurso de Programación en C. Licenciatura, FCQeI. APUNTADORES.
APUNTADORES. La memoria de una máquina esta ordenada en forma de celdas numeradas consecutivamente y que se pueden manipular individualmente o en grupos contiguos. La siguiente figura muestra una representación
Más detallesCurso de Introducción a C en Plan 9
Curso de Introducción a C en Plan 9 Enrique Soriano Laboratorio de Sistemas Grupo de Sistemas y Comunicaciones URJC 3 de febrero de 2010 (cc) 2010 Enrique Soriano Salvador Algunos derechos reservados.
Más detallesUn puntero no es más que una variable estática cuyo contenido es una dirección de memoria.
Los punteros en C 1 Introducción Cómo se organiza la memoria asociada a un programa? Como una colección de posiciones de memoria consecutivas. En ellas se almacenan los distintos tipos de datos, que ocupan,
Más detallesIng. Informática Programación I Bloque 7
Bloque 7 Punteros Estructuras de datos dinámicas Hasta ahora: todos los tios tienen un tamaño estático (que se determina en tiemo de comilación) Ahora: tios de datos dinámicos, cuyo tamaño no es fijo y
Más detallesAsignación Dinámica de Memoria. Agustín J. González Versión original de Kip Irvine ELO 326: Seminario II 2do. Sem. 2001
Asignación Dinámica de Memoria Agustín J. González Versión original de Kip Irvine ELO 326: Seminario II 2do. Sem. 2001 1 Asignación Dinámica Asignación Dinámica es la creación de un objeto mientras el
Más detallesTema 3 (III) Fundamentos de la programación en ensamblador
Tema 3 (III) Fundamentos de la programación en ensamblador Grupo ARCOS Estructura de Computadores Grado en Ingeniería Informática Universidad Carlos III de Madrid Contenido } Fundamentos básicos de la
Más detallesTema 11: Manejo de cadenas en C
Tema 11: Manejo de cadenas en C M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com edfrancom@ipn.mx @edfrancom edgardoadrianfrancom Estructuras de datos (Prof. Edgardo A. Franco) 1 Contenido
Más detallesFundamentos y Arquitectura de Computadores (ITTSE UV)
REGISTROS DEL MIPS32 Nombre Código del Uso común registro $zero 0 El contenido de este registro siempre es nulo $v0 - $v1 2 3 Valores de retorno para las llamadas al sistema $a0 - $a3 4 7 Argumentos para
Más detallesProgramación. Test Autoevaluación Tema 3
Programación Test Autoevaluación Tema 3 Autores: M. Paz Sesmero Lorente Paula de Toledo Heras Fco. Javier Ordoñez Morales Juan Gómez Romero José A. Iglesias Martínez José Luis Mira Peidro SOLUCIONES 1.
Más detallesINTRODUCCIÓN AL LENGUAJE DE PROGRAMACIÓN C
INTRODUCCIÓN AL LENGUAJE DE PROGRAMACIÓN C Programación en Entornos Multitarea Curso 2006/2007 Introducción C: lenguaje de medio nivel 32 palabras clave Eficiencia de ejecución del código generado Portabilidad
Más detalles1. Presentación del lenguaje C Creado en 1972 por D. Ritchie Lenguaje de propósito general Portátil o transportable (generalmente) Inicialmente de niv
Introducción al lenguaje C Informática Belarmino Pulido Junquera Índice 1. Presentación del lenguaje C 2. Estructura de un programa en C 3. Instrucciones del pre-procesador procesador 4. Tipos de datos
Más detallesRESEÑA DE LENGUAJE C
RESEÑA DE LENGUAJE C VARIABLES La función main. Es el punto de entrada al programa. void main(void) Aquí escribo mi programa Tipos de datos. Char. El char es una variable de 1 byte. Almacena números enteros.
Más detallesArquitectura del MIPS: Introducción
Arquitectura del MIPS: Introducción Montse Bóo Cepeda Este trabajo está publicado bajo licencia Creative Commons Attribution- NonCommercial-ShareAlike 2.5 Spain. Estructura del curso 1. Evolución y caracterización
Más detallesMIPS: Modelo de programación. (I Parte)
MIPS: Modelo de programación (I Parte) MIPS: Microprocessor without Interlocked Pipeline Stages Trabajaremos como MIPS Son similares a las desarrolladas en los años 80 Cerca de 100 millones de procesadores
Más detallesTema 13: Manejo de archivos en lenguaje C
Tema 13: Manejo de archivos en lenguaje C M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com edfrancom@ipn.mx @edfrancom edgardoadrianfrancom Estructuras de datos (Prof. Edgardo A. Franco)
Más detallesPráctica 2 - Manejo de estructuras de datos y punteros
Práctica 2 - Manejo de estructuras de datos y punteros Organización del Computador 2 1er Cuatrimestre 2017 1. Estructuras estáticas: Vectores y Matrices Ejercicio 1 Para cada uno de los siguientes ítems,
Más detallesELO311 Estructuras de Computadores Digitales. Ensamblador MIPS
ELO311 Estructuras de Computadores Digitales Ensamblador MIPS Tomás Arredondo Vidal Este material está basado en: material de apoyo del texto de David Patterson, John Hennessy, "Computer Organization &
Más detallesTema 10: Arreglos estáticos en C
Tema 10: Arreglos estáticos en C M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com edfrancom@ipn.mx @edfrancom edgardoadrianfrancom Estructuras de datos (Prof. Edgardo A. Franco) 1 Contenido
Más detallesIntroducción al lenguaje C
Introducción al lenguaje C Programación 2 Instituto de Computación, Facultad de Ingeniería, Universidad de la República, Uruguay 2 de marzo de 2016 Programación 2 Introducción al lenguaje C 2 de marzo
Más detallesvoid clear1( int array[], int size ) /* Versión con arreglos */ { int i; for( i = 0; i < size; i++) array[i] = 0; }
2.10 Apuntadores contra arreglos. El manejo de apuntadores es uno de los aspectos más interesantes en los lenguajes de programación; los apuntadores y los arreglos comparten algunas características, sin
Más detallesTeoría 8: Segunda Parte. Estructuras de Datos y Funciones de Entrada en Lenguaje C
Teoría 8: Segunda Parte Estructuras de Datos y Funciones de Entrada en Lenguaje C Int. a la Computación-Int. a la Programación Fund. De la Informática Primer Cuatrimestre 2018 Lenguaje C Objetos de Datos
Más detallesMemoria Dinámica en C++
Memoria Dinámica en C++ Algoritmos y Estructuras de Datos II DC-FCEyN-UBA 26 de Agosto de 2015 AED2 (DC-FCEyN-UBA) Memoria Dinámica en C++ 26 de Agosto de 2015 1 / 46 Repaso: Qué es una variable? Matemática:
Más detallesTipos de datos y Operadores Básicos
Módulo I: Conceptos Básicos Tema 1. Qué es un ordenador? Tema 2. Cómo se representan los datos en un ordenador? Tema 3. Qué es un lenguaje de programación? Tema 4. Cómo se hace un programa informático?
Más detallesPunteros. Definición Un puntero es un dato que contiene una dirección de memoria.
Punteros Definición Un puntero es un dato que contiene una dirección de memoria. NOTA: Existe una dirección especial que se representa por medio de la constante NULL (definida en ) y se emplea
Más detallesLenguaje C, tercer bloque: Funciones
Lenguaje C, tercer bloque: Funciones José Otero 1 Departamento de informática Universidad de Oviedo 28 de noviembre de 2007 Índice 1 Tipo puntero Concepto de puntero Operador dirección Operador indirección
Más detallesInformática PRÀCTICA 9 Curs Práctica Nº 9: Rango y precisión de representación de números en el ordenador.
Departamento de Práctica Nº 9: Rango y precisión de representación de números en el ordenador. Uso de punteros Objetivos de la práctica: - Entender la representación de números (enteros y reales) en el
Más detallesTema 8 Punteros. Fundamentos de Informática
Tema 8 Punteros Fundamentos de Informática Contenidos Qué es un puntero? Declaración de punteros Operadores unarios: & y * Operaciones con punteros Aritmética de punteros Punteros y funciones Punteros
Más detallesELO311 Estructuras de Computadores Digitales. Algoritmos de Multiplicación y División
ELO311 Estructuras de Computadores Digitales Algoritmos de Multiplicación y División Tomás Arredondo Vidal Este material está basado en: material de apoyo del texto de David Patterson, John Hennessy, "Computer
Más detalles