Ensamblador

I

>

_

Presentación

Instrucciones para la presentación

1.  Piense en el nombre de un animal que inicie con la primera letra de su nombre.

2. Este no deberá repetirse.

3. Al presentarse deberá completar la siguiente frase: Mi nombre es: _______ y he venido sobre un/a: _______ a la escuela desde _____

4. Dar respuesta a las preguntas:

4.1  ¿Porqué estudio está carrera?

4.2  ¿Qué me ha gustado de la carrera hasta ahora?

Temas del curso

Unidad 1. Introducción al lenguaje ensamblador

1.1 Evolución de los lenguajes.
1.2 Aplicaciones del lenguaje ensamblador.

1.3 La familia de microprocesadores de Intel.

Temas del curso

Unidad 2. Arquitectura y funcionamiento de un microprocesador.

2.1 Registros y banderas.
2.2 Unidades funcionales básicas.

2.3 Canales de datos, direcciones y control.
2.4 Proceso de arranque de una microcomputadora.

Temas del curso

Unidad 3 Organización de memoria principal.

3.1 Organización de un programa en memoria principal.
3.2 Tipos de direccionamiento.

Temas del curso

Unidad 4 Instrucciones básicas.

4.1 Transferencia de datos.
4.2 Suma y resta.
4.3 Operaciones lógicas.
4.4 Corrimientos y rotaciones.

4.5 Multiplicación y división (auto estudio).

Temas del curso

Unidad 5 Uso de un programa debugger.

5.1 Observación y modificación de datos.
5.2 ejecución paso a paso.

5.3 uso de breakpoints.

Temas del curso

Unidad 6 Control de secuencia.

6.1 Instrucciones para comparar operandos.
6.2 Saltos condicionales e incondicionales.
6.3 Definición y llamada de procedimientos.
6.4 Instrucciones para el manejo del stack.
6.5 Programación estructurada (auto estudio).

Políticas de clase

  • Teléfono móvil en modo silencio.
  • Las llamadas urgentes /prio se contestan fuera del salón.
  • Turnos de una sola persona para ir al WC.
  • Dos faltas a la semana sin justificante perderían derecho a las cuestiones de aprendizaje.
  • Levantar la mano para participar.
  • Respetar la participación de cada alumno.

Lineamientos de clase

  • Mantenerse informado acerca de las lecturas, actividades y tareas del curso asistiendo por lo menos dos veces por semana, durante la duración del curso.
  • Cumplir dentro del aula virtual con todas las tareas, foros y actividades detalladas por el programa académico y el profesor, en el tiempo y forma establecidos.
  • El incumplimiento de las tareas en tiempo y forma llevarán a una no aprobación del curso.

Lineamientos de clase

  • Realizar el seguimiento personal desde el Aula Virtual.

  • Estar pendiente de los resultados de las evaluacion/es parcial/es y final/es.

  • Notificar al tutor por escrito, con copia a la coordinación académica, si, por alguna razón excepcional, se encontrara en una circunstancia especial que le impidiera continuar con el curso y recibir así indicaciones de cómo proceder a partir de ese momento.

Descripción de las actividades

Unidad 1 Introducción al lenguaje ensamblador

  • Tabla comparativa 
  • Cuestionamientos de aprendizaje.

Descripción de las actividades

Unidad 2 Arquitectura y funcionamiento de un microprocesador.

  • Caso de estudio.
  • Cuestionamientos de aprendizaje

Descripción de las actividades

Unidad 3 Organización de memoria principal.

  • Caso de estudio.
  • Cuestionamientos de aprendizaje.

Descripción de las actividades

Unidad 4 Instrucciones básicas.

  • Solución de ejercicios
  • Cuestionamientos de aprendizaje.

Descripción de las actividades

Unidad 5 Uso de un programa debugger.

  • Caso de uso
  • Cuestionamientos de aprendizaje.

Descripción de las actividades

Unidad 6. Control de secuencia.

  • Caso de estudio
  • Cuestionamientos de aprendizaje.

Actividades de encuadre

Actividades de encuadre

Instrucciones:

  1.  En una hoja escribe la respuesta a la siguiente pregunta:
    1. ¿Qué esperas que se enseñe en este curso?

Tiempo de la actividad: 6 minutos.

Actividades de encuadre

Instrucciones:

  1.  Debajo de la pregunta anterior responde la siguiente cuestión:
    1. ¿A qué te comprometes en este curso?

Tiempo de la actividad: 6 minutos.

Actividades de encuadre

Instrucciones:

  1.  Debajo de la pregunta anterior responde la siguiente cuestión:
    1. ¿Qué deseas aprender en este curso?

Tiempo de la actividad: 6 minutos.

Actividades de encuadre

Una vez contestadas las preguntas anteriores escribir en el foro respectivo la respuesta a cada pregunta.

Tiempo de la actividad: 6 minutos.

Recomendaciones para las actividades

Trabajos:

  • Presentación / portada
  • Introducción
  • Conclusión

Párrafos:

  • Mayores a tres líneas
  • Menores a ocho líneas
  • Coherencia entre párrafos

Ortografía - Gramática

  • Acentuación.
  • Evitar redundancia.
  • Pleonasmos.
  • Mínimo tres errores.

Recomendaciones para las actividades

Referencias bibliográfica

  • Al menos tres citas dentro del trabajo.
  • En formato APA 7ma edición.

Lista referencia bibliográfica

  • Al menos tres fuentes de diversos autores.
  • Con sangría francesa al inicio de cuatro espacios.
  • Fuente Times New Roman.
  • 12 puntos.
  • Sin enlaces activos.

Recomendaciones para las actividades

Introducción y conclusión

  • Al menos tres párrafos.

Formato del trabajo

  • Fuente Arial.
  • Tamaño de título: 14 puntos.
  • Tamaño de texto: 12 puntos.
  • Interlineado 1.5
  • Alineación justificada del texto.
  • Los títulos alineados a la izquierda.
  • En el encabezado del documento colocar el logotipo del instituto alineado a la derecha. Nombre de la carrera a la izquierda.

Recomendaciones para las actividades

Diagramas:

  • Hacerlos en día.
  • Exportarlos a jpg / png

Códigos fuentes:

  • Colocarlos en github.
  • En el documento a entregar, colocar el enlace al código.

