miércoles, 25 de enero de 2017

Planteamiento de Problema

Planteamiento de problema.


Nuestro grupo está asesorando a una tienda de retail, la cual tiene una página web en donde sus clintes pueden realizar compras online de todos los productos exhibidos en dicha página, el problema es que cuando una persona realiza la compra, se demora un día o más en actualizar el stock en la página por ende a veces es posible comprar productos de manera en línea sin que hubiera stock.


Código en Assembler


msg 'desea comprar'
msg '1.- si'
msg '2.- no'
ldt
cmp 80
jeq 60
msg 'adios, gracias por comprar'
hlt


#60
msg 'cuantos productos comprara'
ldt
cmp 90
msg 'puede comprar'
eap
hlt


#80
1 ; Asignamos el valor de 1 a memoria 80
10; Asignamos el valor de 1 a memoria 81
0

#90

11 ;suponemos que hay 3 productos en stock


Lo que realiza este código es preguntar si desea comprar o no, si compra y elige cuantos productos va a comprar, si compra mas de 3 le saldra un mensaje por pantalla diciendo que es solo 3 el stock de productos.


Mismo código en assembler pero en Pila

msg 'desea comprar'
msg '1.- si'
msg '2.- no'
ldt
push ax
pop ax
mov 1,ax
cmp 80
jeq 60
msg 'adios, gracias por comprar'
hlt


#60
msg 'cuantos productos comprara'
ldt
push ax
pop ax
cmp 90
msg 'puede comprar'
eap
hlt


#80
1 ; Asignamos el valor de 1 a memoria 80
10; Asignamos el valor de 1 a memoria 81
0

#90

11 ;suponemos que hay 3 productos en stock


Este código hace lo mismo que el código anterior pero este lo realiza con Pila.

domingo, 22 de enero de 2017

Preguntas prueba departamental 1

3.- Utilizando una instrucción en el lenguaje de máquina (assembler), explique los pasos que sigue la CPU para ejecutar una instrucción.


1.- Se lee en PC la próxima dirección a ejecutar: 000. (La dirección cambia a medida que se ingresan los datos)
2.- Envió al MAR la próxima dirección de memoria a leer.
3.- Llevo al MDR el contenido de dicha dirección de memoria.
4.- Le entrego al IR el dato para que lo decodifique e incremento el PC.
5.- Escribo en pantalla un mensaje.

Registros apuntadores:

-   PC ó IP: Program Counter o Instruction Pointer, Contiene la dirección de memoria de la próxima instrucción a ejecutar y es incrementado en cada nueva instrucción.

-   MAR: Memory Address Register. (Registro de Dirección de Memoria) es el registro en el que se almacena la dirección de memoria a la que se quiere acceder.

-   MDR: Memory Data Register o Memory Buffer Register, es un registro intermedio en el que se almacenan los datos que se escriben o leen de memoria.  En el caso de una lectura, se pone en el MAR la dirección y se activa la señal de leer, obteniendo en el MDR el dato buscado.  En el caso de una escritura, se pone en el MAR la dirección y en el MDR el dato a escribir en memoria, después de activa la señal de escribir, de esta forma almacenamos en memoria el dato.

-   IR: Instruction Register, en este registro se introduce la instrucción a ejecutar, después de haberla leído de memoria accediendo a ella mediante la dirección señalada en el PC; El contenido de este registro se puede dividir en código de operación (el código que señala la operación que se realizará) y operandos. Puede haber 2 operandos o sólo uno.  Acá es donde se decodifica e interpreta la instrucción así: se descompone la instrucción leída de forma que se pueda saber cual es la operación que se desea realizar y cuales son los operandos, en su caso, o el desplazamiento en caso de que se trate de una instrucción de bifurcación.

Registro de estado: Registro en el que se depositan las condiciones o resultados de una determinada operación realizada.Cada bit de este registro se utiliza para guardar información específica, los cuales se denominan banderas(flags). Son los siguientes:
-   C: Arrastre aritmético
-   Z: Indica si la operación realizada ha dado cero.
-   N: Indica el signo de la operación realizada, tabién conocido como S (sign).
  - O: Registro de overflow o desbordamimento. 





4.- Explique qué se entiende por familia de computadores y como se relaciona con el concepto de arquitectura del computador, identifique sus principales componentes.

