SlideShare una empresa de Scribd logo
1 de 51
Unidad III
Lenguaje Ensamblador
Equipo 3
Adan A. Roa Juliao
Juan Antonio García Amaro
Harold Cuevas Pablus
Estefania Doguelis
Axel Jonas Encarnación Pérez
Luis Anderson Dipre Lorenzo
CODE-2
CODE-2 (Computador Didáctico Elemental, versión 2), y su predecesor el
Ordenador Didáctico Elemental ODE son dos procesadores ideados por los
profesores Alberto Prieto y Antonio Lloris, de la Universidad de Granada, para
facilitar la comprensión del funcionamiento y el diseño hardware de un computador
CODE-2, es la segunda versión de un Computador Didáctico Elemental diseñado en el
Departamento de Arquitectura y Tecnología de Computadores de la Universidad de
Granada. Se trata de un computador de tipo Von Newmann, que contiene las unidades
típicas de este modelo: entradas, salidas, unidad de control, unidad de procesamiento
de datos y memoria para datos e instrucciones. La filosofía de concepción y diseño de
este computador es eminentemente pedagógica.
Ambos procesadores son de tipo RISC (del inglés Reduced Instruction Set Computer, en
español Computador con conjunto de instrucciones reducido), con un formato de
instrucciones completamente regular, y con 16 instrucciones máquina (refiriéndose a
estos como un conjunto de todos los comandos implementados por un diseño
particular de una CPU). La longitud de palabra (tanto de la Unidad Lógica Aritmética
ALU como de la memoria) de ODE es de 12 bits, mientras que la de CODE-2 es de 16
bits.
Para qué se puede utilizar CODE-2
El modelo pudiese utilizarse para enseñanza del lenguaje máquina, del lenguaje
ensamblador y realizar con los alumnos su diseño completo a nivel de puertas
lógicas y circuitos integrados de media escala (decodificadores, multiplexores, etc.)
así como con circuitos de muy gran escala (con una Matriz de puertas lógicas
programable en campo FPGA, por ejemplo).
Descripción de un Computador Didáctico
Elemental a nivel de Lenguaje Ensamblador
Elementos que componen un CODE-2 Los elementos a los que se tiene acceso
directamente desde el nivel de descripción de lenguaje máquina son:
● Un banco de 16 registros (r0 a rF).
● Unidad Aritmético Lógica (ALU): La ALU tiene asociados biestables
indicadores, que funcionan de forma usual, de acuerdo con los resultados
obtenidos en ella: biestable de cero (Z), de signo (S), de acarreo (C) y de
desbordamiento (V).
● Memoria Principal: de 216 =64Kpalabras de 16 bits (128 Kbytes), direccionable
por palabras.
● Puertos de entrada y salida: Se admiten 256 puertos de entrada (IP00...IPFF)
y otros 256 puertos de salida (OP00...OPFF).
16 instrucciones que son:
LD: cargar un registro con un dato de la memoria.
ST: almacenar el contenido de un registro de memoria.
LLI: carga los 8 bits menos significativos de un registro con el valor que se da en el
campo v de la instrucción, los más significativos los pone a 0.
LHI: carga los 8 bits más significativos de un registro con el valor que se da en el
campo v de la instrucción, no modifica los 8 bits menos significativos.
IN: entrada (lleva el contenido de un puerto de entrada a uno de los registros).
OUT: salida (lleva el contenido de un registro a un puerto de salida)
ADDS: suma
SUBS: resta.
NAND: operación lógica NAND.
SHL: desplaza a la izquierda los bits de un registro
SHR: desplaza a la derecha los bits de un registro.
SHRA: desplaza a la derecha los bits de un registro, sin modificar el bit más significativo.
B-: salto del programa a la posición de memoria indicada en el registro rD
CALL-: llamada al subprograma que comienza en la posición de memoria indicada en el registro rD
RET: retorno de subprograma
HALT: parada
También podemos dividirlo de la siguiente
manera:
● Banco de registros, compuesto de 16 registros r0,...,rF. El registro rE se utiliza
como puntero de pila (SP) y el rD como registro de dirección, para almacenar
posiciones de memoria con objeto de realizar direccionamientos indirectos e
indexados. A pesar de la dedicación específica de los registros rE y rD, el
programador puede utilizarlos también para otros cometidos.
● Unidad aritmético lógica (ALU), con la que se pueden realizar las operaciones
aritméticas de suma y resta (entero en complemento a 2), la operación lógica
NAND, desplazamientos lógicos del acumulador a derecha e izquierda y
desplazamiento aritmético a la derecha.
● Biestables indicadores (FF) para gestionar las instrucciones condicionales de
salto o de llamadas a subprogramas. Se incluyen biestables de cero (Z), signo
(S), acarreo (C) y desbordamiento (V).
● Memoria principal (M), de 2E16 = 64K palabras de 16 bits (128 KB).
● Puertos de entrada (IP) y puertos de salida (OP)
Cómo se puede utilizar CODE-2
En esta imagen vemos seleccionado el botón de encendido y apagado de lo que sería
un simulador de CODE-2. Al encender el simulador, nos carga automáticamente los
valores que tienen guardados en memoria los microprocesadores conectados o
simulados, esto haciendo uso de las distintas. Donde podemos ingresar los datos de
información de Registro en el campo IR, podemos lograrlo a través del uso del teclado
disponible en este entorno simulado.
Una vez ingresada la información de nuestro IR, para guardar el dato ingresado en
la memoria del microprocesador presionamos el botón “Dirección”. Y al presionarlo
en la pantalla de “Dirección/OP1” o Dirección de Salida en pantalla 1, nos muestra la
información ingresada.
Para ingresar información en otros registros, sólo debemos ingresar la información
necesaria según la tabla de información mnemónica, y presionar el botón “Cargar”
del simulador.
En la pantalla “Contenido/OP2” nos muestra el contenido que hay en dicha
posición de memoria.
Al ingresar todos los registros necesarios para efectuar nuestro programa,
tenemos la posibilidad de ejecutar el programa con sólo presionar el botón
“Ejecutar”, y para mostrar otros valores registrados en memoria, presionamos el
botón “Continuar”.
El repertorio de instrucciones de CODE-2
considera cinco tipos de formatos (F0 a F4),
utilizando cada instrucción uno de ellos.
Todas las instrucciones comienzan con un campo de 4 bits que corresponde al
código de operación (codop). Por tanto, CODE-2 puede tener como máximo 16
instrucciones. Los otros campos de la instrucción hacen referencia a los
operadores de la instrucción y dependen del formato asociado a la instrucción.
Cada operando que comienzan por r representa un registro (r0 a rF), el operando v
corresponde a un valor inmediato de 8 bits, y cnd hace alusión a un código de
condición de salto o llamada a subrutina.
Cualquier programa (en código máquina) de CODE-2 solo puede contener
instrucciones tomadas de entre las 16 del repertorio. Cada instrucción queda
identificada por un código de operación (codop) de 4 bits (o una cifra hexadecimal),
y se forma de acuerdo con los formatos de la Primera imagen que presentamos.
Primero se incluyen los 4 bits del codop, y luego los códigos que identifican los
operandos de dicha instrucción (0000 para el registro r0, 0001 para el registro r1,....
1111 para el registro rF). Por ejemplo, la instrucción que sume el contenido de los
registros r4 y r5 y el resultado lo almacena en el registro rF es la siguiente: 0110 1111
0100 0101 (Código de operación de sumar: 0110; código del registro del resultado
rF: 1111, código del registro del primer sumando r4: 0100, y código del registro del
segundo sumando: 0101). En código hexadecimal esa instrucción sería: 6F45.
Formato de las instrucciones de ensamblador
Es la representación en binario de cada una de las instrucciones
Cada instrucción “contiene” explícitamente o implícitamente toda
la información que necesita para ejecutarse:
● Código de operación, indica a la UC el tipo de operación,
aritmética, lógica, de transferencia, salto, etc.
● El valor o la posición donde se hallan los operandos
● El lugar donde se tiene que depositar el resultado
● Dirección de la siguiente instrucción a ejecutar
Características generales
● Las instrucciones se "encajan" en alguno de los formatos disponibles
● Los formatos son sistemáticos (campos de longitud y posición fijas)
● El primero de los campos es el código de operación
● Siempre que se pueda, se supone información implícita para acortar:
● Siguiente instrucción en la siguiente posición de memoria, salvo bifurcaciones
● En vez de usar la operación pura se asignan diferentes códigos de operación
para diferentes modos de direccionamiento
● La ubicación del resultado coincide con el operando destino
Ejemplos de instrucciones
Directivas o Pseudoinstrucciones.
Las pseudoinstrucciones dan al ensamblador indicaciones como la dirección de
memoria a partir de la cual debe ir colocando los códigos traducidos, realizar la
reserva de las posiciones de memoria donde deben guardarse los resultados, etc.
Se utiliza el campo nemotécnico para transmitir esta información al programa
traductor y darle las indicaciones necesarias para que éste pueda realizar la
traducción correctamente. Por lo que debe reservarse un conjunto de
mnemotécnicos para este fin los cuales no se convierten en código máquina, sino
que son ejecutados directamente por el programa traductor.
Definiciones
1.- DEFINICIÓN DE SÍMBOLOS (EQU)
Definir un símbolo consiste en asignar un valor como un número o una dirección de memoria a un nombre
utilizando el directivo EQU.
Ejemplo: IMPRESORA EQU $AB12
Cuando el traductor lee este directivo, guarda la etiqueta y el valor indicado en el operando, en una zona
de memoria denominada tabla de símbolos. Al encontrar un símbolo en el campo de operandos el
traductor consultará esta tabla para ver el valor que le corresponde.
2.- EL CONTADOR DE DIRECCIÓN DE ENSAMBLADO (ORG)
El programa ensamblador utiliza un registro que le indica en qué posición de memoria debe guardar una
instrucción y que dirección debe asignar a una determinada etiqueta. Este registro se llama contador de
dirección de ensamblado. Para poner el contenido de este contador a un valor determinado se usa una
pseudoinstrucción denominada ORG.
Ejemplo: ORG $1500 pone el número $1500 en el contador de dirección de ensamblado.
3.- DEFINICIÓN DE CONSTANTES (DC) La sentencia DC.S permite definir una posición de memoria conteniendo un
valor determinado o una serie de valores que se colocarán en orden a partir de la posición señalada.
4.- DEFINICIÓN DE DATOS (DS) La sentencia DS,S reserva espacio de memoria sin especificar su contenido , y su
longitud viene dada por el valor del operando , viéndose afectado este por el tamaño de la palabra como un factor
multiplicador siendo por 1, por 2 o por 4 respectivamente.
5.- ULTIMA SENTENCIA DEL PROGRAMA (END) La sintaxis de este directivo es muy simple ya que consta sólo de
un campo de mnemotécnico, END. Este directivo únicamente se usa una vez en cada programa y será
necesariamente la última instrucción.
6.- ENLACE ENTRE PROGRAMAS (EXT, DEF) La programación modular consiste en dividir un programa complejo
en módulos independientes de manera que cada uno de ellos realice una tarea concreta. Para permitir la
traducción de dichos módulos se usa el directivo EXT que indica al ensamblador que los símbolos utilizados en el
módulo objeto de la traducción están definidos en otro módulo diferente. En el módulo donde se definen los
símbolos que pueden ser utilizados por otros módulos deberá indicarse con el directivo DEF.
7.- ACCIONES CONDICIONALES (IF, ELSE, ENDIF) Estas pseudoinstrucciones funcionan como en un lenguaje de
alto nivel, es decir si se verifica la condición, el ensamblador traduce las instrucciones entre el IF y el ELSE y sino,
entre el ELSE y el ENDIF.
8.- EJECUCIÓN DE INFORMES (NAME, PAGE, LIST, TABLE, LALL)
El programa ensamblador puede emitir una serie de informes, como mostrar un listado en lenguaje
ensamblador y en código máquina, mostrar los errores sintácticos, etc. Los directivos que realizan estas
funciones son los siguientes:
● NAME: da la posibilidad de poner un identificador al programa, así cuando se liste aparecerá el
nombre en la cabecera.
● PAGE: indica al traductor que debe de saltar a una nueva página cuando esté imprimiendo el
informe.
● LIST: indica al traductor que imprima el programa fuente.
● TABLE: indica al traductor que imprima la tabla de símbolos
● LALL: indica al traductor que imprima el programa fuente, el código máquina y la tabla de símbolos.
9.- ALMACENAMIENTO EN POSICIÓN PAR. Existe una pseudoinstrucción, EVEN, que soluciona el
problema de los microprocesadores de 16 bits, ya que estos sólo pueden utilizar datos de 2 bytes o más,
comenzando siempre desde una posición par.
Ejemplos de instrucciones en ensamblador.
La figura de la siguente pagina muestra un
programa en lenguaje ensamblador creado
mediante un editor de texto plano, un
programa que guarda únicamente el texto
codificado en formato ASCII o UNIcodE sin
información alguna sobre estilo.
El primer paso, por tanto, para la obtención
de un programa ejecutable es la creación de
un fichero de texto que contenga el código.
Un programa consta de varias secciones separadas cada una de
ellas por palabras clave que comienzan por el símbolo “.”. La
palabra .data
que aparece en la primera línea no tiene traducción alguna para la
ejecución, sino que es la forma de notificar al ensamblador que a
continuación se encuentran definidos conjunto de datos. A este tipo
de palabras que comienzan por punto se les denomina “directivas”.
El programa tiene definido un único dato que se representa como
una secuencia de caracteres. La línea que contiene .asciz
(también una directiva) seguida del string entre comillas es la que
instruye al ensamblador para crear una zona de memoria con datos,
y almacenar en ella el string que se muestra terminado por un byte
con valor cero. El efecto de la directiva .asciz
es que, al comienzo de la ejecución de programa, este string esté
almacenado en memoria.
Ambigüedades
Ambigüedad es la cualidad de ambiguo, es decir, es un
término que expresa la cualidad de aquello que es
susceptible a varias interpretaciones, todas ellas
coherentes, lo que da lugar a la duda, la imprecisión, la
confusión o la ambivalencia.
La programación se rige por reglas y un conjunto más o
menos reducido de órdenes, expresiones, instrucciones y
comandos que tienden a asemejarse a una lengua natural
acotada (en inglés); y que además tienen la particularidad
de una reducida ambigüedad. Cuanto menos ambiguo es
un lenguaje de programación, se dice, es más potente.
Bajo esta premisa, y en el extremo, el lenguaje más
potente existente es el binario, con ambigüedad nula (lo
cual lleva a pensar así del lenguaje ensamblador).
Ejemplo de programa en ensamblador
El lenguaje ensamblador o assembler (en inglés: assembler language y la abreviación
asm) es un lenguaje de programación que se usa en los microprocesadores.
Implementa una representación simbólica de los códigos de máquina binarios y otras
constantes necesarias para programar una arquitectura de procesador y constituye la
representación más directa del código máquina específico para cada arquitectura
legible por un programador. Cada arquitectura de procesador tiene su propio lenguaje
ensamblador que usualmente es definida por el fabricante de hardware, y está basada
en los mnemónicos que simbolizan los pasos de procesamiento (las instrucciones), los
registros del procesador, las posiciones de memoria y otras características del lenguaje.
Un lenguaje ensamblador es por lo tanto específico de cierta arquitectura de
computador física (o virtual). Esto está en contraste con la mayoría de los lenguajes de
programación de alto nivel, que idealmente son portables.
Un programa utilitario llamado ensamblador es usado para traducir sentencias del
lenguaje ensamblador al código de máquina del computador objetivo. El
ensamblador realiza una traducción más o menos isomorfa (un mapeo de uno a
uno) desde las sentencias mnemónicas a las instrucciones y datos de máquina.
Esto está en contraste con los lenguajes de alto nivel, en los cuales una sola
declaración generalmente da lugar a muchas instrucciones de máquina.
Muchos sofisticados ensambladores ofrecen mecanismos adicionales para facilitar
el desarrollo del programa, controlar el proceso de ensamblaje, y la ayuda de
depuración. Particularmente, la mayoría de los ensambladores modernos incluyen
una facilidad de macro (descrita más abajo), y se llaman macro ensambladores.
Fue usado principalmente en los inicios del desarrollo de software, cuando aún no
se contaba con potentes lenguajes de alto nivel y los recursos eran limitados.
Actualmente se utiliza con frecuencia en ambientes académicos y de investigación,
especialmente cuando se requiere la manipulación directa de hardware, alto
rendimiento, o un uso de recursos controlado y reducido. También es utilizado en
el desarrollo de controladores de dispositivo (en inglés, device drivers) y en el
desarrollo de sistemas operativos, debido a la necesidad del acceso directo a las
instrucciones de la máquina. Muchos dispositivos programables (como los
microcontroladores) aún cuentan con el ensamblador como la única manera de ser
manipulados.
Características
El código escrito en lenguaje ensamblador posee una cierta dificultad de ser
entendido ya que su estructura se acerca al lenguaje máquina, es decir, es un
lenguaje de bajo nivel.
El lenguaje ensamblador es difícilmente portable, es decir, un código escrito para
un microprocesador, puede necesitar ser modificado, para poder ser usado en otra
máquina distinta. Al cambiar a una máquina con arquitectura diferente,
generalmente es necesario reescribir completamente.
Los programas hechos por un programador experto en lenguaje ensamblador
pueden ser más rápidos y consumir menos recursos del sistema (ej: memoria RAM)
que el programa equivalente compilado desde un lenguaje de alto nivel. Al
programar cuidadosamente en lenguaje ensamblador se pueden crear programas
que se ejecutan más rápidamente y ocupan menos espacio que con lenguajes de
alto nivel. Conforme han evolucionado tanto los procesadores como los
compiladores de lenguajes de alto nivel, esta característica del lenguaje
ensamblador se ha vuelto cada vez menos significativa. Es decir, un compilador
moderno de lenguaje de alto nivel puede generar código casi tan eficiente como
su equivalente en lenguaje ensamblador.1
Con el lenguaje ensamblador se tiene un control muy preciso de las tareas
realizadas por un microprocesador por lo que se pueden crear segmentos de
código difíciles y/o muy ineficientes de programar en un lenguaje de alto nivel, ya
que, entre otras cosas, en el lenguaje ensamblador se dispone de instrucciones del
CPU que generalmente no están disponibles en los lenguajes de alto nivel.
Programa ensamblador
Artículo principal: Ensamblador
Generalmente, un programa ensamblador (assembler en inglés) moderno crea
código objeto traduciendo instrucciones mnemónicas de lenguaje ensamblador en
opcodes, y resolviendo los nombres simbólicos para las localizaciones de memoria
y otras entidades.2 El uso de referencias simbólicas es una característica clave del
lenguaje ensamblador, evitando tediosos cálculos y actualizaciones manuales de
las direcciones después de cada modificación del programa. La mayoría de los
ensambladores también incluyen facilidades de macros para realizar sustitución
textual - ej. generar cortas secuencias de instrucciones como expansión en línea
en vez de llamar a subrutinas.
Los ensambladores son generalmente más simples de escribir que los
compiladores para los lenguajes de alto nivel, y han estado disponibles desde los
años 1950. Los ensambladores modernos, especialmente para las arquitecturas
basadas en RISC, tales como MIPS, Sun SPARC, y HP PA-RISC, así como también
para el x86 (-64), optimizan la planificación de instrucciones para explotar la
segmentación del CPU eficientemente.
En los compiladores para lenguajes de alto nivel, son el último paso antes de
generar el código ejecutable.
Número de pasos
Hay dos tipos de ensambladores basados en cuántos pasos a través de la fuente
son necesarios para producir el programa ejecutable.
Los ensambladores de un solo paso pasan a través del código fuente una vez y
asumen que todos los símbolos serán definidos antes de cualquier instrucción que
los refiera.
Los ensambladores de dos pasos crean una tabla con todos los símbolos y sus
valores en el primer paso, después usan la tabla en un segundo paso para generar
código. El ensamblador debe por lo menos poder determinar la longitud de cada
instrucción en el primer paso para que puedan ser calculadas las direcciones de
los símbolos.
La ventaja de un ensamblador de un solo paso es la velocidad, que no es tan
importante como lo fue en un momento, dados los avances en velocidad y
capacidades del computador. La ventaja del ensamblador de dos pasos es que los
símbolos pueden ser definidos dondequiera en el código fuente del programa.
Esto permite a los programas ser definidos de maneras más lógicas y más
significativas, haciendo los programas de ensamblador de dos pasos más fáciles
de leer y mantener.3
Ensambladores de alto nivel
Los más sofisticados ensambladores de alto nivel proporcionan abstracciones del
lenguaje tales como:
● Estructuras de control avanzadas
● Declaraciones e invocaciones de procedimientos/funciones de alto nivel
● Tipos de datos abstractos de alto nivel, incluyendo las estructuras/records,
uniones, clases, y conjuntos
● Procesamiento de macros sofisticado (aunque está disponible en los
ensambladores ordinarios desde finales de los años 1960 para el IBM S/360,
entre otras máquinas)
● Características de programación orientada a objetos.
lenguajes ensambladores normalización
IEEE694
● Los lenguajes máquina y ensamblador (también denominados lenguajes de bajo nivel) están
totalmente ligados a la estructura del computador. En primer lugar se describen los modos de
direccionamiento básico, que indican las formas en las que el procesador capta los operandos
o almacena los resultados. Después se dan unas ideas sobre los apartados o campos que
suele contener una instrucción máquina (formatos). Posteriormente se hace la descripción a
nivel de lenguaje máquina y ensamblador de un Computador Didáctico Elemental (que
denominamos CODE-2), y que será diseñado en su totalidad en el Capítulo 9.
● Aunque los lenguajes ensambladores son distintos de un computador a otro, la mayor parte de
ellos sigue una misma filosofía, por lo que es de una gran utilidad utilizar una terminología
común; esto es lo que pretende el estándar IEEE 694, que resumimos en una de las últimas
secciones del presente capítulo. Consideramos de mayor interés describir esta normalización
que analizar el lenguaje ensamblador de un procesador comercial concreto
Aunque los lenguajes ensambladores son distintos de un computador a otro, la mayor
parte de ellos sigue una misma filosofía, por lo que es de una gran utilidad utilizar una
terminología común; esto es lo que pretende el estándar IEEE 694, que resumimos en
una de las últimas secciones del presente capítulo. Consideramos de mayor interés
describir esta normalización que analizar el lenguaje ensamblador de un procesador
comercial concreto
Las arquitecturas de computadores varían mucho en cuanto al número de modos de
direccionamiento que ofrecen desde el hardware. Eliminar los modos de
direccionamiento más complejos podría presentar una serie de beneficios, aunque
podría requerir de instrucciones adicionales, e incluso de otro registro. Se ha
comprobado que el diseño de las CPU segmentadas es mucho más fácil si los únicos
modos de direccionamiento que proporcionan son simples.
Direccionamientos y operandos
En informática, los modos de direccionamiento son las diferentes maneras de
especificar un operando dentro de una instrucción en lenguaje ensamblador.
Un modo de direccionamiento especifica la forma de calcular la dirección de
memoria efectiva de un operando mediante el uso de la información contenida en
registros y/o constantes, contenida dentro de una instrucción de la máquina o en
otra parte.
Formato de las Instrucciones
El formato de las instrucciones es un conjunto de especificaciones que indican
cómo debe ser interpretado el patrón de bits de una instrucción de máquina para
lograr su ejecución dentro del computador.
Formato de instrucción: representación en binario de la misma.
El formato de instrucción especifica el significado de cada uno de los bits que la
constituyen.
Longitud del formato de instrucción: número de bits que lo componen.
CARACTERÍSTICAS DE LAS INSTRUCCIONES
Tipos
➢ Transferencia de datos.
➢ Instrucciones aritméticas.
➢ Instrucciones de comparación.
➢ Instrucciones lógicas.
➢ Instrucciones de
desplazamiento.
➢ Instrucciones de bits.
➢ Instrucciones de control.
➢ Instrucciones de entrada y
salida.
FORMATO
La información contenida en el formato de la instrucción es:
➢ Código de operación (COP).
➢ Dirección de los operandos (OP1 y OP2).
➢ Dirección del resultado (RES).
➢ Dirección de la siguiente instrucción (casi siempre implícita).
➢ Tipos de representación de los operandos (casi siempre implícitos en
el código de operación).
➢ Modificador (MD): suele completar al CO, y sirve para especificar
ciertas particularidades de la instrucción:
➢ Tamaño y tipo de los operandos.
➢ A veces se usa para distinguir entre operaciones similares.
Comparacion entre lenguaje de maquina y
ensamblador
El lenguaje máquina es el lenguaje de programación de bajo nivel. El lenguaje máquina solo
se puede representar con 0 y 1. Anteriormente, cuando tenemos que crear una imagen o
mostrar datos en la pantalla de la computadora, es muy difícil dibujar usando solo dígitos
binarios (0 y 1). Por ejemplo: Para escribir 120 en el sistema informático su representación es
1111000. Entonces es muy difícil de aprender. Para superar este problema se inventa el
lenguaje ensamblador.
El lenguaje ensamblador es más que un lenguaje de bajo nivel y menos de un alto nivel, por lo
que es un lenguaje intermedio. Los lenguajes ensambladores usan números, símbolos y
abreviaturas en lugar de 0 y 1. Por ejemplo: para sumar, restar y multiplicar, usa símbolos como
Add, sub y Mul, etc.
Muchas Gracias!