Tablas:

  • Colocarle al pie de la tabla un nombre a la tabla, bajo el siguiente formato:  <Tabla numero consecutivo>. <nombre_tabla> .<Fuente:> <donde_fue_tomada> .
  • Colocar un párrafo descriptivo de la tabla.

Ejemplo recomendado para el uso de tablas

IA I POO P. batch
10 10 8
19 6 9

Tabla 1. Listado de materias con calificaciones obtenidas en cada actividad. Fuente: Creación propia

En la tabla 1, se puede apreciar tres materias donde se encuentra las calificaciones obtenidas en dos actividades realizadas en cada una de ellas. Para calcular el promedio solo se debe de sumar cada actividad en un nuevo renglón y dividirlo entre dos que son el número de actividades.

Ejemplo recomendado para el uso de tablas

IA I POO P. batch
10 10 8
19 6 9

Tabla 1. Listado de materias con calificaciones obtenidas en cada actividad. Fuente: Tomada del libro Introducción a la programación de Luis Joyanes Aguilar. P.19.

En la tabla 1, se puede apreciar tres materias donde se encuentra las calificaciones obtenidas en dos actividades realizadas en cada una de ellas. Para calcular el promedio solo se debe de sumar cada actividad en un nuevo renglón y dividirlo entre dos que son el número de actividades. (Joyanes, 2000).

Recomendaciones para las actividades

Imagenes / diagramas / gráficas:

  • Colocarle al pie de la imagen / diagrama / gráfica un nombre, bajo el siguiente formato:  <nombre_objeto numero consecutivo>. <nombre_objeto> <fuente:> <donde_fue_tomada> .
  • Colocar un párrafo donde se describa la imagen / diagrama / gráfica

Recomendaciones para el uso de imágenes / gráficas / diagramas

Imagen 1. Fachada de una casa. Fuente: Creación propia

En la imagen 1 se puede observar la fachada de una casa convencional donde. Lo que permite poder llevar acabo construcciones básicas pero eficientes, con canaletas para la recolección de agua pluvial y su posterior tratamiento.

Recomendaciones para el uso de imágenes / gráficas / diagramas

Imagen 1. Fachada de una casa. Fuente: Tomado del libro Diseños y principios básicos de arquitectura de Ruben Vazquez

En la imagen 1 se puede observar la fachada de una casa convencional donde. Lo que permite poder llevar acabo construcciones básicas pero eficientes, con canaletas para la recolección de agua pluvial y su posterior tratamiento. (Vazquez, 2000)

¿Dudas / Preguntas / comentarios?

Introducción al lenguaje ensamblador

Lenguaje ensamblador | Introducción

¿Qué es el lenguaje ensamblador?

  • Lenguaje de programación de bajo nivel que se utiliza para programar computadoras y dispositivos electrónicos.
  • Se compone de códigos mnemotécnicos y representa las instrucciones directas que comprende una unidad de procesamiento central (CPU) o microcontrolador.
Lenguaje ensamblador | Introducción

¿Qué es el lenguaje ensamblador?

  • Cada tipo de CPU o microcontrolador tiene su propio conjunto de instrucciones en lenguaje ensamblador, diseñadas para operar directamente en su arquitectura de hardware.
  • Cada instrucción generalmente se traduce en una operación específica del hardware, como sumar dos números, mover datos entre registros y realizar saltos condicionales.
Lenguaje ensamblador | Introducción

¿Qué es el lenguaje ensamblador?

  • Útil para la programación de sistemas embebidos, donde la eficiencia y el control directo sobre el hardware son esenciales.
  • Es más complejo y menos legible en comparación con los lenguajes de programación de alto nivel.
Lenguaje ensamblador | Introducción

¿Qué es el lenguaje ensamblador?

  • Los programas escritos en lenguaje ensamblador suelen ser más eficientes en términos de velocidad y uso de recursos en comparación con los programas en lenguajes de alto nivell.
  • Suele ser más difíciles de desarrollar y mantener debido a su naturaleza detallada y orientada al hardware.
Lenguaje ensamblador | Introducción

¿Qué es el lenguaje ensamblador?

  1. Abre tu navegador favorito
  2. Goglea la palabra "Frexus"
  3. Selecciona la opción que dice "valor agregado"
  4. Pulsa en la opción "Curso"
  5. Selecciona el curso que tiene el nombre de "Ensamblador"
  6. Lee el recurso Ethercalc
  7. Crea y completa la tabla siguiente:

Actividad de Aprendizaje

Frase V | F Complemento
Lenguaje de ---- permite programar pc  Alto nivel
Utiliza instrucciones más---- comprensibles Instrucciones
Cada cpu tiene su ---- instrucciones Humanas
Lenguaje ensamblador | Evolución

Evolución

  • La evolución de los lenguajes ensambladores también ha sido un proceso interesante a lo largo de la historia de la programación.
  • Estos lenguajes, que se encuentran en el nivel más bajo de abstracción, han experimentado cambios y mejoras a medida que la tecnología de hardware ha avanzado.
Lenguaje ensamblador | Evolución

Lenguajes de Máquina y Ensamblador (Décadas de 1940 y 1950)

  • Los lenguajes de máquina eran esencialmente códigos binarios que las computadoras podían entender directamente.
  • La programación en lenguaje de máquina era tediosa y propensa a errores, ya que los programadores tenían que escribir instrucciones en códigos numéricos específicos para cada operación.
Lenguaje ensamblador | Evolución

Lenguajes Ensambladores Simples (Décadas de 1950 y 1960)

  • Los lenguajes ensambladores surgieron como una mejora sobre los lenguajes de máquina.
  • Estos lenguajes utilizaban mnemotécnicos en lugar de códigos numéricos, lo que los hacía más legibles y más fáciles de escribir.
  • Los programadores todavía trabajaban cerca del hardware, pero la programación se volvió más comprensible.
Lenguaje ensamblador | Evolución

Estandarización y Ampliación (Décadas de 1960 y 1970)

  • A medida que las computadoras se volvieron más avanzadas, se crearon lenguajes ensambladores estándar para plataformas específicas.
  • Uno de los ejemplos más notables es el ensamblador IBM System/360, que se convirtió en un estándar en la industria.
  • Además, los lenguajes ensambladores comenzaron a incluir más características y abstracciones para hacer que la programación fuera más eficiente.
