ejercicios informática
DESCRIPTION
Ejercicios de informática básicaTRANSCRIPT
INTRODUCCIÓN
Word/Palabra es un tamaño de referencia en la arquitectura de un computador. Es común
que los registros tengan el mismo tamaño que una palabra, y que los valores cargados en
dichos registros tengan ese mismo tamaño o múltiplos del mismo. De la misma manera, la
longitud de las instrucciones suele tener un tamaño igual o múltiplo del tamaño de palabra.
Ejemplos: 2 Bytes (16 bits), 4 Bytes (32 bits)…
Algunos registros son utilizados para almacenar operandos, antes de ser utilizados por la
ALU o bien para almacenar el resultado que produce la misma tras una operación.
Por ello tiene sentido que dichos registros tengan tamaño de palabra y que los datos
manipulados tengan un tamaño de palabra o múltiplo del de palabra. De ese modo, si han de
procesarse datos de gran longitud de forma secuencial, se hará palabra a palabra.
INTRODUCCIÓN
Las instrucciones de un procesador, a nivel binario, suelen tener una configuración como la
de los siguientes ejemplos:
• Código de operación (tamaño de x bits), Operando Destino (y bits), 1º Operando
Fuente (z bits), 2º Operando Fuente (v bits) Ej: Suma: add Opdst, OPfnt1, OPfnt2
• Código de operación (x bits), Operando Destino (y bits) Ej: Salto a la dirección de
una instrucción: jmp OPdst1
Dichos operandos pueden ser constantes numéricas, nombres de registros que contienen
valores*…
¿Qué son dichos *valores? Pueden ser simples valores numéricos, tratarse de direcciones de
memoria…
Existen instrucciones aritmético-lógicas, de salto (saltar a otra instrucción cualquiera del
programa que no tiene por qué ser la siguiente), de transferencia de memoria a registros o de
registros a memoria…
COMPUTER ARCHITECTURE
Es una especificación que define el diseño conceptual y la estructura operacional de una
computadora
Categorías/niveles de estudio:
• ISA (Instruction Set Architecture) es el modelo abstracto que define tanto el
conjunto de instrucciones que el procesador puede ejecutar, el tamaño de palabra,
tipos de registros, modos de direccionamiento de memoria y formatos de datos
utilizados
• Microarchitecture / microarquitectura, referente a la organización de la
computadora, la forma en que los datos se transmiten entre los componentes, cómo
son procesados y almacenados
• System design / diseño de sistema, relacionado con todo el hardware, al margen de
la CPU, y aspectos del mismo necesarios para definir la computadora
VON NEUMANN ARCHITECTURE
VON NEUMANN ARCHITECTURE
Central Processing Unit
Memoria
Mecanismos de entrada/salida
CENTRAL PROCESSING UNIT
Processing Unit
ALU
Registros del procesador… (propósito general…)
Control Unit
Registro de instrucción (IR) (guarda la instrucción actual),
Registro contador de programa (PC) (guarda la «posición» actual del programa, la
dirección de memoria en la que se encuentra la instrucción actual)
Controlador y decodificador
Secuenciador, reloj…
Buses (término genérico para referirse a sistemas de transferencia de datos entre partes del
computador o, en otros contexto, entre computadores distintos)
Introducción de nuevos conceptos
Programa almacenados frente a programas fijos
Originalmente: Diseños estructurales fijos, más adecuado que utilizar el término programa,
tal y como lo entendemos hoy. Modificar la estructura, el cableado o cualquier aspecto del
diseño para modificar las tareas realizadas por la máquina era costoso
Los programas, almacenados en una máquina que no es alterada, consisten en conjuntos de
instrucciones que llevan a cabo tareas complejas y que pueden ser rediseñadas de forma
flexible
Las instrucciones y los datos del programa se almacenan en una memoria
El hecho de tratar las instrucciones como datos permitiría, a la postre, la creación de
programas capaces de generar otros programas, como los compiladores
ALGUNOS CONCEPTOS DE MICROARQUITECURA
Procesado general de un programa, extendiendo lo visto hasta ahora:
• Ir a buscar una nueva instrucción («Fetch», ver 1.2-II)
• Decodificar instrucción
• Buscar operandos
• Ejecutar instrucción
• Escribir resultado (en memoria, en registros…)
ALGUNOS CONCEPTOS DE MICROARQUITECURA
Pipelining / Segmentación:
• Los primeros procesadores no permitían que una instrucción comenzase a ser
procesada mientras la anterior tuviera trabajo pendiente
• La segmentación de una instrucción en las etapas descritas anteriormente permite
que, por ejemplo, mientras una instrucción está siendo decodificada, ya se esté
realizando el «fetch» de la siguiente (Nota: No obstante, han de vigilarse la
coherencia y la dependencia entre las instrucciones ya que el comportamiento
«ideal»/óptimo de la segmentación (una instrucción distinta realizando cada etapa) no
siempre es posible.
PIPELINING (ESQUEMA GENERAL IDEAL)
ANTECEDENTES
Ábaco
Leonardo Da Vinci pone sobre el papel su idea para una sumadora mecánica
Blaise Pascal diseña y construye la primera calculadora mecánica en 1642 basada en un
sistema de engranajes
Gottfried Wilhelm Leibniz perfecciona en 1670 la máquina de Pascal y crea otra capaz de
multiplicar
Joseph Marie Jacquard diseña un telar automático, utilizando placas perforadas que
controlan los diseños tejidos
Charles Babbage crea la máquina diferencial en 1823 y diseña la máquina analítica
Augusta Ada Byron esboza los primeros algoritmos ideados expresamente para ser
ejecutados por una máquina en 1842, a partir del trabajo de Babbage
Herman Hollerith aplica el uso de tarjetas perforadas para compilar la información
estadística del censo de los Estados Unidos en 1890
Alan Turing se convierte, debido a su trabajo, en el padre de las ciencias de la computación
modernas y de la inteligencia artificial
PRIMEROS COMPUTADORES
Los primeros modelos del siglo XX no eran electrónicos
Colossus, el primer computador digital completamente electrónico, mediante el uso de
válvulas de vacío, es operativo al final de 1943. Turing y su equipo lo utilizan para
decodificar transmisiones alemanas
ENIAC (Electronic Numerical Integrator And Computer) se convierte en 1945 en el primer
computador de propósito general, aunque no incorporaba el concepto de programa
almacenado. Su reprogramación para adaptarse a un nuevo “problema” a resolver podía
llevar días o semanas
Posteriormente, en un sucesor del ENIAC, tomando la arquitectura Von Neumann como
referencia, se incorpora, entre otras mejoras, la utilización de programas almacenados
En la década de 1950, la incorporación de los transistores a los computadores permite la
creación de componentes más rápidos, pequeños y de menor consumo
En los años 60 aparece el circuito integrado , capaz de integrar varios transistores en una
placa semiconductora con interconexiones soldadas. Como consecuencia, se reducen los
tamaños, costes de producción y mejora la fiabilidad
En la década siguiente, llegan los circuitos integrados de gran escala y los
microprocesadores
GENERACIONES DE COMPUTADOREGENERACIONES DE COMPUTADORES
Primera generación
• Utilización de válvulas de vacío
• De gran tamaño, lentas y poco eficientes
• Usaban tarjetas perforadas
• No eran comercializados
Segunda generación
• Uso de transistores
• Más rápidos y de menor tamaño que los anteriores
• Se utilizan lenguajes de un nivel más alto para programarlos
Tercera generación
• Utilización de circuitos integrados
• Flexibles y más pequeños
• Adecuados para aplicaciones comerciales
• Conocidos como mini computadores
Cuarta generación
• Uso de circuitos integrados a muy gran escala
• Máquinas interactivas de propósito general
• Permiten el desarrollo rápido de aplicaciones
• Mayor facilidad de uso para el usuario y para ser integrado en redes
Quinta generación
• ¿?
GENERACIONES DE COMPUTADOREINTERACCIÓN CON EL USUARIO
Desde mediados de los 40 hasta finales de los 60 (Batch interface/Interfaz por «lotes»)
• Entrada mediante tarjetas perforadas o cinta de papel
• Salida mediante impresora
• Poca o nula interacción en tiempo real
Desde finales de los sesenta hasta el presente (Command Line Interface)
• La entrada se realiza mediante la introducción de órdenes más manejables
• Requieren una labor de aprendizaje considerable
• La incorporación del monitor como dispositivo de salida facilita la interacción
Text Based User Interface (años 80)
• Estandarización de interfaz con mayor complejidad visual, pero basada en texto
• Atajos de teclado, combinaciones de teclas estandarizadas…
Graphic User Interface
• 1968 : Douglas Englebart (Stanford) realiza una demostración de un sistema que
utiliza los antecesores de los actuales ratón, cursores, hipertexto y ventanas múltiples
• A principios de los 70 Xerox continua y amplia dichas investigaciones
• A finales de los 70, Apple comienza a desarrollar su propio sistema basándose en lo
anterior
• Macintosh populariza el ratón, cosa que los intentos anteriores de Xerox y Apple no
habían conseguido
• Microsoft populariza el uso masivo del interfaz de ventanas
• …
Abstracción: Separación por medio de una operación intelectual de las cualidades de un
objeto para considerarlas aisladamente o para considerar el mismo objeto en su pura esencia
o noción
¿Cómo? Aislando el elemento de su contexto o del resto de elementos que lo acompañan,
ocultando ciertos detalles internos de implementación
• Ejemplo: «Caja negra»
• El programa o usuario exterior que utiliza la caja no necesita conocer los detalles
internos para poder interactuar con ella
Ingrediente #1,Ingrediente #2,…Ingrediente #n
Producto finalPreparaciónde receta X
NIVELES DE ABSTRACCIÓN EN ARQUITECTURA DE COMPUTADORES
Hardware (ver 1.2-I)
Firmware: Tipo de software que es almacenado y ejecutado en un dispositivo conectado al
sistema, para comunicarse con el mismo. Ejemplo: Cualquier periférico provisto de un
hardware interno, con algún medio de almacenamiento, como una ROM, donde residen
datos y código propio
Ensamblador: Lenguaje de bajo nivel en el que hay una correspondencia muy alta entre
sus instrucciones y las del procesador
Sistema operativo (ver 1.2-II)
Procesos, programas que están siendo ejecutados, desde aplicaciones de usuario hasta
servicios del sistema operativo
ABSTRACCIÓN PROPORCIONADA POR EL SISTEMA OPERATIVO
El sistema operativo proporciona a los programas de usuario un modelo más sencillo del
computador y se encarga de la administración de todos los recursos
Además, la interacción con el propio usuario no es directa, sino que se hace uso de
«intermediaros», como el GUI o el Shell
MODOS DE EJECUCIÓN DEL SISTEMA OPERATIVO
Para limitar el acceso de los programas a determinadas acciones, el S.O. distingue dos
modos de ejecución para los mismos:
• Modo Kernel (superusuario / administrador): acceso completo al hardware y
set/juego de instrucciones.
• Modo Usuario: Se limitan algunas operaciones para evitar problemas de seguridad.
¿Kernel? Es la parte nuclear del S.O., capaz de coordinar el acceso/comunicación de los
programas con el hardware, reduciendo o eliminando la complejidad desde el punto de vista
de dichos programas, así como gestionar los recursos disponibles en el sistema.
Las solicitudes que los programas/procesos realizan al kernel para que lleve a cabo ciertas
tareas especiales o restringidas (comunicación con hardware, creación de procesos
nuevos…) se denominan llamadas al sistema (system calls)
LLAMADAS AL SISTEMA
Un proceso de usuario necesita un servicio del S.O. : Se realiza una llamada al sistema y el
S.O. pasa a tener el control, realizando lo siguiente:
• Determina qué quiere el proceso que ha invocado la llamada, examinando los
parámetros
• Ejecuta la llamada al sistema
• Devuelve el control al proceso que ha realizado la llamada al sistema
Funciones de las llamadas al sistema
• Controlar procesos (programas)
• Lanzar o forzar la terminación de programas
• Gestionar ficheros
• Abrir, leer, escribir y cerrar archivos.
• Controlar el sistema de ficheros y directorios
• Crear y eliminar directorios, crear links (accesos directos)…
• ...
FUNCIONES DEL SISTEMA OPERATIVO EN CUANTO A ABSTRACCIÓN
Trabajar como máquina extendida (Hardware + S.O.)
Ocultar el hardware y presentar a los programas (y a sus programadores)
abstracciones agradables, elegantes, simples y consistentes con las que puedan
trabajar
Administración de recursos
El trabajo del sistema operativo es proporcionar una asignación ordenada y
controlada de los recursos hardware entre los diversos programas que compiten por
estos recursos
Conclusión: lo que se desea es una abstracción simple de alto nivel que se encargue
de tratar con el disco
FUNCIONES DEL SISTEMA OPERATIVO EN CUANTO A ABSTRACCIÓN
Administración de recursos
• Ejemplos de situaciones en las que resulta necesario:
o Varios programas se ejecutan al mismo tiempo (comparten la memoria, el
procesador...)
o Varios programas quieren utilizar la red al mismo tiempo (pestañas del
browser, gestor de correo...)
o Ordenar imprimir un documento desde programas distintos
o Abrir un documento y tratar de borrarlo mientras está abierto
FUNCIONES DEL SISTEMA OPERATIVO EN CUANTO A ABSTRACCIÓN
Administración de recursos
¿Multiplexación? Es un término genérico aplicado a circuitos, comunicaciones,
gestión de recursos. La multiplexación consiste en la compartición mediante
selección entre los aspirantes a utilizar un medio o recurso dado. Un multiplexor es
un circuito combinacional (integrado por puertas/componentes lógicos) que
selecciona entre varias posibles entradas una única que será transmitida como salida
• La administración de recursos incluye la multiplexación (como concepto) de recursos
de formas distintas:
o En el tiempo : los distintos programas que desean utilizar el mismo recurso se
turnan para utilizarlo
o En el espacio : En lugar de turnarse cada solicitante de recurso «obtiene» una
parte del mismo
o …
FUNCIONES DEL SISTEMA OPERATIVO EN CUANTO A ABSTRACCIÓN
Administración de recursos
• Ejemplos de compartición de recursos en el tiempo
o Varios programas intentan llevar a cabo su ejecución en la CPU. El sistema
operativo asigna en primer lugar la CPU a un programa y, una vez que ha
podido ejecutar instrucciones durante un tiempo suficiente, otro programa
obtiene acceso a la CPU, después otro, y en un momento dado el primer
programa vuelve a obtener acceso al recurso. La tarea de determinar cómo se
comparte el recurso en el tiempo (qué proceso tiene derecho a utilizar el
procesador y durante cuánto tiempo) es responsabilidad del sistema operativo.
o Otro ejemplo de compartición en el tiempo es el uso de una impresora. Cuando
hay varios trabajos en una cola (lista de espera) de impresión de una sola
impresora, se debe tomar una decisión en cuanto a qué trabajo debe imprimirse
a continuación (una cola de impresión).
FUNCIONES DEL SISTEMA OPERATIVO EN CUANTO A ABSTRACCIÓN
Administración de recursos
• Ejemplos de compartición de recursos en espacio
o Asignación de memoria a programas. Varios programas se están ejecutando al
“mismo tiempo” (hemos visto que realmente se turnan para trabajar/esperar).
Lo mas eficiente es que compartan la memoria (un solo programa no necesita
toda la memoria) de forma simultánea. El S.O. asigna un espacio de memoria a
cada programa en ejecución.
o Otro ejemplo de compartición en espacio es el uso de una unidad de disco
duro. Un mismo disco duro puede almacenar archivos de diferentes usuarios al
mismo tiempo. Se asignan espacios de disco y se gestiona un registro con las
regiones utilizadas por cada archivo. Dicha tarea es llevada a cabo por el S.O.
o Otra tarea del S.O. es la gestión de la memoria SWAP o memoria de
intercambio. Si se ejecutan tantos programas que la memoria esta llena y no
caben más, el S.O. puede decidir quitar algunos programas de la memoria y
almacenarlos de forma temporal en el disco duro hasta que vuelvan a ser
necesarios en memoria (entonces realiza la tarea inversa). El S.O. es el
encargado de decidir cuándo y cómo realizar esta tarea.
NIVELES DE ABSTRACCIÓN EN EL ÁMBITO DE LA PROGRAMACIÓN
Dado un nivel de abstracción cualquiera en el que se encuentre el usuario/programa, obviar
el contenido «oculto» por dicha abstracción facilita la comprensión y la utilización.
Ejemplos:
• En un GUI, al arrastrar un archivo de una carpeta a otra, no nos planteamos que
realmente se están llevando a cabo comandos de movimiento de archivos desde una
ruta a otra
• Al introducir un comando de borrado desde el shell, obviamos que internamente se ha
de gestionar el espacio del disco duro ocupado por dicho archivo o utilizar las
llamadas al sistema pertinentes
• Una orden en un lenguaje de programación de alto nivel que imprime una cadena de
texto en pantalla está realizando, internamente, muchas operaciones de
movimiento/manipulación de datos desde una región de memoria hasta que
finalmente se muestra en el monitor
• …
Código Máquina
Ensamblador
Ej: Lenguajes
Imperativos
Ej: Lenguajes
Orientados a
Objetos
Nivel de
abstracción
Máquina
Humano
Abstracción de las particularidades de la máquina y de
su lenguaje
Acercamiento a los lenguajes naturales utilizados por el
ser humano.
Proceso complejo que se desarrolla desde hace mas de
50 años
Código Máquina
Ensamblador
Ej: Lenguajes
Imperativos
Ej: Lenguajes
Orientados a
Objetos
Normalmente el programador se encuentra en la
situación de querer codificar un programa en alto nivel
(no siempre)
El computador sólo es capaz de ejecutar instrucciones en
código máquina
¿Solución? Compiladores
Nivel de
abstracción
Máquina
Humano
COMPILADOR
Es un programa capaz de traducir un programa escrito en un lenguaje de programación
determinado a otro lenguaje de programación distinto
Lo habitual es traducir desde lenguajes de alto nivel a lenguajes de bajo nivel
Es un proceso complejo
0000 1001 1111 0101 1000 0000 1001 1100 0110 1010 1111 0101 1000 1100 0110 1010 1111 0101 1000 0000 1001
1100 0110 1010
loop: beq R0, R1, end
add R0, R0, R2
b loop
end: sw R3, 100000
CompiladorCódigo
FuenteEjecutable
Escrito en un
lenguaje de
programación
concreto
Preparado para
funcionar en un
sistema concreto
Hay muchos compiladores
diferentes, en función del
lenguaje fuente y del
sistema de destino
FASES DE COMPILACIÓN
Análisis léxico
Preprocesado
Análisis sintáctico
Análisis semántico
Generación de código
Optimización de código
FASES DE COMPILACIÓN
Análisis léxico
Se analiza el código y se reconocen secuencias de texto como, por ejemplo, nombres
de variables, operadores aritméticos, llaves, corchetes, etc., asociándoles un
significado concreto
FASES DE COMPILACIÓN
Preprocesado
• Como su nombre indica, consiste en procesar preliminarmente el código,
transformándolo mediante acciones como sustituir identificadores/expresiones por
funciones o secciones de código completas, si se considera que el resultado será más
sencillo o eficiente
• Ejemplo: Macros en lenguaje C:
o Definida la siguiente macro: #define MAXVALUE 100
o En otra sección del código: int randomValue = 20 + MAXVALUE;
o Tras preprocesado: int randomValue = 20 + 100;
FASES DE COMPILACIÓN
Análisis sintáctico
El código es analizado desde un punto de vista «gramatical», ya que el lenguaje tiene
unas reglas concretas sintácticas
Ejemplo: Sección de código extraída de un programa en C.
if ( myValue > 0 ) {
printf( "Es positivo." );
}
else {
printf( "Es negativo." );
}
Es sintácticamente correcto en C. Sin embargo, si, por ejemplo, fueran eliminadaslas comillas de alguna de las llamadas a printf, se detectaría un error sintáctico
al no encontrarse un final de cadena de texto.
FASES DE COMPILACIÓN
Análisis semántico
En esta fase se analiza el significado, la información semántica del código, en cuanto
a aspectos tales como la correcta utilización de los diferentes tipos de datos
Ejemplo de error semántico en C++: Asignar un valor booleano a una variable entera
int myVariable = false;
FASES DE COMPILACIÓN
Generación de código
Tras las etapas anteriores se dispone de código intermedio generado por el
compilador, pero es necesario generar código ensamblador, enlazarlo con librerías y
elementos necesarios relacionados, hasta generar código máquina ejecutable por el
procesador
FASES DE COMPILACIÓN
Optimización
La optimización es susceptible de ser realizada en diferentes fases de todo el proceso
descrito
Ejemplos:
Reordenación de instrucciones en el código fuente para ganar eficiencia
Calcular valores constantes. Ejemplo:int randomValue = 20 + 10;
Transformar en int randomValue = 30;
Inspección de código máquina y eliminar redundancias
…
INSTRUCTION SET ARCHITECTURE
ISA (Instruction Set Architecture) es el modelo abstracto que define tanto el conjunto de
instrucciones que el procesador puede ejecutar, el tamaño de palabra, tipos de registros,
modos de direccionamiento de memoria y formatos de datos utilizados
INSTRUCTION SET
Conjunto de Instrucciones que el procesador es capaz de ejecutar
Cada instrucción (o grupo de instrucciones) tiene su propia sintaxis y reglas
Para cada instrucción se ha de especificar qué operación lleva a cabo, el tipo de parámetros
necesarios, cómo son utilizados y cuáles son los efectos colaterales de dicha instrucción,
como la modificación de registros específicos…
CLASIFICACIÓN DE DISEÑO DE CPU SEGÚN SU JUEGO DE INSTRUCCIONES
Tradicionalmente:
CISC (Complex instruction set computing)
Ejecuciones complejas y versátiles (Ej: Leer de memoria, realizar una
operación y escribir en memoria en una sola instrucción)
RISC (Reduced instruction set computing)
Conjunto reducido de instrucciones más simples y optimizadas
Con la evolución en el tiempo de las diferentes arquitecturas, la distinción basada en esos
términos no es tan útil para llevar a cabo una clasificación, y términos como la distinción
entre aproximaciones load/store* vs non load/store cobran más sentido
*Arquitecturas en las que sólo está permitida la recuperación de datos desde memoria y
escritura de la misma mediante operaciones específicas LOAD y STORE, en lugar de lo que
ocurre con otras, como la 8086 en las que una operación como ADD (suma) ofrece la
posibilidad de escribir su resultado en memoria directamente
REGISTROS
Elementos de almacenamiento del procesador, de acceso más rápido que la memoria
Guardan los datos para poder operar con ellos
Algunos son de propósito general, de modo que el programador puede usarlos con cierta
libertad a la hora de especificar instrucciones
Otros son de propósito especifico (direcciones de memoria, ciertas instrucciones especiales,
flags...)
FLAGS
Una serie de flags (marcadores, “banderas”) ayudan a comprender qué ha ocurrido como
consecuencia de ejecutar una instrucción.
Por ejemplo, indican si el resultado ha sido cero o el resultado de una comparación ( Ej: En
el 8086, el llamado Zero flag toma valor «1»)
EJEMPLO: 8086
Origen de la gama de procesadores más exitosa de Intel
Algunos datos
Registros de propósito general: AX, BX, CX, DX
Registros especiales, como uno de estado, dedicado a almacenar flags, como Zero
flag, Carry flag, Overflow flag…
MODOS DE DIRECCIONAMIENTO
Los modos de direccionamiento son las formas en que los operandos de cada instrucción del
juego / set pueden ser identificados
Un modo de direccionamiento especifica cómo calcular la dirección efectiva de un
operando en base a registros, constantes…
MODOS DE DIRECCIONAMIENTO
Algunos modos de direccionamiento del procesador 8086
Inmediato
Ej: MOV AX, 16: La constante con valor 16 se almacenará en el registro AX
Registro
Ej: MOV AX, BX. El contenido de BX se copia en AX
Directo
Ej: MOV AX, [300h]. El uso de [ ] indica que aquello que se va a copiar no es 300h
(h – hexa), sino que lo que se copiará es un dato que está almacenado a partir de la
dirección 300h. Así pues, la dirección de inicio del dato es conocida ¿Y el tamaño de
lo que hay que copiar? Viene dado por la capacidad del registro destino. En este
ejemplo, AX es de 2 Bytes
Indirecto
Ej: MOV AX, [BX]. Se copia en AX un dato cuya dirección de inicio está en BX
Base + Desplazamiento
Ej: MOV AX, [BX + 8]. BX sumado al valor marcan la dirección de inicio del dato a
copiar a AX.
Más modos: Implícito, base + índice + desplazamiento…
MOVIMIENTO
MOV : Permite copiar datos
Desde memoria a un registro
Desde registro a memoria
Entre registros
Copiar valores constantes a registros o a memoria
Es una operación muy versátil
Es una operación capaz de modificar directamente la memoria
MOV opDst, opSrc
ADICIÓN
ADD opDst, opSrc
Suma los dos operandos *
El resultado se almacena en el operando destino
* No interpretar de forma literal necesariamente, ya que se deben tener en cuenta los modos
de direccionamiento
SUSTRACCIÓN
SUB opDst, opSrc
Resta el operando fuente del destino ( destino = destino – fuente ) *
El resultado se almacena en el operando destino
* No interpretar de forma literal necesariamente, ya que se deben tener en cuenta los modos
de direccionamiento
COMPARACIÓN
CMP opDst, opSrc
Resta el operando fuente del destino pero el resultado no es devuelto
Los operandos permanecen inalterados pero los flags se actualizan, pudiéndose consultar a
continuación mediante instrucciones de bifurcación condicional
Si los valores comparados son iguales el flag zero toma el valor 1. De lo contrario, el valor
es 0
* No interpretar de forma literal necesariamente, ya que se deben tener en cuenta los modos
de direccionamiento
AND / «Y» LÓGICO
AND opDst, opSrc
Se almacena en el destino el resultado de hacer operación «y» con cada bit de los operandos
OR / «O» LÓGICO
OR opDst, opSrc
Se almacena en el destino el resultado de hacer operación «o» con cada bit de los operandos
XOR / «O EXCLUSIVO» LÓGICO
XOR opDst, opSrc
Se almacena en el destino el resultado de hacer operación «o lógico» con cada bit de los
operandos
La operación XOR es sólo «1» cuando los valores comparados son distintos
NOT / «NO» LÓGICO
NOT opDst
Se almacena en el destino el resultado de invertir cada bit de dicho operando, es decir, el
complemento a uno
SALTO INCONDICIONAL
JMP opDst
Transfiere el control incondicionalmente al operando, que puede ser una dirección o una
etiqueta
SALTO CONDICIONAL
JZ opDst
Se transfiere el control al operando si el flag zero es 1
JNZ opDst
Se transfiere el control al operando si el flag zero es 0
INCREMENTO Y DECREMENTO
INC opDst
Suma una unidad al operando destino
DEC opDst
Resta una unidad del operando destino
Flags como el Flag zero se ven afectados por el resultado
EJEMPLO DE SIMULADOR ONLINE
http://schweigi.github.io/assembler-simulator/
Se trata de un simulador restringido y reducido tomando como base las arquitecturas x86
CPU de 8 bits y 256 Bytes de memoria
El espacio de memoria desde 0xE8 hasta 0xFF está destinado a mapear un dispositivo
simulado de salida similar a una consola
Documentación
http://schweigi.github.io/assembler-simulator/instruction-set.html