Más contenido relacionado

La actualidad más candente

Arboles B y Arboles B+
Arboles B y Arboles B+Arboles B y Arboles B+
Arboles B y Arboles B+neltherdaza
 
Compuertas logicas
Compuertas logicasCompuertas logicas
Compuertas logicasJesus Chaux
 
Elementos de programación
Elementos de programaciónElementos de programación
Elementos de programaciónprisscampos
 
Tipos de datos en MySQL Workbench
Tipos de datos en  MySQL  WorkbenchTipos de datos en  MySQL  Workbench
Tipos de datos en MySQL WorkbenchJair Ospino Ardila
 
ORDENAMIENTO POR INTERCAMBIO
ORDENAMIENTO POR INTERCAMBIOORDENAMIENTO POR INTERCAMBIO
ORDENAMIENTO POR INTERCAMBIOWilmer Quintero
 
Introducción a los tipos de datos
Introducción a los tipos de datosIntroducción a los tipos de datos
Introducción a los tipos de datosCarlos Pes
 
Entidad Relación | Ejercicio 2
Entidad Relación | Ejercicio 2Entidad Relación | Ejercicio 2
Entidad Relación | Ejercicio 2Jorge Canal
 
Java pilas (Stacks) y colas (Queues)
Java pilas (Stacks) y colas (Queues)Java pilas (Stacks) y colas (Queues)
Java pilas (Stacks) y colas (Queues)Juan Astudillo
 