Lenguaje ensamblador | Evolución

Lenguajes Ensambladores Avanzados (Décadas de 1980 y 1990)

  • Con la llegada de las microcomputadoras y los procesadores más potentes, los lenguajes ensambladores se volvieron más avanzados y ricos en características.
  • Los programadores podían aprovechar nuevas instrucciones y modos de direccionamiento para mejorar la eficiencia de los programas.
Lenguaje ensamblador | Evolución

Ensambladores Modernos y Abstracciones (Siglo XXI)

  • A medida que la complejidad de los procesadores y sistemas aumentó, los ensambladores modernos introdujeron características que ayudaron a los programadores a lidiar con problemas más complejos.
  • También se introdujeron abstracciones más sofisticadas para facilitar la programación, aunque aún mantenían el control preciso sobre el hardware.
Lenguaje ensamblador | Evolución

Ensambladores en la Era de la Computación Cuántica (En desarrollo)

  • Con el avance de la computación cuántica, también se están desarrollando ensambladores específicos para estas arquitecturas únicas.
  • Estos ensambladores permitirán a los programadores trabajar con las operaciones y las instrucciones de la computación cuántica.
Lenguaje ensamblador | Evolución

Evolución

  1. Abre tu hoja ethercalc
  2. Ordena las características de cada década de la tabla siguiente:

Actividad de Aprendizaje

Década Características
1980 y 1990 Mejora sobre los lenguajes
1950 y 1960 Procesadores más potentes
1940 y 1950 Programación en  tediosa y propensa a errores
Lenguaje ensamblador | Aplicación

Aplicaciones del lenguaje ensamblador.

  • Pesar de su complejidad y nivel de abstracción bajo, tiene aplicaciones importantes en diversos campos.
  • Su uso ha disminuido en comparación con lenguajes de programación de alto nivel.
  • Relevante en áreas que requieren un control preciso del hardware y un alto rendimiento
Lenguaje ensamblador | Aplicación

Programación de Sistemas Empotrados

  • Los sistemas empotrados, como microcontroladores y microprocesadores en dispositivos electrónicos, a menudo se programan en lenguaje ensamblador.
  • Estos sistemas requieren un control fino del hardware y un uso eficiente de los recursos, lo que hace que el ensamblador sea una elección adecuada.
Lenguaje ensamblador | Aplicación

Programación de Sistemas Operativos

  • Los componentes críticos de los sistemas operativos, como el arranque del sistema y la gestión de interrupciones, se pueden programar en ensamblador debido a la necesidad de acceder directamente al hardware y garantizar la eficiencia.
Lenguaje ensamblador | Aplicación

Programación de Controladores de Dispositivos

  • Los controladores de dispositivos, que permiten que el software interactúe con el hardware, a menudo se programan en lenguaje ensamblador.
  • Esto es esencial para garantizar que los dispositivos funcionen correctamente y sean eficientes.
Lenguaje ensamblador | Aplicación

Optimización de Código

  • En ciertas situaciones, los programadores utilizan el ensamblador para optimizar partes críticas de un programa de alto nivel.
  • Esto puede mejorar el rendimiento y la eficiencia del código, especialmente en aplicaciones intensivas en recursos.
Lenguaje ensamblador | Aplicación

Seguridad y Hacking Ético

  •  En el campo de la seguridad informática, los expertos en seguridad a veces usan el ensamblador para analizar y manipular códigos binarios con fines de hacking ético y seguridad.
Lenguaje ensamblador | Aplicación

Depuración y Análisis de Código

  •  El lenguaje ensamblador es útil para depurar y analizar programas a nivel de código de máquina.
  • Puede ayudar a identificar problemas de rendimiento, errores de software y problemas de seguridad.
Lenguaje ensamblador | Aplicación

Programación de Plataformas Específicas

  •  En casos donde se requiere un ajuste muy preciso y específico para una plataforma de hardware particular, como en el desarrollo de videojuegos para consolas o software integrado en dispositivos específicos, el ensamblador puede ser utilizado para lograr el máximo rendimiento.
Lenguaje ensamblador | Aplicación
  • Aunque las aplicaciones del lenguaje ensamblador pueden ser limitadas debido a su complejidad y falta de portabilidad entre diferentes arquitecturas de hardware, sigue siendo una herramienta valiosa en situaciones en las que el control preciso del hardware y la optimización son críticos.
  • En la mayoría de los casos, los programadores que utilizan lenguajes de programación de alto nivel para crear aplicaciones más rápidamente y con menos esfuerzo, reservando el ensamblador para tareas específicas que requieren un nivel extremo de control y eficiencia.
Lenguaje ensamblador | Aplicación

Aplicación

  1. Abre tu hoja ethercalc.
  2. Genera una pequeña búsqueda donde encuentres más aplicaciones del lenguaje ensamblador.
  3. Completa la tabla siguiente:

Actividad de Aprendizaje

Aplicación Limitante Ventaja
Lenguaje ensamblador | fam. Intel

la familia de microprocesadores de Intel.

  • Intel es una de las compañías más prominentes en la industria de microprocesadores y ha desarrollado una amplia gama de procesadores que han tenido un impacto significativo en la informática.
  • La relación entre los microprocesadores de Intel y el lenguaje ensamblador es fundamental, ya que estos procesadores se programan a través de instrucciones en lenguaje ensamblador.
Lenguaje ensamblador | fam. Intel

Familia Intel 8086/8088

  • El Intel 8086, lanzado en 1978, fue uno de los primeros microprocesadores de 16 bits y marcó el inicio de la arquitectura x86 de Intel.
  • Su versión ligeramente reducida, el Intel 8088, se utilizó en la primera computadora personal IBM PC.
  • Estos microprocesadores estaban programados en lenguaje ensamblador y su conjunto de instrucciones definió gran parte de la arquitectura x86 que sigue utilizándose hoy en día.
Lenguaje ensamblador | fam. Intel

Familia Intel 80286

  • El Intel 80286, lanzado en 1982, amplió la arquitectura x86 con características como la protección de memoria y el modo protegido.
  • Esto permitió la ejecución de múltiples tareas de manera más segura y eficiente.
  • La programación en lenguaje ensamblador para el 80286 involucró trabajar con estas nuevas características y modos de operación.