Familia de computadores se entiende como un grupo de ordenadores que utilizan un mismo microprocesador o familia de microprocesadores y que suelen se compatibles entre sí, además de compartir su filosofía de diseño.
Las familias de computadores lo normal es que se puede utilizar el mismo software en todos ellos, variando únicamente en las diferentes prestaciones de cada uno de los equipos que lo componen; las familias más conocidas son la familia de computadores Apple (basados en la familia de procesadores 68000 de Motorola y la familia de computadores IBM PC basados en los procesadores X86 de Intel.

IBM introdujo el término arquitectura para describir este nivel de compatibilidad. Una nueva familia tenía una sola arquitectura pero muchas implementaciones diferentes, todas las cuales podían ejecutar el mismo programa, la única diferencia era el precio y la velocidad.

10.- Explique mediante un ejemplo el concepto de “ordenamiento de bytes”, inclya los conceptos ig endian y little endian.

Los bytes de una palabra pueden numerarse de izquierda a derecha o de derecha a izquierda. En la figura 1 se muestra parte de la memora de una computadora de 32 bit cuyos bytes se numeran de izquierda a derecha, como la SPARC o las grndes maniframes de IBM. En la figura 2 se aprecia la representación análoga de una computadora de 32 bit que usa numeración de derecha a izquierda, como la familia Intel. El primer sistema, en el que la numeración comienza por el extremo “grande” (de orden alto), se llama computadora big endian(figura 1), en contraste con la little edian(figura 2). Los termminos se usaron por primera vez aplicados a la arquitectura de computadoras en un delicioso artículo escrito por Cohen.

                                       Big endian                                                                        
                                                          
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
                                      
                                           Figura 1.


                                 
                                    Little endian

3
2
1
0
7
6
5
4
11
10
9
8
15
14
13
12

                                       Figura 2.


Es importante entender que tanto en los sistemas big endian como en los little endian, un entero de 32 bits con el valor numérico de, digamos 6, se representa con los bits 110 en los tres bits de la extrema derecha(orden bajo) de una palabra, con ceros en los 29 bits de la izquierda. En el esquema big endian, los bit 110 están en el byte 3 (o 7, u 11, etc), mientras que en el esquema de little endian están en el byte 0 (o 4,u 8, etc). En ambos casos, la palabra que contiene este entero tiene la dirección 0.

 19.-  Describa y explique el uso especifico el uso de las memorian RAM y ROM.


SRAM(Memoria de acceso aleatorio estática): Se contruye internamente empleando circuitos similares a nuestro FF-D básico. Estas memorias tienen la propiedad de que su contenido se conserva en tanto se sigue alimentndo el circuito: segundos, minutos, horas y hasta días. Las SRAM son muy rápids. Un tiempo de acceso típico es de unos cuantos nanosegundos. Por esta razón, las SRAM son polilares como memoria caché de nivel 2.
DRAM (Memoria de acceso aleatorio dinámica): Estas no usan flip-flop. En vez de ello, usan una matri de celdas, cada una de la cuales contiene un transistor y un diminuto condensador. Los condensadores pueden cagarse o descargarse, lo que permte almacenar ceros y unos. Puesto que la carga eléctrica tiende a fugarse, cada bit de una DRAM debe cargare de nuevo (proceso de refresco) cada pocos milisegundos para evitar que los datos se pierda. Es por eso que el proceso de refresco corre a cargo de la lógica extrema, las DRAM requieren interfaces más complejas que las esstáticas, aunque en muchas aplicaciones esta desventaja se compensa por su mayor capacidad.
Existn varios tipos de RAM dinámica, el más antiguo que continúa en uso es la DRAM FPM (modo de página rápida), esta RAM esta siendo reemplazada gradualmente por la DRAM EDO (salida de datos extendida), que permite reinicar una segunda referencia a la memoria antes de que la anterior se haya completado. Tantos las FPM como los EDO son asincrónicos, lo que significa que las líneas de dirección y de datos no están controladas por un mismo reloj. Por otra parte la SDRA (DRAM sincrónica) es un híbrido de RAM estática y dinámica y es controlado por un solo reloj sincrónico. Estas se usan a menudo en las cachés grandes y podría ser la tecnología preferia para las memorias principales en el futuro.

ROM(memoria sólo de lectura): No pueden modificarse ni borarse, intencionalmente o por accidente. Los datos de una ROM se intersentan durante su fabricación, básicamente exponiendo un material fotosensible a través de una máscara que contiene el patrón de bits descado y luego eliminando por grabado la superficie expuesta o la no expuesta. La única forma de modificar el programa de una ROM es cambiar todo el chip. Las ROM son mucho mas económicas que las RAM cuando se producen en grandes cantidades, pues así el costo de elaborar la máscara se diluye. Sin embargo, estas memorias son inflexibles, porque no pueden modificarse después de su fabricación y el tiempo que tarda en surtirse un pedido de ROM puede ser de semanas.
Para facilitar el desarrollo de los nuevos productos basados en ROM, se inventó la PROM(ROM programable), esta es parecia a la ROM, exepto que puede programarse una vez en el campo, lo que elimina el retraso por surtido. El otro aance en este campo fue la EPROM(PROM borrable), que no sólo puede programarse, sino también borrarse. Cuando la ventana de cuarzo de una EPROM se expone a una lu ultravioleta intensa durante 15 minutos, todos los bits se ponen en 1. Las EPROM son mucho mas economicas que las PROM porque pueden reutilizarse. También esta algo aun mejor, la EEPROM, que puede borrarse por aplicación de pulsaciones, sin tenr que colocarse en una cámara especial para exponerla a la luz ultravioleta. Una EEPROM puede reprogramarse instalada, mientras que una EPROM tiene que insertarse en un dispositivo especial par pogramar. Las EEPROM son mucho mas pequeñas y mas lentas, por lo que no pueden competir on las DRAM ni las SRAM, porque son 10 veces mas lentas, 100 veces más pequeñas y mucho mas costosas, sólo se utilizan en situaciones en las que su no volatilidad es crucial. Una EEPROM mas reciente es la memoria flash, estaa puede borrarse y reescribirse por bloque.


25.- Explique mediante ejemplos las operaciones del bus.

El bus sirve como enlace de comunicación compartido entre los subsistemas. Las dos ventajas principales de la organización de un bus son su bajo costo y su versatilidad. Al definir un sensillo esquema de interconexión, se puede añadir fácilmente nuevos dispositivos y los periféricos pueden incluso compartirse entre subsistemas de computadoras que utilicen un bus común. El costo sería bajo, ya que un simple conjunto de cables es una ruta o camino múltiple compartido por todos los que se conecten a este conjunto.
Los dos tipos de conexiones más comunes son: 
1- Todos los elementos comparten un bus común, como se muestra en la imagen, en este caso solamente dos subsistema pueden comunircarse entre sí.



2- En sistemas más complejos se puede tener dos o más buses, como muestra la figura, tenemos dos buses que son compartidos, uno usado para comunicar la CPU y la memoria y el otro para el procesador de E/S y un conjunto de dispositicos de E/S.


La serie de microprocesadores del 8080 al 80486 nos muestran un ejemplo de la estructura del bus para memoria y E/S, en la figura se muestra en forma esquemática y en la segunda imagen se presenta con el número de líneas requeridas por cada sección del bus.


Estructura de las secciones para memoria E/S en el bus principal.

Códigos en Assembler

OPERACIONES ARITMÉTICAS 

ldt introduzca un numero
sta 10
ldt introduzca otro numero
sta 20
mov ax,10
add 20
eap suma es:
mov ax,10
sub 20
eap resta es:
mov ax,10
mul 20
eap multiplicacion es:
mov ax,10
div 20
eap división es:
hlt

Lo que hace este código, es pedir 2 valores e internamente los suma, resta, multiplica y divide para luego mostrar cada resultado por pantalla. Ejemplo: introducir un numero: 6, introducir otro número: 3, suma:9 Resta:3 multiplicación:18  División: 2.


OPERACIONES ARITMÉTICAS CON MENÚ

MSG Presione uno para introducir valores
MSG Presione dos para salir
LDT
CMP 102
JMA 110
JEQ 112
CMP 101
JEQ 114
JME 0
HLT

#100
0
1
10
11
100
101
#110
MSG Numero no valido
JMP 0
MSG Adios
HLT
ldt introdusca un numero
sta 10
ldt introdusca otro numero
sta 20
MSG Elija una operacioin
MSG Presione uno para sumar
MSG Presione dos para restar
MSG Presione tres para multiplicar
MSG Presione cuatro para dividir
MSG Presione cinco para volver al menu principal
LDT
CMP 105
JMA 110
JEQ 200
CMP 101
JEQ 201
CMP 102
JEQ 205
CMP 103
JEQ 209
CMP 104
JEQ 20D

#200
JMP 0
mov ax,10
add 20
eap suma es:
JMP 118
mov ax,10
sub 20
eap resta es:
JMP 118
mov ax,10
mul 20
eap multipli es:
JMP 118
mov ax,10
div 20
eap divi es:
hlt 

Lo que hace este código, es tener un menú con las operaciones aritméticas(suma, resta, multiplicación, división) si uno ingresa dos valores numericos, el programa le preguntara que operación desea realizar y este internamente lo hará y mostrará el resultado por pantalla.



PROMEDIO DE X NUMEROS.

mov 200,201
msg "cuantos numeros ingresara?"
ldt          ;carga en ax el denominador
mov cx,ax ;mueve el denominador a Cx
mov 100,cx ; el denomidanor es almacenado en direccion 100
msg "ingrese el numero"
ldt  ;almacena en AX el numerador
add 200 ;suma el numerador al anterior numerador
sta 200  ;guarda en la pocision de memoria la adicion
loop 005  ;repite tantas veces como unidades tenga el denominador
mov ax,200  ;lo almacenado en 200 lo mueve a AX
div 100 ;divide por el denominador
eap "el promedio de sus numeros es"

hlt


Este código lo que hace es sacar el promedio de los valores que uno necesite. ejemplo si quiero calcular el promedio de 4 valores, el programa me pedira cuales son esos 4 valores, 3 2 6 5 y por pantalla me mostrará el promedio de esos valores que sería en el ejemplo 4.

sábado, 21 de enero de 2017

Tipos de direccionamiento

Direccionamiento Inmediato





Direccionamiento Directo o Absoluto


Direccionamiento a Registro




Direccionamiento Indirecto






















Direccionamiento por desplazamiento




Direccionamiento Relativo a contador programa


Direccionamiento Indexado



Direccionamiento de pila






Lenguaje de Máquinas

Modos de Direccionamiento


Teoría del uso del direccionamiento.
Modo de direccionamiento específicos.
Memoria, mapa de memoria, paginación, segmentación y bloques.
Sincronización y Temporización, ciclos de acceso, lectura y escritura.
Temporización y control general de operaciones.

  Tipos, Instrucciones y lenguajes de máquina

Tipos y formatos de instrucciones.
Clasificación de diversos sets de instrucciones para distintos micro-procesadores.
Aplicación de programación en lenguaje de máquinas.

Conexión lenguaje ensamblador – componentes hardware.


Requisitos para programar en Assembler

Hardware:

Cantidad de registros generales
Registros de control (Contador de programa, Puntero de Pila, Registro de Estado…)
Tamaño de los registros generales, para saber el  rango de los números que se pueden manejar.
Tamaño de la memoria
Software:
El juego de instrucciones
Organización de la Pila


Tratamiento de instrucciones

En todo momento, la UC mantiene:

       - Contador de programa (PC): Contiene la direccion de la instrucción a ejecutar.
Tanto para la instrucción secuencial (ver direccion de la instrucción siguiente) como para los saltos (condicionales o no), su constante actualización corresponde a la UC.
      - Registro de instrucción (RI): contiene la instrucción a ejecutar.

Programa e instrucciones


Codificación de las instrucciones


Requisitos del conjunto de instrucciones

El conjunto de instrucciones de un computador debe ser completo en el sentido de que se pueda construir un programa para evaluar una función computable usando una cantidad de memoria razonable y empleando un tiempo moderado, es decir, el número de instrucciones de ese programa no debe ser demasiado elevado.
Los juegos de instrucciones también tienen que ser eficientes, esto significa que las funciones más necesarias deben poder realizarse usando pocas instrucciones.
El conjunto de instrucciones de una máquina debe ser regular, es decir debe ser simétrico (por ejemplo, si existe una instrucción de desplazamiento a la izquierda, debe haber otra de desplazamiento a la derecha, etc.) y ortogonal, es decir, deben poder combinarse, en la medida de lo posible, todos las operaciones con todos los tipos de datos y modos de direccionamiento.
Idealmente compatible con versiones anteriores.

    ** ortogonalidad: Cada operación debe poder hacerse con cualquier tipo de operandos y con cualquier tipo de direccionamiento.
    ** regularidad: El juego de instrucciones no presenta casos especiales.

Tipos de instrucciones

- A mayor numero de instrucciones, más complejidad de la UC y mayor número de bits requeridos por el campo código de operación.
- Dos tendencias a este respecto: RISC: pocas instrucciones, sencillas y se ejecutan en pocos ciclos. CISC: muchas instrucciones, complejas y muchos ciclos de reloj.
- Tipos de instrucciones: 
                * Instrucciones de movimiento de datos: A/desde/entre registros CPU/ direcciones de memoria.
                
                * Instrucciones aritmética-lógica: Suma, resta, multiplicación, división, and, or, desplazamientos, etc. Operaciones punto flotante.
                
                * Instrucciones de salto: Condicionales, incondicionales, manejo de subrutinas.



Tiempo de ejecución de un programa.



Modelos de ejecución



Donde estan los operandos en los distintos ISA.
       
     -  Arquitectura de pila: Implícitamente en la cima de la pila (memoria).
     - Arquitectura de acumulador: implícitamente uno de los fuentes y el destino en el registro acumulador y el otro fuente en memoria.
     - Arquitectura de registros: En registros o posiciones de memoria, 2 ó 3 operandos explícitos.
                 * Según el tipo de arquitectura de registros: 
                          - Se podrá hacer operaciones ALU con datos                  en memoria, ó habrá que cargarlos en registros                  para operar con ellos (MIPS).


Ejemplo de código en las diferentes ISA