Como Escribir Un Programa Y Compilarlo Con Mplab
Como Escribir Un Programa Y Compilarlo Con MplabComo Escribir Un Programa Y Compilarlo Con Mplab
Como Escribir Un Programa Y Compilarlo Con Mplabmariociunne
 
arboles avl con codigo en java
arboles avl con codigo en javaarboles avl con codigo en java
arboles avl con codigo en javamarhoz
 
Estructura de datos lineales y no lineales
Estructura de datos lineales y no linealesEstructura de datos lineales y no lineales
Estructura de datos lineales y no linealeslos4estatidinamicos
 
Base de Datos
Base de DatosBase de Datos
Base de DatosFRDO
 
Programación Orientada a Objetos -Unidad 6 archivos
Programación Orientada a Objetos -Unidad 6 archivosProgramación Orientada a Objetos -Unidad 6 archivos
Programación Orientada a Objetos -Unidad 6 archivosJosé Antonio Sandoval Acosta
 
Unidad v arboles ESTRUCTURA DE DATOS
Unidad v arboles ESTRUCTURA DE DATOSUnidad v arboles ESTRUCTURA DE DATOS
Unidad v arboles ESTRUCTURA DE DATOSAnthony Can
 

La actualidad más candente (20)

Arboles B y Arboles B+
Arboles B y Arboles B+Arboles B y Arboles B+
Arboles B y Arboles B+
 