Lenguaje ensamblador | fam. Intel

Familia Intel 80386

  • El Intel 80386, lanzado en 1985, introdujo el modo protegido avanzado y la capacidad de multitarea más sólida.
  • Este microprocesador abrió la puerta a sistemas operativos más avanzados y programas de mayor complejidad.
  • La programación en lenguaje ensamblador para el 80386 se volvió más compleja debido a las características adicionales.
Lenguaje ensamblador | fam. Intel

Familia Intel Pentium y Procesadores Posteriores

  • Los procesadores Intel Pentium y sus versiones posteriores continuaron mejorando la arquitectura x86 con mejor rendimiento y características adicionales.
  • Se desarrollaron procesadores más rápidos y potentes, los programadores podían aprovechar la potencia de cálculo adicional al escribir código en lenguaje ensamblador.
Lenguaje ensamblador | fam. Intel

Familia Intel Core y Procesadores Modernos

  •  La familia de procesadores Intel Core, introducida en la década de 2000, llevó la arquitectura x86 a nuevos niveles de rendimiento y eficiencia energética.
  • Estos procesadores siguen siendo programados en lenguaje ensamblador para aprovechar al máximo sus capacidades y características avanzadas, como la tecnología de múltiples núcleos y la optimización de instrucciones.
Lenguaje ensamblador | fam. Intel

Familia Intel

  1. Abre tu hoja ethercalc..
  2. Completa la tabla siguiente:

Actividad de Aprendizaje

Familia Año Caracteristicas
Intel 8086/8088 1978
Intel 80286 Amplió la arquitectura x86
Intel 80386 1985
Intel Core

Unidad 2

Arquitectura y funcionamiento de un microprocesador.

Arquitectura y funcionamiento de un microprocesador.

  • Registros y banderas.
  • Unidades funcionales básicas.
  • Canales de datos, direcciones y control.
  • Proceso de arranque de una microcomputadora.
Arquitectura
  • La arquitectura de un microprocesador se refiere a la estructura interna y al diseño de hardware que permite al microprocesador llevar a cabo operaciones de procesamiento de datos.
  • El funcionamiento de un microprocesador se basa en la ejecución de instrucciones que se almacenan en la memoria y se procesan secuencialmente.
Arquitectura

Actividad de aprendizaje

  1. Abra el navegador de su preferencia.
  2. Escriba en la barra de búsqueda la palabra frexus.
  3. Seleccione la opción que dice "Valor agregado"
  4. Selecciona la opción "Cursos"
  5. Buscar y hacer clic donde esté el nombre de la materia.
  6. Lea la lectura recomendada: "microprocesador su función y arquitectura."
  7. Completa lo siguiente
Elemento Función
CPU Se utiliza para almacenar datos y programas
ALU Son pequeñas ubicaciones de almacenamiento de alta velocidad dentro de la CPU
Función
  • El funcionamiento del microprocesador se basa en la ejecución secuencial de instrucciones almacenadas en la memoria, y estas instrucciones son interpretadas y ejecutadas por la CPU.
  • El rendimiento del microprocesador se mide en términos de velocidad de reloj (frecuencia) y eficiencia en la ejecución de instrucciones. Los microprocesadores modernos suelen ser altamente complejos y están diseñados para ejecutar una amplia variedad de instrucciones y operaciones de manera eficiente.
Registros
  • Los registros son elementos de almacenamiento de alta velocidad ubicados dentro de la Unidad Central de Procesamiento (CPU) en la arquitectura de un microprocesador.
  • Estos registros son componentes fundamentales que desempeñan un papel crucial en la ejecución de instrucciones y operaciones en un microprocesador.
  • Cada microprocesador tiene un conjunto específico de registros que varía en tamaño y función según la arquitectura.
Registros

Actividad de aprendizaje

  1. Abra el navegador de su preferencia.
  2. Escriba en la barra de búsqueda la palabra frexus.
  3. Seleccione la opción que dice "Valor agregado"
  4. Selecciona la opción "Cursos"
  5. Buscar y hacer clic donde esté el nombre de la materia.
  6. Lea la lectura recomendada: "¿y los registros?"
  7. Completa lo siguiente
Elemento Función
GPR Incluye registros de control de interrupciones, registros de segmento
SP Registro que almacena información sobre el estado de las operaciones realizadas por el microprocesador
Banderas
  • En ensamblador, las "banderas" son indicadores de estado que se almacenan en el registro de estado (también conocido como el registro de banderas o flags register) de la CPU.
  • Estas banderas reflejan el resultado de las operaciones que se han realizado y son esenciales para controlar el flujo de un programa y tomar decisiones condicionales.
  • Cada arquitectura de CPU tiene su conjunto de banderas,
Banderas

Actividad de aprendizaje

  1. Abra el navegador de su preferencia.
  2. Escriba en la barra de búsqueda la palabra frexus.
  3. Seleccione la opción que dice "Valor agregado"
  4. Selecciona la opción "Cursos"
  5. Buscar y hacer clic donde esté el nombre de la materia.
  6. Lea la lectura recomendada: "Banderas"
  7. Completa lo siguiente
Elemento Función
D Se establece cuando una operación aritmética produce un resultado que es demasiado grande
S/N Se establece si el resultado de una operación es igual a cero.
Unidades funcionales básicas
  • Son unidades dentro de la Unidad Central de Procesamiento (CPU) de una computadora que realizan funciones específicas durante la ejecución de instrucciones.
  • Estas son esenciales para llevar a cabo operaciones aritméticas, lógicas y de control en un microprocesador
Unidades funcionales básicas

Actividad de aprendizaje

  1. Abra el navegador de su preferencia.
  2. Escriba en la barra de búsqueda la palabra frexus.
  3. Seleccione la opción que dice "Valor agregado"
  4. Selecciona la opción "Cursos"
  5. Buscar y hacer clic donde esté el nombre de la materia.
  6. Lea la lectura recomendada: "Unidades función  básicas"
  7. Completa lo siguiente
Elemento Función
ALU Maneja las instrucciones de salto condicional e incondicional
Store Unit Se encarga de descodificar las instrucciones del programa
canales de datos
  • Se refieren a las rutas a través de las cuales se transfieren los datos entre diferentes partes de la CPU o entre la CPU y otros dispositivos.
  • Estos canales permiten que los datos se muevan de un lugar a otro dentro del sistema de manera eficiente y se utilizan en diversas operaciones de lectura, escritura y manipulación de datos
