Unidad 2
Introducción 📜
Sección titulada «Introducción 📜»En esta unidad descubrirás cómo se traducen algunos conceptos fundamentales de la programación en alto nivel, como condicionales, ciclos, punteros y arreglos, a lenguaje ensamblador. Utilizarás el lenguaje Hack de la unidad anterior para implementar estos conceptos. Esta unidad servirá como puente para la siguiente unidad, donde exploraremos algunos conceptos fundamentales utilizando el lenguaje de programación C++.
Set: ¿Qué aprenderás en esta unidad? 💡
Sección titulada «Set: ¿Qué aprenderás en esta unidad? 💡»En esta unidad aprenderás la relación entre el lenguaje ensamblador y un lenguaje de alto nivel como C++. Aprenderás a traducir conceptos de alto nivel a bajo nivel, y viceversa. Además, desarrollarás programas que implementan estos conceptos en el lenguaje ensamblador del computador Hack. Vas a explorar estos conceptos usando el simulador del Hack. Y por favor, SIEMPRE SIMULA y aplica la metodología de predice, ejecuta, observa y reflexiona.
Actividad 01
Sección titulada «Actividad 01»Dibujando un punto en la pantalla
Sección titulada «Dibujando un punto en la pantalla»Vamos a resolver juntos este problema:
La pantalla del computador Hack se controla a través de un mapa de memoria que comienza en la dirección 16384 (SCREEN). Cada bit en este mapa de memoria representa un pixel en la pantalla (1 = negro, 0 = blanco). Escribe un programa que dibuje un punto negro en la esquina superior izquierda de la pantalla. (Recuerda que la esquina superior izquierda corresponde al primer bit del primer word en la dirección SCREEN).
Traduce este programa a lenguaje C++ para que relaciones cómo los conceptos de alto nivel se traducen a bajo nivel.
Actividad 02
Sección titulada «Actividad 02»Dibujando una línea horizontal
Sección titulada «Dibujando una línea horizontal»Vamos a resolver juntos este problema:
Modifica el programa anterior para que dibuje una línea horizontal negra de 16 pixeles de largo en la esquina superior izquierda de la pantalla. (Recuerda que cada word en la memoria representa 16 pixeles).
Traduce este programa a lenguaje C++ para que relaciones cómo los conceptos de alto nivel se traducen a bajo nivel.
Actividad 03
Sección titulada «Actividad 03»Entrada salida interactiva
Sección titulada «Entrada salida interactiva»Modifica el programa de la actividad anterior de tal manera que puedas mover la línea horizontal de derecha a izquierda usando las teclas d y i respectivamente. Tu programa no tiene que verificar si la línea se sale de la pantalla.
Traduce este programa a lenguaje C++ para que relaciones cómo los conceptos de alto nivel se traducen a bajo nivel.
Seek: Investigación 🔎
Sección titulada «Seek: Investigación 🔎»Actividad 04
Sección titulada «Actividad 04»Convierte un ciclo while en un ciclo for
Sección titulada «Convierte un ciclo while en un ciclo for»Enunciado: considera el siguiente programa:
//Adds 1+...+100. int i=1; int sum=0;
while(i <=100){ sum+= i; i++; }
Una traducción a ensamblador es como sigue:
// Adds1+...+100. @i // i refers to some memory location. M=1 // i=1 @sum // sum refers to some memory location. M=0 // sum=0 (LOOP) @i D=M // D=i @100 D=D-A // D=i-100 @END D;JGT // If(i-100)>0 gotoEND @i D=M // D=i @sum M=D+M // sum=sum+i @i M=M+1 // i=i+1 @LOOP 0;JMP // GotoLOOP (END) @END 0;JMP // Infinite loop
Vamos a transformar este programa a su equivalente usando un ciclo for:
//Adds 1+...+100.int sum=0;for(int i = 1; i <=100; i++){ sum+= i;}
- Analiza los programas con while y for asegúrate de entender por qué son equivalentes.
- Convierte la versión del for a ensamblador.
- No olvides comprobar el funcionamiento de los programas en ensamblador en el simulador.
- Compara las versiones en ensamblador del while y del for. ¿Qué puedes concluir?
Actividad 05
Sección titulada «Actividad 05»Punteros
Sección titulada «Punteros»Un puntero es una variable que almacena la dirección de memoria de otra variable. Observa el siguiente programa escrito en C++:
int a = 10;int* p;p = &a;*p = 20;
El programa anterior modifica el contenido de la variable a por medio de la variable p. p es un puntero porque almacena la dirección de memoria de la variable a. En este caso el valor de la variable a será 20 luego de ejecutar *p = 20;.
Ahora analiza con detenimiento:
- ¿Cómo se declara un puntero en C++?
int* p;
p es una variable que almacenará la dirección de otra variable. Dicha variable almacenará número enteros.
- ¿Cómo se define (nota que antes preguntamos cómo se declara) un puntero en C++?
p = &a;.
Definir el puntero es inicializar el valor del puntero, es decir, guardar la dirección de una variable. En este caso p contendrá la dirección de a o podemos decir que p apunta a a
- ¿Cómo se almacena en C++ la dirección de memoria de una variable? Con el operador &.
p = &a;
- ¿Cómo se escribe el contenido de la variable a la que apunta un puntero? Con el operador *.
*p = 20;
En este caso como p contiene la dirección de a. Por tanto, se está modificando el valor de la variable a por medio de p.
Ahora vas a usar un puntero para leer la posición de memoria a la que este apunta, es decir, vas a leer por medio del puntero la variable cuya dirección está almacenada en él.
int a = 10;int b = 5;int *p;p = &a;b = *p;
En este caso:
b = *p;
el código anterior hace que el valor de b cambie de 5 a 10 porque p apunta a a y con *p a la derecha del igual estás leyendo el contenido de la variable apuntada.
Apply: Aplicación 🛠
Sección titulada «Apply: Aplicación 🛠»Actividad 06
Sección titulada «Actividad 06»Experimenta con arreglos
Sección titulada «Experimenta con arreglos»Los arreglos son colecciones de datos en la memoria.
Considera el siguiente programa
int arr[] = {1,2,3,4,5,6,7,8,9,10};int sum = 0;
for (int j = 0; j < 10; j++) { sum = sum + arr[j];}
Reflect: Consolidación y metacognición 🤔
Sección titulada «Reflect: Consolidación y metacognición 🤔»Actividad 07
Sección titulada «Actividad 07»Autoevaluación
Sección titulada «Autoevaluación»Mirando hacia adentro: autoevaluación de conceptos y proceso
El objetivo de esta actividad es que recuperes de tu memoria los conceptos que conectan la programación de alto nivel con el lenguaje ensamblador. Al forzarte a recordar sin ver tus notas (práctica de recuperación), estás fortaleciendo las conexiones neuronales de ese conocimiento. Además, reflexionarás sobre tu proceso para convertirte en un aprendiz más consciente y estratégico.
Actividad 08
Sección titulada «Actividad 08»Coeveluyación
Sección titulada «Coeveluyación»Aprendiendo juntos: coevaluación constructiva
En esta actividad vas a revisar la actividad 06 de tu compañero. Vas a simular paso a paso su programa y dejarle comentarios constructivos. Recuerda que todo lo harás en tu propia bitácora de aprendizaje y luego compartirás lo que registraste con tu compañero.
Actividad 09
Sección titulada «Actividad 09»Feedback
Sección titulada «Feedback»Mejorando la experiencia: tu feedback es clave
Tu perspectiva como estudiante es el recurso más importante para que yo pueda mejorar este curso. Esta actividad es tu espacio para compartir de forma honesta qué funcionó, qué no y qué ideas tienes para hacer la experiencia de aprendizaje aún mejor.