Unidad IV
Unidad IVUnidad IV
Unidad IV
 
Compuertas logicas
Compuertas logicasCompuertas logicas
Compuertas logicas
 
Elementos de programación
Elementos de programaciónElementos de programación
Elementos de programación
 
Tipos de datos en MySQL Workbench
Tipos de datos en  MySQL  WorkbenchTipos de datos en  MySQL  Workbench
Tipos de datos en MySQL Workbench
 
ORDENAMIENTO POR INTERCAMBIO
ORDENAMIENTO POR INTERCAMBIOORDENAMIENTO POR INTERCAMBIO
ORDENAMIENTO POR INTERCAMBIO
 
Arboles multicamino
Arboles  multicaminoArboles  multicamino
Arboles multicamino
 
Aplicaciones de los árboles y grafos
Aplicaciones de los árboles y grafosAplicaciones de los árboles y grafos
Aplicaciones de los árboles y grafos
 
Erwin
ErwinErwin
Erwin
 
Introducción a los tipos de datos
Introducción a los tipos de datosIntroducción a los tipos de datos
Introducción a los tipos de datos
 
Entidad Relación | Ejercicio 2
Entidad Relación | Ejercicio 2Entidad Relación | Ejercicio 2
Entidad Relación | Ejercicio 2
 