direcciones
  • Son ubicaciones específicas en la memoria del sistema o en registros de la CPU donde se almacenan datos o se pueden acceder a ellos.
  • Las direcciones son fundamentales para la gestión y el acceso a la memoria y a los registros, lo que permite a la CPU leer, escribir y manipular datos durante la ejecución de un programa.
Control
  • Es la capacidad de gestionar el flujo de ejecución de un programa.
  • Esto implica tomar decisiones sobre qué instrucciones ejecutar y en qué orden, basándose en condiciones o eventos específicos.
  • El control se logra mediante el uso de instrucciones de salto (jump) y ramificaciones condicionales que permiten desviar el flujo de ejecución del programa.
Canal de datos, direcciones y control

Actividad de aprendizaje

  1. Abra el navegador de su preferencia.
  2. Escriba en la barra de búsqueda la palabra frexus.
  3. Seleccione la opción que dice "Valor agregado"
  4. Selecciona la opción "Cursos"
  5. Buscar y hacer clic donde esté el nombre de la materia.
  6. Lea la lectura recomendada: "Canal de datos, direcciones y control"
  7. Completa lo siguiente
Elemento Función
E/S Ubicaciones de almacenamiento internas dentro de la CPU que se utilizan para realizar operaciones y cálculos
Registro de Bandera Permiten al programa cambiar de manera no secuencial de una ubicación de memoria a otra
Arranque de un microcomputador

Actividad de aprendizaje

  1. Abra el navegador de su preferencia.
  2. Escriba en la barra de búsqueda la palabra frexus.
  3. Seleccione la opción que dice "Valor agregado"
  4. Selecciona la opción "Cursos"
  5. Buscar y hacer clic donde esté el nombre de la materia.
  6. Lea la lectura recomendada: "arranque de un microcomputador"
  7. Completa lo siguiente
Elemento Función
POST Después de que el POST se complete con éxito,
Ejecución programa que se encarga de cargar el sistema operativo en la memoria RAM

Unidad 3

Organización de memoria principal

Organización de memoria principal

  • Organización de un programa en memoria principal.
  • Tipos de direccionamiento.
Organización de la memoria principal

Método de acceso

Acceso aleatorio (RAM):

Acceso directo y tiempo de acceso constante e independiente de la posición de memoria.

Acceso Secuencial (SAM):

Tiempo de acceso dependiente de la posición de memoria.

Acceso Directo (DAM):

Acceso directo a un sector con tiempo de acceso dependiente de la posición, y acceso secuencial dentro del sector.

Asociativas (CAM):

Acceso por contenido

Organización de la memoria principal

Soporte físico

Semiconductor

RAM, ROM, FLASH, EEPROM, NVRAM, CACHÉ, SRAM, DRAM, SDRAM

Magnético

DD, Cintas, Disquete, tarjeta de cinta, zip, jaz, DVC.

Ópticas

CD-ROM, CD-R, CD-RW, DVD, Mini Disc, memoria SD

Magneto-ópticas

Tecnología UDO, Unidad de disco magnetico-optico de 2.5, 3.5 y 5.5 pulgadas

Organización de la memoria principal

Alterabilidad

RAM

Lectura y escritura

ROM

Memorias de solo lecturas y existen diferentes variantes

ROM: programadas por máscara, cuya información se escribe en el proceso de fabricación y no se puede modificar

PROM, o ROM: programable una sola vez. Utilizan una matriz de diodos cuya unión se puede destruir aplicando sobre ella una sobretensión.

EPROM (Erasable PROM) o RPROM (Reprogramable ROM), cuyo contenido puede borrarse mediante rayos ultravioletas para volverlas a escribir.

EAROM (Electrically Alterable ROM) o EEROM (Electrically Erasable ROM): son memorias que están entre las RAM y las ROM ya que su contenido se puede volver a escribir por medios eléctricos. Se diferencian de las RAM en que no son volátiles.

Organización de la memoria principal

Jerarquía

Organización de 1 programa en M.P.

Es un aspecto esencial en la ejecución eficiente de software.

Organización de 1 programa en M.P.

MonoProgramación:

  • Sólo hay un proceso en memoria.
  • Cada proceso debe contener los controladores de los dispositivos de entrada / salida que use.
  • Tres formas de organizar la memoria (con un s.o. y un proceso de usuario)
  • El usuario escribe un comando sobre el terminal.
  • El sistema operativo carga el programa desde disco a memoria y lo ejecuta.
  • Al finalizar dicho programa, el sistema operativo muestra el prompt y espera a otra demanda.
  • Mala utilización de la memoria (desperdicio).
  • Tiempo de ocio del procesador central en entrada / salida.
  • Limitación en el tamaño total del programa.
Organización de 1 programa en M.P.

MultiProgramación:

Ejecución entrelazada o concurrente de dos o más procesos. Se opera sobre más de un proceso a la vez, y los recursos del sistema se distribuyen entre esos procesos.

  • Desdoblamiento de un programa en dos o más procesos. Hace más fácil programar una aplicación.
  • Aprovechamiento de la CPU. A consecuencia de solapar los tiempos de entrada / salida con los de CPU.
Tipo de direccionamientos
  • Son formas en que las instrucciones de un lenguaje de programación o arquitectura de computadora acceden a los operandos o datos en la memoria o en los registros.
  • Estos tipos de direccionamiento determinan cómo se especifican las fuentes y destinos de los datos para cada instrucción.
Tipo de direccionamientos

Inmediato

  • La fuente de datos es el valor literal de la propia instrucción.
  • Por ejemplo, en la instrucción MOV AX, 5, el valor "5" es inmediato y se carga en el registro AX.
Tipo de direccionamientos

Directo

  • La dirección de memoria del operando se proporciona directamente en la instrucción.
  • Por ejemplo, en MOV AX, [1234], "1234" es la dirección de memoria directa.
Tipo de direccionamientos

Indirecto

  • La instrucción utiliza una dirección de memoria almacenada en un registro para acceder a los datos.
  • Por ejemplo, en MOV AX, [BX], el valor en el registro BX se usa como dirección de memoria para obtener el valor de la memoria.