Java pilas (Stacks) y colas (Queues)
Java pilas (Stacks) y colas (Queues)Java pilas (Stacks) y colas (Queues)
Java pilas (Stacks) y colas (Queues)
 
Diagrama de clases
Diagrama de clasesDiagrama de clases
Diagrama de clases
 
Como Escribir Un Programa Y Compilarlo Con Mplab
Como Escribir Un Programa Y Compilarlo Con MplabComo Escribir Un Programa Y Compilarlo Con Mplab
Como Escribir Un Programa Y Compilarlo Con Mplab
 
arboles avl con codigo en java
arboles avl con codigo en javaarboles avl con codigo en java
arboles avl con codigo en java
 
Estructura de datos lineales y no lineales
Estructura de datos lineales y no linealesEstructura de datos lineales y no lineales
Estructura de datos lineales y no lineales
 
Base de Datos
Base de DatosBase de Datos
Base de Datos
 
Modelos de dominio
Modelos de dominioModelos de dominio
Modelos de dominio
 
Programación Orientada a Objetos -Unidad 6 archivos
Programación Orientada a Objetos -Unidad 6 archivosProgramación Orientada a Objetos -Unidad 6 archivos
Programación Orientada a Objetos -Unidad 6 archivos
 
Unidad v arboles ESTRUCTURA DE DATOS
Unidad v arboles ESTRUCTURA DE DATOSUnidad v arboles ESTRUCTURA DE DATOS
Unidad v arboles ESTRUCTURA DE DATOS
 

Similar a Unidad III Lenguaje Ensamblador (2).pptx

Similar a Unidad III Lenguaje Ensamblador (2).pptx (20)

Emsamblador
EmsambladorEmsamblador
Emsamblador
 
PIPPIN
PIPPINPIPPIN
PIPPIN
 
PIPPIN
PIPPINPIPPIN
PIPPIN
 
Como programar un pic
Como programar un pic  Como programar un pic
Como programar un pic
 
Lenguajes de interfaz
Lenguajes de interfazLenguajes de interfaz
Lenguajes de interfaz
 
Unidadi. lenguajes de interfaz
Unidadi.   lenguajes de interfazUnidadi.   lenguajes de interfaz
Unidadi. lenguajes de interfaz
 
Práctica #2 parcial #2 registros del banco
Práctica #2 parcial #2  registros del bancoPráctica #2 parcial #2  registros del banco
Práctica #2 parcial #2 registros del banco
 
Lenguaje ensamblador y Estructura del CPU
Lenguaje ensamblador y Estructura del CPULenguaje ensamblador y Estructura del CPU
Lenguaje ensamblador y Estructura del CPU
 
Compiladores
CompiladoresCompiladores
Compiladores
 
Lenguaje ensamblador
Lenguaje ensambladorLenguaje ensamblador
Lenguaje ensamblador
 
Lenguaje ensamblador
Lenguaje ensambladorLenguaje ensamblador
Lenguaje ensamblador
 
Mis preguntas del blog y las ultimas .l.
Mis preguntas del blog y las ultimas .l.Mis preguntas del blog y las ultimas .l.
Mis preguntas del blog y las ultimas .l.
 
Logica digital
Logica digitalLogica digital
Logica digital
 
Microprocesadores
MicroprocesadoresMicroprocesadores
Microprocesadores
 
Practica1
Practica1Practica1
Practica1
 
38912287 practica1
38912287 practica138912287 practica1
38912287 practica1
 
Practica1
Practica1Practica1
Practica1
 
Lenguaje Ensamblador
Lenguaje Ensamblador Lenguaje Ensamblador
Lenguaje Ensamblador
 
El Procesador o CPU 2
El Procesador o CPU 2El Procesador o CPU 2
El Procesador o CPU 2
 
Assambler
AssamblerAssambler
Assambler
 

Último

Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 

Último (13)

Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 