Tipo de direccionamientos

Registrador

  • El operando proviene de un registro específico.
  • Por ejemplo, en ADD AX, BX, los valores se toman directamente de los registros AX y BX.
Tipo de direccionamientos

Por Registro-Registro

  • Se utilizan dos registros para especificar la dirección de memoria del operando.
  • Por ejemplo, en MOV AX, [SI+DI], se utilizan los registros SI y DI para calcular la dirección de memoria.
Tipo de direccionamientos

Por Registro-Desplazamiento

  • Se utiliza un registro y un desplazamiento constante para calcular la dirección de memoria del operando.
  • Por ejemplo, en MOV AX, [BX+4], el registro BX se combina con un desplazamiento de 4 para calcular la dirección.
Tipo de direccionamientos

Por Registro-Indexado

  • Se utilizan un registro base y un registro índice para calcular la dirección de memoria.
  • Por ejemplo, en MOV AX, [BX+SI], los registros BX y SI se utilizan para calcular la dirección.
Tipo de direccionamientos

Basado en Pila

  • Los operandos se toman de la pila, utilizando un registro de puntero de pila (como SP o BP) como referencia para la dirección de la pila.
Tipo de direccionamientos

Basado en Acumulador:

  • Uno de los operandos se encuentra en un acumulador y el otro puede ser inmediato o de otro tipo.
Tipo de direccionamientos
  • La elección del tipo de direccionamiento puede afectar significativamente la eficiencia y la flexibilidad de un conjunto de instrucciones y puede variar según la arquitectura de la CPU y el lenguaje de programación utilizado.
  • Cada tipo de direccionamiento tiene sus propias ventajas y desventajas, y se selecciona en función de las necesidades específicas de la tarea o del diseño de la arquitectura.
Actividad de aprendizaje
  1. Abra el navegador de su preferencia.
  2. Escriba en la barra de búsqueda la palabra frexus.
  3. Seleccione la opción que dice "Valor agregado"
  4. Selecciona la opción "Cursos"
  5. Buscar y hacer clic donde esté el nombre de la materia.
  6. Lea la lectura recomendada: "La ram y el ensamblador"
  7. Completa lo siguiente
Cuestiones Respuestas
¿Qué es la ram?
¿Qué necesita llevar un programa en lenguaje ensamblador?
Actividad de aprendizaje
  1. Abra el navegador de su preferencia.
  2. Escriba en la barra de búsqueda la palabra frexus.
  3. Seleccione la opción que dice "Valor agregado"
  4. Selecciona la opción "Cursos"
  5. Buscar y hacer clic donde esté el nombre de la materia.
  6. Navega en la presentación y 
  7. Ordena lo siguiente
SIGLAS Definición
SAM Tiempo de acceso dependiente de la posición de memoria.
DAM Acceso por contenido
Actividad de aprendizaje
  1. Abra el navegador de su preferencia.
  2. Escriba en la barra de búsqueda la palabra frexus.
  3. Seleccione la opción que dice "Valor agregado"
  4. Selecciona la opción "Cursos"
  5. Buscar y hacer clic donde esté el nombre de la materia.
  6. Navega en la presentación y 
  7. Ordena lo siguiente
Propiedad Ejemplos
Semiconductor Unidad de disco magnetico-optico de 2.5, 3.5 y 5.5 pulgadas
Magneticas CD-ROM, CD-R, CD-RW, DVD, Mini Disc, memoria SD

Instrucciones Básicas

Instrucciones Básicas

  • Transferencia de datos.
  • Suma y resta.
  • Operaciones lógicas.
  • Corrimientos y rotaciones.
  • Multiplicación y división (auto estudio).

Instrucciones Básicas

Transferencia de datos
  • Movimiento de datos entre registros, memoria y otros dispositivos dentro de una computadora.
  • Parte fundamental de la programación en ensamblador ya que muchas instrucciones están diseñadas para cargar, almacenar, copiar o manipular datos.

Las operaciones de transferencia de datos son esenciales para realizar cálculos y procesamientos en una computadora.

Instrucciones Básicas

Transferencia de datos
  1. Abra el navegador de su preferencia.
  2. Escriba en la barra de búsqueda la palabra frexus.
  3. Seleccione la opción que dice "Valor agregado"
  4. Selecciona la opción "Cursos"
  5. Buscar y hacer clic donde esté el nombre de la materia.
  6. Lea la lectura recomendada: Transferencia de datos 
  7. Ordena lo siguiente
Instruccion aplicación/concepto
OUTS Se utiliza para copiar datos de una ubicación a otra
XCHG Se utilizan para operaciones de pila

Instrucciones Básicas

Suma y resta

Para sumar dos valores, generalmente se usan registros o ubicaciones de memoria.

Se requiere sumar dos valores y almacenar el resultado en un tercer lugar.

Se usará los registros AX y BX

MOV AX, 10      ; Se carga el valor 10 en el registro AX
MOV BX, 20      ; Se carga el valor 20 en el registro BX
ADD AX, BX      ; Se suma  de AX y BX y se almacena el AX

Instrucciones Básicas

Suma y resta

Para restar dos valores, generalmente se usan registros o ubicaciones de memoria.

Se requiere sumar dos valores y almacenar el resultado en un tercer lugar.

Se usará los registros AX y BX

MOV AX, 50      ; Se asigna el valor 50 en el registro AX
MOV BX, 30      ; Se asigna el valor 30 en el registro BX
SUB AX, BX      ; Se resta el contenido de BX de AX y se almacena el resultado en AX

Instrucciones Básicas

Operaciones Lógicas
  • Las operaciones lógicas  se utilizan para manipular bits individuales en registros o en memoria.
  • Estas operaciones incluyen:
    • AND lógico,
    • OR lógico,
    • XOR lógico y
    • NOT lógico, entre otras.

Instrucciones Básicas

Operaciones Lógicas

AND lógico

  • La operación AND lógico toma dos operandos y realiza una operación "y" bit a bit en ellos.
  • El resultado será 1 en los bits donde ambos operandos tengan un 1 y 0 en cualquier otro caso.
MOV AL, 11001100b  ; Cargamos el valor binario 11001100 en AL
AND AL, 10101010b  ; Realizamos un AND lógico con 10101010b