Unidad III Lenguaje Ensamblador (2).pptx

  • 1. Unidad III Lenguaje Ensamblador Equipo 3 Adan A. Roa Juliao Juan Antonio García Amaro Harold Cuevas Pablus Estefania Doguelis Axel Jonas Encarnación Pérez Luis Anderson Dipre Lorenzo
  • 2. CODE-2 CODE-2 (Computador Didáctico Elemental, versión 2), y su predecesor el Ordenador Didáctico Elemental ODE son dos procesadores ideados por los profesores Alberto Prieto y Antonio Lloris, de la Universidad de Granada, para facilitar la comprensión del funcionamiento y el diseño hardware de un computador
  • 3. CODE-2, es la segunda versión de un Computador Didáctico Elemental diseñado en el Departamento de Arquitectura y Tecnología de Computadores de la Universidad de Granada. Se trata de un computador de tipo Von Newmann, que contiene las unidades típicas de este modelo: entradas, salidas, unidad de control, unidad de procesamiento de datos y memoria para datos e instrucciones. La filosofía de concepción y diseño de este computador es eminentemente pedagógica. Ambos procesadores son de tipo RISC (del inglés Reduced Instruction Set Computer, en español Computador con conjunto de instrucciones reducido), con un formato de instrucciones completamente regular, y con 16 instrucciones máquina (refiriéndose a estos como un conjunto de todos los comandos implementados por un diseño particular de una CPU). La longitud de palabra (tanto de la Unidad Lógica Aritmética ALU como de la memoria) de ODE es de 12 bits, mientras que la de CODE-2 es de 16 bits.
  • 4. Para qué se puede utilizar CODE-2 El modelo pudiese utilizarse para enseñanza del lenguaje máquina, del lenguaje ensamblador y realizar con los alumnos su diseño completo a nivel de puertas lógicas y circuitos integrados de media escala (decodificadores, multiplexores, etc.) así como con circuitos de muy gran escala (con una Matriz de puertas lógicas programable en campo FPGA, por ejemplo).
  • 5. Descripción de un Computador Didáctico Elemental a nivel de Lenguaje Ensamblador Elementos que componen un CODE-2 Los elementos a los que se tiene acceso directamente desde el nivel de descripción de lenguaje máquina son: ● Un banco de 16 registros (r0 a rF). ● Unidad Aritmético Lógica (ALU): La ALU tiene asociados biestables indicadores, que funcionan de forma usual, de acuerdo con los resultados obtenidos en ella: biestable de cero (Z), de signo (S), de acarreo (C) y de desbordamiento (V). ● Memoria Principal: de 216 =64Kpalabras de 16 bits (128 Kbytes), direccionable por palabras. ● Puertos de entrada y salida: Se admiten 256 puertos de entrada (IP00...IPFF) y otros 256 puertos de salida (OP00...OPFF).
  • 6. 16 instrucciones que son: LD: cargar un registro con un dato de la memoria. ST: almacenar el contenido de un registro de memoria. LLI: carga los 8 bits menos significativos de un registro con el valor que se da en el campo v de la instrucción, los más significativos los pone a 0. LHI: carga los 8 bits más significativos de un registro con el valor que se da en el campo v de la instrucción, no modifica los 8 bits menos significativos. IN: entrada (lleva el contenido de un puerto de entrada a uno de los registros). OUT: salida (lleva el contenido de un registro a un puerto de salida)
  • 7. ADDS: suma SUBS: resta. NAND: operación lógica NAND. SHL: desplaza a la izquierda los bits de un registro SHR: desplaza a la derecha los bits de un registro. SHRA: desplaza a la derecha los bits de un registro, sin modificar el bit más significativo. B-: salto del programa a la posición de memoria indicada en el registro rD CALL-: llamada al subprograma que comienza en la posición de memoria indicada en el registro rD RET: retorno de subprograma HALT: parada
  • 8. También podemos dividirlo de la siguiente manera: ● Banco de registros, compuesto de 16 registros r0,...,rF. El registro rE se utiliza como puntero de pila (SP) y el rD como registro de dirección, para almacenar posiciones de memoria con objeto de realizar direccionamientos indirectos e indexados. A pesar de la dedicación específica de los registros rE y rD, el programador puede utilizarlos también para otros cometidos. ● Unidad aritmético lógica (ALU), con la que se pueden realizar las operaciones aritméticas de suma y resta (entero en complemento a 2), la operación lógica NAND, desplazamientos lógicos del acumulador a derecha e izquierda y desplazamiento aritmético a la derecha.
  • 9. ● Biestables indicadores (FF) para gestionar las instrucciones condicionales de salto o de llamadas a subprogramas. Se incluyen biestables de cero (Z), signo (S), acarreo (C) y desbordamiento (V). ● Memoria principal (M), de 2E16 = 64K palabras de 16 bits (128 KB). ● Puertos de entrada (IP) y puertos de salida (OP)
  • 10. Cómo se puede utilizar CODE-2 En esta imagen vemos seleccionado el botón de encendido y apagado de lo que sería un simulador de CODE-2. Al encender el simulador, nos carga automáticamente los valores que tienen guardados en memoria los microprocesadores conectados o simulados, esto haciendo uso de las distintas. Donde podemos ingresar los datos de información de Registro en el campo IR, podemos lograrlo a través del uso del teclado disponible en este entorno simulado.
  • 11. Una vez ingresada la información de nuestro IR, para guardar el dato ingresado en la memoria del microprocesador presionamos el botón “Dirección”. Y al presionarlo en la pantalla de “Dirección/OP1” o Dirección de Salida en pantalla 1, nos muestra la información ingresada. Para ingresar información en otros registros, sólo debemos ingresar la información necesaria según la tabla de información mnemónica, y presionar el botón “Cargar” del simulador. En la pantalla “Contenido/OP2” nos muestra el contenido que hay en dicha posición de memoria.
  • 12. Al ingresar todos los registros necesarios para efectuar nuestro programa, tenemos la posibilidad de ejecutar el programa con sólo presionar el botón “Ejecutar”, y para mostrar otros valores registrados en memoria, presionamos el botón “Continuar”.
  • 13. El repertorio de instrucciones de CODE-2 considera cinco tipos de formatos (F0 a F4), utilizando cada instrucción uno de ellos.
  • 14. Todas las instrucciones comienzan con un campo de 4 bits que corresponde al código de operación (codop). Por tanto, CODE-2 puede tener como máximo 16 instrucciones. Los otros campos de la instrucción hacen referencia a los operadores de la instrucción y dependen del formato asociado a la instrucción. Cada operando que comienzan por r representa un registro (r0 a rF), el operando v corresponde a un valor inmediato de 8 bits, y cnd hace alusión a un código de condición de salto o llamada a subrutina.
  • 15.
  • 16. Cualquier programa (en código máquina) de CODE-2 solo puede contener instrucciones tomadas de entre las 16 del repertorio. Cada instrucción queda identificada por un código de operación (codop) de 4 bits (o una cifra hexadecimal), y se forma de acuerdo con los formatos de la Primera imagen que presentamos.
  • 17. Primero se incluyen los 4 bits del codop, y luego los códigos que identifican los operandos de dicha instrucción (0000 para el registro r0, 0001 para el registro r1,.... 1111 para el registro rF). Por ejemplo, la instrucción que sume el contenido de los registros r4 y r5 y el resultado lo almacena en el registro rF es la siguiente: 0110 1111 0100 0101 (Código de operación de sumar: 0110; código del registro del resultado rF: 1111, código del registro del primer sumando r4: 0100, y código del registro del segundo sumando: 0101). En código hexadecimal esa instrucción sería: 6F45.
  • 18.
  • 19. Formato de las instrucciones de ensamblador Es la representación en binario de cada una de las instrucciones Cada instrucción “contiene” explícitamente o implícitamente toda la información que necesita para ejecutarse: ● Código de operación, indica a la UC el tipo de operación, aritmética, lógica, de transferencia, salto, etc. ● El valor o la posición donde se hallan los operandos ● El lugar donde se tiene que depositar el resultado ● Dirección de la siguiente instrucción a ejecutar
  • 20. Características generales ● Las instrucciones se "encajan" en alguno de los formatos disponibles ● Los formatos son sistemáticos (campos de longitud y posición fijas) ● El primero de los campos es el código de operación ● Siempre que se pueda, se supone información implícita para acortar: ● Siguiente instrucción en la siguiente posición de memoria, salvo bifurcaciones ● En vez de usar la operación pura se asignan diferentes códigos de operación para diferentes modos de direccionamiento ● La ubicación del resultado coincide con el operando destino
  • 22. Directivas o Pseudoinstrucciones. Las pseudoinstrucciones dan al ensamblador indicaciones como la dirección de memoria a partir de la cual debe ir colocando los códigos traducidos, realizar la reserva de las posiciones de memoria donde deben guardarse los resultados, etc. Se utiliza el campo nemotécnico para transmitir esta información al programa traductor y darle las indicaciones necesarias para que éste pueda realizar la traducción correctamente. Por lo que debe reservarse un conjunto de mnemotécnicos para este fin los cuales no se convierten en código máquina, sino que son ejecutados directamente por el programa traductor.
  • 23.
  • 24. Definiciones 1.- DEFINICIÓN DE SÍMBOLOS (EQU) Definir un símbolo consiste en asignar un valor como un número o una dirección de memoria a un nombre utilizando el directivo EQU. Ejemplo: IMPRESORA EQU $AB12 Cuando el traductor lee este directivo, guarda la etiqueta y el valor indicado en el operando, en una zona de memoria denominada tabla de símbolos. Al encontrar un símbolo en el campo de operandos el traductor consultará esta tabla para ver el valor que le corresponde. 2.- EL CONTADOR DE DIRECCIÓN DE ENSAMBLADO (ORG) El programa ensamblador utiliza un registro que le indica en qué posición de memoria debe guardar una instrucción y que dirección debe asignar a una determinada etiqueta. Este registro se llama contador de dirección de ensamblado. Para poner el contenido de este contador a un valor determinado se usa una pseudoinstrucción denominada ORG. Ejemplo: ORG $1500 pone el número $1500 en el contador de dirección de ensamblado.
  • 25. 3.- DEFINICIÓN DE CONSTANTES (DC) La sentencia DC.S permite definir una posición de memoria conteniendo un valor determinado o una serie de valores que se colocarán en orden a partir de la posición señalada. 4.- DEFINICIÓN DE DATOS (DS) La sentencia DS,S reserva espacio de memoria sin especificar su contenido , y su longitud viene dada por el valor del operando , viéndose afectado este por el tamaño de la palabra como un factor multiplicador siendo por 1, por 2 o por 4 respectivamente. 5.- ULTIMA SENTENCIA DEL PROGRAMA (END) La sintaxis de este directivo es muy simple ya que consta sólo de un campo de mnemotécnico, END. Este directivo únicamente se usa una vez en cada programa y será necesariamente la última instrucción. 6.- ENLACE ENTRE PROGRAMAS (EXT, DEF) La programación modular consiste en dividir un programa complejo en módulos independientes de manera que cada uno de ellos realice una tarea concreta. Para permitir la traducción de dichos módulos se usa el directivo EXT que indica al ensamblador que los símbolos utilizados en el módulo objeto de la traducción están definidos en otro módulo diferente. En el módulo donde se definen los símbolos que pueden ser utilizados por otros módulos deberá indicarse con el directivo DEF. 7.- ACCIONES CONDICIONALES (IF, ELSE, ENDIF) Estas pseudoinstrucciones funcionan como en un lenguaje de alto nivel, es decir si se verifica la condición, el ensamblador traduce las instrucciones entre el IF y el ELSE y sino, entre el ELSE y el ENDIF.
  • 26. 8.- EJECUCIÓN DE INFORMES (NAME, PAGE, LIST, TABLE, LALL) El programa ensamblador puede emitir una serie de informes, como mostrar un listado en lenguaje ensamblador y en código máquina, mostrar los errores sintácticos, etc. Los directivos que realizan estas funciones son los siguientes: ● NAME: da la posibilidad de poner un identificador al programa, así cuando se liste aparecerá el nombre en la cabecera. ● PAGE: indica al traductor que debe de saltar a una nueva página cuando esté imprimiendo el informe. ● LIST: indica al traductor que imprima el programa fuente. ● TABLE: indica al traductor que imprima la tabla de símbolos ● LALL: indica al traductor que imprima el programa fuente, el código máquina y la tabla de símbolos. 9.- ALMACENAMIENTO EN POSICIÓN PAR. Existe una pseudoinstrucción, EVEN, que soluciona el problema de los microprocesadores de 16 bits, ya que estos sólo pueden utilizar datos de 2 bytes o más, comenzando siempre desde una posición par.
  • 27. Ejemplos de instrucciones en ensamblador. La figura de la siguente pagina muestra un programa en lenguaje ensamblador creado mediante un editor de texto plano, un programa que guarda únicamente el texto codificado en formato ASCII o UNIcodE sin información alguna sobre estilo. El primer paso, por tanto, para la obtención de un programa ejecutable es la creación de un fichero de texto que contenga el código.
  • 28.
  • 29. Un programa consta de varias secciones separadas cada una de ellas por palabras clave que comienzan por el símbolo “.”. La palabra .data que aparece en la primera línea no tiene traducción alguna para la ejecución, sino que es la forma de notificar al ensamblador que a continuación se encuentran definidos conjunto de datos. A este tipo de palabras que comienzan por punto se les denomina “directivas”. El programa tiene definido un único dato que se representa como una secuencia de caracteres. La línea que contiene .asciz (también una directiva) seguida del string entre comillas es la que instruye al ensamblador para crear una zona de memoria con datos, y almacenar en ella el string que se muestra terminado por un byte con valor cero. El efecto de la directiva .asciz es que, al comienzo de la ejecución de programa, este string esté almacenado en memoria.
  • 30. Ambigüedades Ambigüedad es la cualidad de ambiguo, es decir, es un término que expresa la cualidad de aquello que es susceptible a varias interpretaciones, todas ellas coherentes, lo que da lugar a la duda, la imprecisión, la confusión o la ambivalencia. La programación se rige por reglas y un conjunto más o menos reducido de órdenes, expresiones, instrucciones y comandos que tienden a asemejarse a una lengua natural acotada (en inglés); y que además tienen la particularidad de una reducida ambigüedad. Cuanto menos ambiguo es un lenguaje de programación, se dice, es más potente. Bajo esta premisa, y en el extremo, el lenguaje más potente existente es el binario, con ambigüedad nula (lo cual lleva a pensar así del lenguaje ensamblador).
  • 31. Ejemplo de programa en ensamblador El lenguaje ensamblador o assembler (en inglés: assembler language y la abreviación asm) es un lenguaje de programación que se usa en los microprocesadores. Implementa una representación simbólica de los códigos de máquina binarios y otras constantes necesarias para programar una arquitectura de procesador y constituye la representación más directa del código máquina específico para cada arquitectura legible por un programador. Cada arquitectura de procesador tiene su propio lenguaje ensamblador que usualmente es definida por el fabricante de hardware, y está basada en los mnemónicos que simbolizan los pasos de procesamiento (las instrucciones), los registros del procesador, las posiciones de memoria y otras características del lenguaje. Un lenguaje ensamblador es por lo tanto específico de cierta arquitectura de computador física (o virtual). Esto está en contraste con la mayoría de los lenguajes de programación de alto nivel, que idealmente son portables.
  • 32. Un programa utilitario llamado ensamblador es usado para traducir sentencias del lenguaje ensamblador al código de máquina del computador objetivo. El ensamblador realiza una traducción más o menos isomorfa (un mapeo de uno a uno) desde las sentencias mnemónicas a las instrucciones y datos de máquina. Esto está en contraste con los lenguajes de alto nivel, en los cuales una sola declaración generalmente da lugar a muchas instrucciones de máquina. Muchos sofisticados ensambladores ofrecen mecanismos adicionales para facilitar el desarrollo del programa, controlar el proceso de ensamblaje, y la ayuda de depuración. Particularmente, la mayoría de los ensambladores modernos incluyen una facilidad de macro (descrita más abajo), y se llaman macro ensambladores.
  • 33. Fue usado principalmente en los inicios del desarrollo de software, cuando aún no se contaba con potentes lenguajes de alto nivel y los recursos eran limitados. Actualmente se utiliza con frecuencia en ambientes académicos y de investigación, especialmente cuando se requiere la manipulación directa de hardware, alto rendimiento, o un uso de recursos controlado y reducido. También es utilizado en el desarrollo de controladores de dispositivo (en inglés, device drivers) y en el desarrollo de sistemas operativos, debido a la necesidad del acceso directo a las instrucciones de la máquina. Muchos dispositivos programables (como los microcontroladores) aún cuentan con el ensamblador como la única manera de ser manipulados.
  • 34. Características El código escrito en lenguaje ensamblador posee una cierta dificultad de ser entendido ya que su estructura se acerca al lenguaje máquina, es decir, es un lenguaje de bajo nivel. El lenguaje ensamblador es difícilmente portable, es decir, un código escrito para un microprocesador, puede necesitar ser modificado, para poder ser usado en otra máquina distinta. Al cambiar a una máquina con arquitectura diferente, generalmente es necesario reescribir completamente.
  • 35. Los programas hechos por un programador experto en lenguaje ensamblador pueden ser más rápidos y consumir menos recursos del sistema (ej: memoria RAM) que el programa equivalente compilado desde un lenguaje de alto nivel. Al programar cuidadosamente en lenguaje ensamblador se pueden crear programas que se ejecutan más rápidamente y ocupan menos espacio que con lenguajes de alto nivel. Conforme han evolucionado tanto los procesadores como los compiladores de lenguajes de alto nivel, esta característica del lenguaje ensamblador se ha vuelto cada vez menos significativa. Es decir, un compilador moderno de lenguaje de alto nivel puede generar código casi tan eficiente como su equivalente en lenguaje ensamblador.1 Con el lenguaje ensamblador se tiene un control muy preciso de las tareas realizadas por un microprocesador por lo que se pueden crear segmentos de código difíciles y/o muy ineficientes de programar en un lenguaje de alto nivel, ya que, entre otras cosas, en el lenguaje ensamblador se dispone de instrucciones del CPU que generalmente no están disponibles en los lenguajes de alto nivel.
  • 36. Programa ensamblador Artículo principal: Ensamblador Generalmente, un programa ensamblador (assembler en inglés) moderno crea código objeto traduciendo instrucciones mnemónicas de lenguaje ensamblador en opcodes, y resolviendo los nombres simbólicos para las localizaciones de memoria y otras entidades.2 El uso de referencias simbólicas es una característica clave del lenguaje ensamblador, evitando tediosos cálculos y actualizaciones manuales de las direcciones después de cada modificación del programa. La mayoría de los ensambladores también incluyen facilidades de macros para realizar sustitución textual - ej. generar cortas secuencias de instrucciones como expansión en línea en vez de llamar a subrutinas.
  • 37. Los ensambladores son generalmente más simples de escribir que los compiladores para los lenguajes de alto nivel, y han estado disponibles desde los años 1950. Los ensambladores modernos, especialmente para las arquitecturas basadas en RISC, tales como MIPS, Sun SPARC, y HP PA-RISC, así como también para el x86 (-64), optimizan la planificación de instrucciones para explotar la segmentación del CPU eficientemente. En los compiladores para lenguajes de alto nivel, son el último paso antes de generar el código ejecutable.
  • 38. Número de pasos Hay dos tipos de ensambladores basados en cuántos pasos a través de la fuente son necesarios para producir el programa ejecutable. Los ensambladores de un solo paso pasan a través del código fuente una vez y asumen que todos los símbolos serán definidos antes de cualquier instrucción que los refiera. Los ensambladores de dos pasos crean una tabla con todos los símbolos y sus valores en el primer paso, después usan la tabla en un segundo paso para generar código. El ensamblador debe por lo menos poder determinar la longitud de cada instrucción en el primer paso para que puedan ser calculadas las direcciones de los símbolos.
  • 39. La ventaja de un ensamblador de un solo paso es la velocidad, que no es tan importante como lo fue en un momento, dados los avances en velocidad y capacidades del computador. La ventaja del ensamblador de dos pasos es que los símbolos pueden ser definidos dondequiera en el código fuente del programa. Esto permite a los programas ser definidos de maneras más lógicas y más significativas, haciendo los programas de ensamblador de dos pasos más fáciles de leer y mantener.3
  • 40. Ensambladores de alto nivel Los más sofisticados ensambladores de alto nivel proporcionan abstracciones del lenguaje tales como: ● Estructuras de control avanzadas ● Declaraciones e invocaciones de procedimientos/funciones de alto nivel ● Tipos de datos abstractos de alto nivel, incluyendo las estructuras/records, uniones, clases, y conjuntos ● Procesamiento de macros sofisticado (aunque está disponible en los ensambladores ordinarios desde finales de los años 1960 para el IBM S/360, entre otras máquinas) ● Características de programación orientada a objetos.
  • 41. lenguajes ensambladores normalización IEEE694 ● Los lenguajes máquina y ensamblador (también denominados lenguajes de bajo nivel) están totalmente ligados a la estructura del computador. En primer lugar se describen los modos de direccionamiento básico, que indican las formas en las que el procesador capta los operandos o almacena los resultados. Después se dan unas ideas sobre los apartados o campos que suele contener una instrucción máquina (formatos). Posteriormente se hace la descripción a nivel de lenguaje máquina y ensamblador de un Computador Didáctico Elemental (que denominamos CODE-2), y que será diseñado en su totalidad en el Capítulo 9. ● Aunque los lenguajes ensambladores son distintos de un computador a otro, la mayor parte de ellos sigue una misma filosofía, por lo que es de una gran utilidad utilizar una terminología común; esto es lo que pretende el estándar IEEE 694, que resumimos en una de las últimas secciones del presente capítulo. Consideramos de mayor interés describir esta normalización que analizar el lenguaje ensamblador de un procesador comercial concreto
  • 42. Aunque los lenguajes ensambladores son distintos de un computador a otro, la mayor parte de ellos sigue una misma filosofía, por lo que es de una gran utilidad utilizar una terminología común; esto es lo que pretende el estándar IEEE 694, que resumimos en una de las últimas secciones del presente capítulo. Consideramos de mayor interés describir esta normalización que analizar el lenguaje ensamblador de un procesador comercial concreto Las arquitecturas de computadores varían mucho en cuanto al número de modos de direccionamiento que ofrecen desde el hardware. Eliminar los modos de direccionamiento más complejos podría presentar una serie de beneficios, aunque podría requerir de instrucciones adicionales, e incluso de otro registro. Se ha comprobado que el diseño de las CPU segmentadas es mucho más fácil si los únicos modos de direccionamiento que proporcionan son simples.
  • 43. Direccionamientos y operandos En informática, los modos de direccionamiento son las diferentes maneras de especificar un operando dentro de una instrucción en lenguaje ensamblador. Un modo de direccionamiento especifica la forma de calcular la dirección de memoria efectiva de un operando mediante el uso de la información contenida en registros y/o constantes, contenida dentro de una instrucción de la máquina o en otra parte.
  • 44. Formato de las Instrucciones El formato de las instrucciones es un conjunto de especificaciones que indican cómo debe ser interpretado el patrón de bits de una instrucción de máquina para lograr su ejecución dentro del computador. Formato de instrucción: representación en binario de la misma. El formato de instrucción especifica el significado de cada uno de los bits que la constituyen. Longitud del formato de instrucción: número de bits que lo componen.
  • 45.
  • 46. CARACTERÍSTICAS DE LAS INSTRUCCIONES
  • 47. Tipos ➢ Transferencia de datos. ➢ Instrucciones aritméticas. ➢ Instrucciones de comparación. ➢ Instrucciones lógicas. ➢ Instrucciones de desplazamiento. ➢ Instrucciones de bits. ➢ Instrucciones de control. ➢ Instrucciones de entrada y salida.
  • 48. FORMATO La información contenida en el formato de la instrucción es: ➢ Código de operación (COP). ➢ Dirección de los operandos (OP1 y OP2). ➢ Dirección del resultado (RES). ➢ Dirección de la siguiente instrucción (casi siempre implícita). ➢ Tipos de representación de los operandos (casi siempre implícitos en el código de operación). ➢ Modificador (MD): suele completar al CO, y sirve para especificar ciertas particularidades de la instrucción: ➢ Tamaño y tipo de los operandos. ➢ A veces se usa para distinguir entre operaciones similares.
  • 49. Comparacion entre lenguaje de maquina y ensamblador El lenguaje máquina es el lenguaje de programación de bajo nivel. El lenguaje máquina solo se puede representar con 0 y 1. Anteriormente, cuando tenemos que crear una imagen o mostrar datos en la pantalla de la computadora, es muy difícil dibujar usando solo dígitos binarios (0 y 1). Por ejemplo: Para escribir 120 en el sistema informático su representación es 1111000. Entonces es muy difícil de aprender. Para superar este problema se inventa el lenguaje ensamblador. El lenguaje ensamblador es más que un lenguaje de bajo nivel y menos de un alto nivel, por lo que es un lenguaje intermedio. Los lenguajes ensambladores usan números, símbolos y abreviaturas en lugar de 0 y 1. Por ejemplo: para sumar, restar y multiplicar, usa símbolos como Add, sub y Mul, etc.
  • 50.