El valor de esta operación, AL contendrá el valor binario 10001000.

Instrucciones Básicas

Operaciones Lógicas

OR lógico (OR)

  • La operación OR lógico toma dos operandos y realiza una operación "o" bit a bit en ellos.
  • El resultado será 1 en los bits donde al menos uno de los operandos tenga un 1.
MOV AL, 11001100b  ; Cargamos el valor binario 11001100 en AL
OR AL, 00110011b   ; Realizamos un OR lógico con 00110011b

El valor de esta operación, AL contendrá el valor binario 11111111.

Instrucciones Básicas

Operaciones Lógicas

XOR lógico (XOR)

  • La operación XOR lógico toma dos operandos y realiza una operación "o exclusivo" bit a bit en ellos.
  • El resultado será 1 en los bits donde uno de los operandos tenga un 1, pero no en ambos.
MOV AL, 11001100b  ; Cargamos el valor binario 11001100 en AL
XOR AL, 00110011b  ; Realizamos un XOR lógico con 00110011b

El valor de esta operación, AL contendrá el valor binario 11111111.

Instrucciones Básicas

Operaciones Lógicas

NOT lógico (NOT)

  • La operación NOT lógico invierte todos los bits de un operando.
MOV AL, 11001100b  ; Cargamos el valor binario 11001100 en AL
NOT AL             ; Realizamos un NOT lógico en AL

El valor de esta operación, AL contendrá el valor binario 00110011.

Instrucciones Básicas

Corrimiento y rotaciones
  • Son operaciones utilizadas para mover o manipular los bits en un registro o en la memoria.
  • Estas operaciones son comunes cuando se trabaja con máscaras de bits, desplazamiento de valores o manipulación de datos a nivel de bits.

Instrucciones Básicas

Corrimiento y rotaciones

Corrimiento (Shift):

  • Implica mover los bits de un registro hacia la izquierda o hacia la derecha en una cantidad específica de posiciones.

Instrucciones Básicas

Corrimiento y rotaciones

Corrimiento lógico (Logical Shift)

  • En esta operación, los bits se desplazan hacia la izquierda o hacia la derecha, y los bits vacíos se llenan con ceros.
MOV AL, 11001100b    ; AL = 11001100b (204 en decimal)
SHR AL, 2            ; Corrimiento lógico a la derecha de 2 posiciones

El resultado de esta operación, AL contendrá el valor binario 00110011b (51 en decimal).

Instrucciones Básicas

Corrimiento y rotaciones

Corrimiento aritmético (Arithmetic Shift)

  • los bits se desplazan hacia la izquierda o hacia la derecha, y los bits vacíos se llenan con el valor del bit más significativo (el bit de signo).
MOV AL, 11001100b    ; AL = 11001100b (204 en decimal)
SAR AL, 2            ; Corrimiento aritmético a la derecha de 2 posiciones

El resultado de esta operación, AL contendrá el valor binario 11110011b (243 en decimal).

Instrucciones Básicas

Corrimiento y rotaciones

Rotación (Rotate):

  • Implica mover los bits de un registro hacia la izquierda o hacia la derecha, pero en lugar de perder los bits que se desplazan fuera del registro, estos bits se reintroducen en el otro extremo del registro

Instrucciones Básicas

Corrimiento y rotaciones

Rotación a la izquierda (Rotate Left, ROL)

  • Los bits se desplazan hacia la izquierda, y los bits que salen por el extremo izquierdo vuelven a entrar por el extremo derecho.
MOV AL, 11001100b    ; AL = 11001100b (204 en decimal)
ROL AL, 2            ; Rotación a la izquierda de 2 posiciones

El resultado de esta operación, AL contendrá el valor binario 00110011b (51 en decimal), y los bits que se desplazaron a la izquierda regresaron por la derecha.

Instrucciones Básicas

Corrimiento y rotaciones

Rotación a la derecha (Rotate Right, ROR):

  • Los bits se desplazan hacia la derecha, y los bits que salen por el extremo derecho vuelven a entrar por el extremo izquierdo.
MOV AL, 11001100b    ; AL = 11001100b (204 en decimal)
ROR AL, 2            ; Rotación a la derecha de 2 posiciones

El resultado de esta operación, AL contendrá el valor binario 00110011b (51 en decimal), y los bits que se desplazaron a la derecha regresaron por la izquierda.

Instrucciones Básicas

Corrimiento y rotaciones

Rotación a la derecha (Rotate Right, ROR):

  • Estas operaciones son útiles en situaciones en las que se necesita mover o rotar bits dentro de registros para realizar operaciones de desplazamiento, enmascaramiento o manipulación de datos a nivel de bits.
  • La elección entre corrimientos lógicos o aritméticos, así como entre rotaciones a la izquierda o a la derecha, dependerá de los requisitos específicos de la aplicación.

Instrucciones Básicas

Multiplicación y División

Suelen ser operaciones más complejas que las operaciones aritméticas básicas como suma y resta. La implementación varía según la arquitectura de la CPU.

Instrucciones Básicas

Multiplicación y División

Puede realizarse de varias maneras, dependiendo de la arquitectura y las instrucciones disponibles. Una técnica común es el método de multiplicación "por escalonamiento", que se basa en la suma repetida y el desplazamiento de bits.

Multiplicación

Instrucciones Básicas

Multiplicación y División

Suponga que se desea multiplicar dos números, A y B.

Multiplicación

  1. Inicializa un registro para almacenar el resultado (AX ).

  2. Inicializa otro registro (BX) con el valor de B.

  3. Utilice un ciclo para realizar la multiplicación. En cada iteración, realiza los siguiente:

    a. Verifica el bit menos significativo de A. Si es 1, suma el valor de BX al resultado.

    b. Desplaza A a la derecha y BX a la izquierda (SHR y SHL).

    c. Repite hasta que todos los bits de A se hayan procesado.

  4. Al finalizar, el registro que contiene el resultado contendrá el producto de A y B.

Instrucciones Básicas

Multiplicación y División

La división en ensamblador también puede realizarse de varias maneras, dependiendo de la arquitectura y las instrucciones disponibles. La técnica más común es la "división por sustracción y resta".

Divición

Instrucciones Básicas

Multiplicación y División

Suponga que se desea dividir dos números, A y B.

Divición

  1. Inicialice un registro para almacenar el cociente (AX) y otro para el residuo (DX).

  2. Inicializa el registro AX con el valor de A.

  3. Inicializa otro registro (BX) con el valor de B.

  4. Utiliza un ciclo para realizar la división. Cada iteración realiza lo siguiente:

    a. Divide el contenido de AX por BX y coloca el cociente en AL y el residuo en AH.

    b. Verifica el residuo (AH). Si es cero, termina el ciclo; 

    c. Desplaza el contenido de DX a la izq y el residuo (AH) en DL.

  5. Al final, el registro AX contendrá el cociente y el registro DX contendrá el residuo de la división.

Instrucciones Básicas

Estructura de un programa en ensamblador

Instrucciones Básicas

Estructura de 1 programa

La estructura de un programa en lenguaje ensamblador suele constar de varias secciones y directivas que organizan el código y definen cómo se ensambla y ejecuta. A continuación, se muestra una estructura básica típica de un programa en ensamblador x86

Instrucciones Básicas

Estructura de un programa

La estructura real de un programa en ensamblador puede variar según la arquitectura y el ensamblador que estés utilizando.

En el siguiente ejemplo es específico para ensamblador x86 en sistemas basados en Linux usando la llamada al sistema int 0x80.

Las secciones y directivas pueden variar según la plataforma y la herramienta que se este utilizando.

Instrucciones Básicas

Estructura de un programa

En esta sección, puedes definir variables y constantes que se utilizan en tu programa. Estos datos pueden ser inicializados.

section .data:

Esta es la sección de código principal donde se encuentra la lógica del programa. Aquí se escriben las instrucciones en ensamblador.
 

section .text:

Instrucciones Básicas

Estructura de un programa

Define el punto de entrada del programa. En este caso, "_start" es el símbolo global que indica dónde comienza la ejecución.

global _start:

 Aquí es donde comienza la ejecución del programa. Es el punto de entrada principal.

_start:

Instrucciones Básicas

Estructura de un programa

 En esta sección, escribirás las instrucciones en ensamblador que realizan las operaciones deseadas.

Código de instrucciones:

Al final del programa, generalmente se utilizan llamadas al sistema para realizar acciones como salir del programa (syscall exit).

Terminación del programa:

En esta sección, se pueden definir variables que no están inicializadas en la etapa de compilación. Estas variables se inicializan durante la ejecución.

section .bss:

Instrucciones Básicas

Estructura de un programa
section .data
    ; Sección de datos
    ; Define variables y constantes aquí

section .text
    global _start
    ; Sección de código
    ; Inicio del programa

_start:
    ; Punto de entrada principal del programa
    ; Aquí comienza la ejecución

    ; Código de instrucciones
    ; ...

    ; Terminación del programa
    mov eax, 1        ; syscall número 1 (exit)
    mov ebx, 0        ; código de salida 0
    int 0x80          ; realizar la llamada al sistema para salir

section .bss
    ; Sección de datos sin inicializar (bss)
    ; Define variables no inicializadas aquí

Instrucciones Básicas

Estructura de un programa

La estructura de un programa en ensamblador para Windows puede variar significativamente debido a diferencias en las llamadas al sistema y las convenciones específicas de Windows.

Instrucciones Básicas

Estructura de un programa
  1. Se utilizan directivas específicas de MASM (Microsoft Macro Assembler) y se incluyen archivos de encabezado de Windows.

  2. La sección .data se utiliza para definir variables y constantes.

  3. La sección .code contiene el código de instrucciones.

  4. Se utiliza el punto de entrada start.

  5. Se realizan llamadas a funciones de Windows como MessageBox y ExitProcess para mostrar un cuadro de diálogo de mensaje y finalizar el programa.

  6. Los datos del cuadro de diálogo de MessageBox se definen en la sección .data.

Instrucciones Básicas

Estructura de un programa
.386
.model flat, stdcall
option casemap : none

include \masm32\include\windows.inc
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib

.data
    ; Sección de datos
    ; Define variables y constantes aquí

.code
start:
    ; Punto de entrada principal del programa
    ; Aquí comienza la ejecución

    ; Código de instrucciones
    ; ...

    ; Llamada a funciones de Windows
    invoke MessageBox, NULL, addr MessageBoxText, addr MessageBoxCaption, MB_OK
    invoke ExitProcess, 0

.data
    ; Datos del cuadro de diálogo de MessageBox
MessageBoxCaption db "Ejemplo", 0
MessageBoxText db "Hola, mundo!", 0

end start

Instrucciones Básicas

Estructura de un programa

Un programa en ensamblador para macOS generalmente sigue una estructura similar a la de otros sistemas operativos basados en Unix, como Linux, debido a que macOS se basa en el núcleo Unix.

Sin embargo, las llamadas al sistema y las convenciones de llamadas pueden variar.

Instrucciones Básicas

Estructura de un programa
  1. La sección .data se utiliza para definir variables y constantes.

  2. La sección .text contiene el código de instrucciones. El punto de entrada se llama _start, que es el punto de entrada común en programas de ensamblador de sistemas basados en Unix.

  3. Se pueden realizar llamadas al sistema específicas de macOS para realizar tareas como escribir en la consola, abrir archivos, etc.

  4. Puedes definir más datos y espacio para variables no inicializadas en las secciones .data y .bss según sea necesario.

section .data
    ; Sección de datos
    ; Define variables y constantes aquí

section .text
    global _start

_start:
    ; Punto de entrada principal del programa
    ; Aquí comienza la ejecución

    ; Código de instrucciones
    ; ...

    ; Llamadas al sistema de macOS
    ; ...

section .data
    ; Datos
    ; Define más datos aquí

section .bss
    ; Sección .bss (Bloated Storage Space)
    ; Define espacio para variables no inicializadas aquí

section .text
    ; Más código de instrucciones
    ; ...

section .data
    ; Datos adicionales
    ; Define más datos aquí

section .bss
    ; Más espacio para variables no inicializadas

Instrucciones Básicas

Estructura de un programa

Instrucciones Básicas

Estructura de un programa

Actividad de aprendizaje

¿Qué diferencias existen en cada uno de los códigos mostrados?

1. Responde lo siguiente:

Instrucciones Básicas

Hola mundo en ensamblador

Instrucciones Básicas

Text