OrganizacionComputadoras - UNAHUR.Capitulo1.va13 (Desde1ercuatr2020)

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 108

Capítulo 1:

Introducción a las Computadoras Digitales


y los Sistemas Numéricos

Ing. Martín Vernengo, 2018 ~ 2020.


[email protected]
Temario cubierto en este capítulo
Señales y Sistemas Digitales versus Analógicos.
Introducción a las Computadoras Digitales:
Diagrama en Bloques de una Computadora; Computadoras de uso general versus “Sistemas
Embebidos”. Capas de Abstracción de una Computadora. Principio de Equivalencia
Hardware-Software. Historia del Desarrollo de las Computadoras: las “Generaciones”.
Arquitectura de Von Neuman (análisis preliminar).

Sistemas Numéricos:
Sistema decimal; Sistemas de base “r”. Sistema Binario. Conversión entre binario y decimal
(sin coma y con coma/fraccionarios). Los prefijos Kilo, Mega, Giga, Tera y su interpretación
en Computación. Sistemas numéricos Octal y Hexadecimal: conversión a decimal y pasaje
directo a binario, utilidad en el contexto de una computadora binaria. Formatos BCD 8421,
BCD 2421 y XS-3. Códigos ASCII y Unicode. Transmisión Serie y Paralelo, bit de paridad.

Operaciones con Números Binarios, Octales y Hexadecimales:


Sumas con Binarios, Octales y Hexadecimales. Números binarios negativos: “complemento a
1” y “complemento a 2”. Resta binaria utilizando el complemento a 2. Binarios “con y sin
signo”. Introducción al diagrama en bloques de un sumador binario de una ALU, función
lógica requerida para el sumador por bit (Full Adder). Multiplicación/División por 10 en
decimal y Multiplicación/División, por “r” en base genérica y por 2 en binario. Multiplicación
binaria. Visualización de la necesidad de un “registro de desplazamiento” o “shift register”
para la implementación de multiplicaciones en una ALU. Formato de punto flotante o
“floating point”: necesidad, características generales (idea general sobre el formato floating
point IEEE 754). Operaciones con Floating Point.

Ing. Martín Vernengo, 2020.


[email protected]
Por qué digital y no analógico?
Ing. Martín Vernengo, 2020.
[email protected]

Digital viene de “digitos” un número fijo de valores posibles contra el analógico donde la cantidad de valores
posibles entre dos extremos mínimo y máximo es virtualmente infinita;
Los sistemas digitales preven sólo un número finito de valores (por ejemplo si son 2, el 1 y el 0 son BINARIAS
además de digitales) y permiten regenerar las señales (= información), eliminando el ruido que las afecta;

Señal ANALÓGICA

Canal de
Comunicaciones
ó
Circuito Electrónico

RUIDO

Señal DIGITAL Y BINARIA


bits: Canal de
1 0 1 1 0 1 Comunicaciones
ó
Circuito Electrónico
Por qué digital binario y no “multinivel”?
Ing. Martín Vernengo, 2020.
[email protected]

Por ejemplo en la figura superior vemos una señal digital de 4 niveles y nos damos cuenta que no es tan fácil
regenerar la señal original cuando aparece el ruido, ya que esos 4 niveles “están demasiado juntos”;
En cambio, la señal que además de digital es BINARIA, esos dos valores están “bien separados” y salvo que el ruido
sea realmente muy grande, siempre es posible recomponer la señal original. Pero en compensación, con la señal
multinivel se puede enviar el DOBLE de bits en el mismo intervalo de tiempo (“velocidad de datos” doble);
Señal DIGITAL NO BINARIA (4 NIVELES)
bits: bits:
01 1,00 V 01
1,00 V
bits: Canal de
11 Comunicaciones
bits: 0,66 V bits: ó
10 10 Circuito Electrónico
0,33 V bits: 0,33 V
00
0,00 V
RUIDO

Señal DIGITAL Y BINARIA


bits: Canal de
1 0 1 1 0 1 Comunicaciones
ó
Circuito Electrónico
Niveles lógicos: el “1” y el “0”
Si ahora nos concentramos en un sistema electrónico como lo es una computadora, vemos que
deben definirse rangos de voltajes para lo que se considera un 0 ó un 1 lógico;
Entonces, el rango de reconocimiento como 1 ó 0 debe ser mayor a la entrada del sistema
electrónico que lo que se envía a la salida, para acomodar las variaciones debido al ruido.

Rango de Voltajes Voltaje versus Tiempo

“1 LÓGICO” “1 LÓGICO”

“0 LÓGICO”
“0 LÓGICO”
Tiempo

CIRCUITO
ELECTRÓNICO

RUIDO
Tiempo
Ing. Martín Vernengo, 2020.
[email protected]
La Computadora Digital
CPU = “Central Processing Unit” o Unidad Central de Procesamiento:
Es el núcleo de toda Computadora Digital y está compuesto por la Unidad Aritmetico Lógica (ALU – Arithmetic Logic Unit), la
Unidad de Control y un banco de registros (memoria interna);
Los dispositivos de entrada/salida (input/output) permiten ingresar datos a ser procesados y obtener los datos-
resultado (teclado, mouse, pantalla, discos magnéticos, impresoras, dispositivos de comunicaciones);
La memoria externa puede ser volátil (normalmente denominada RAM) o permanente (denominada genéricamente
ROM) contiene variables de datos usadas en los programas y las propias instrucciones de programa;
La Unidad de Control es la parte clave que permite el funcionamiento de la CPU al coordinar las tareas de
procesamiento realizadas mediante la ALU sobre los datos e instrucciones de programa intercambiados con la
memoria externa y guardados temporalmente en los registros internos.

Unidad
CPU
Aritmético
Lógica (ALU)
Datos de Datos de
Entrada Salida
(a procesar) (procesados)
Dispositivos Unidad de Dispositivos
de Entrada Control de Salida

Banco de Registros
(Memoria Interna) Señales de Control
Datos Digitales
(Información)
Memoria
Externa
Ing. Martín Vernengo, 2020. (RAM/ROM)
[email protected]
Qué es un “sistema embebido”
Por ejemplo, hoy en día un Aire Acondicionado es un “sistema embebido”, es decir tiene adentro una
computadora para fines específicos que permite medir y controlar parámetros sistemas reales.
De modo que en el mundo actual las computadoras dejaron de ser “dispositivos especiales”
utilizados excusivamente para procesar información digital sino que están presentes en casi el 100%
de los dispositivos tecnológicos utilizados todos los días:
Electrodomésticos (Lavarropas, Aireacondicionados, Microondas, TV’s y dispositivos de audio/video),
dispositivos de comunicaciones (switches para redes de computadores, routers wi-fi) , aparatología utilizada
en medicina, sistemas de control de procesos industriales (PLC), etc. etc. etc….

Micro Controlador
µC / µP ó Micro Procesador
(CPU)

Ing. Martín Vernengo, 2020.


[email protected]
Diagrama en bloques de un sistema embebido
Los sistemas embebidos reciben ese nombre por el hecho de tratarse de equipamiento que en forma
externa no hay forma de determinar si son controlados a través de una computadora, por lo que
puede afirmarse que hay un “software embebido” almacenado en un “microcontrolador” interno.
El diagrama en bloques no es muy diferente al de una computadora digital de uso general, salvo por
el hecho de la existencia de:
Conversores A/D (Analógico-Digitales) a la entrada, para convertir las señales analógicas del mundo exterior a
formato binario para que pueda ser procesado por la CPU y
Conversores D/A (Digital-Analógicos) a la salida, para que las señales de control creadas en formato binario
por el programa embebido sean transformadas en actuadores eléctricos (por ejemplo el motor de un
compresor en una heladera o un aire acondicionado o el de un lavarropas);

Sensores Actuadores
Analógicos Conversor Analógicos
Microcomputador Conversor
de Entrada A/D de Salida
(termómetro)
ó D/A (compresor/
Microcontrolador motor del AA)
ó
Sensores Procesador Digital Actuadores
Digitales de Señales (DSP) Digitales
de Entrada de Salida
(indicador de
(botonera AA)
temperatura)

Memoria
(Programa de
Control del AA)
Ing. Martín Vernengo, 2020.
[email protected]
Diferencias entre Computadoras y Sistemas Embebidos
En esencia hay dos aspectos que diferencian a una computadora general de los sistema embebidos:
Como ya dicho, los sistemas embebidos siempre requieren conversores A/D y D/A;
Las computadoras son mucho más flexibles en cuanto a los programas con que funcionan (software): deben
serlo ya que tienen un propósito general y no específico.

Temperatura Analógica Temperatura Digitalizada

Tiempo (horas) Tiempo (horas)

Sensores Actuadores
Analógicos Conversor Analógicos
Microcomputador Conversor
de Entrada A/D de Salida
(termómetro)
ó D/A (compresor/
Microcontrolador motor del AA)
ó
Sensores Procesador Digital Actuadores
Digitales de Señales (DSP) Digitales
de Entrada de Salida
(indicador de
(botonera AA)
temperatura)

Memoria
(Programa de
Control del AA)
Ing. Martín Vernengo, 2020.
[email protected]
Capas de Abstracción en una Computadora
Por “capas de abstracción” entendemos el análisis que puede hacerse de una computadora digital a
distintos niveles de complejidad denominados “capas”:
A efectos de describir el funcionamiento del sistema, en cada una de esas capas podemos
“abstraernos” de los detalles de la capa inmediatamente inferior;
Esto tiene la ventaja de poder realizar un análisis del problema a resolver de una manera
primero más general o de “alto nivel”, luego pasando paulatinamente a describir la solución a
niveles cada vez más específicos o de “bajo nivel” a medida que vamos hacia capas inferiores.

Algoritmos
Lenguajes de Programación
Sistemas Operativos
Microarquitectura
Transferencias de Registros
Compuertas Lógicas
Circuitos de Transitores
Ing. Martín Vernengo, 2020.
[email protected]
“Alto” y “Bajo” Nivel
Las capas superiores brindan una visión más general o “de alto nivel”:
Esconden las complejidades de la estructura circuital electrónica (“hardware”);
Permiten comandar la CPU a través de un “listado de directivas” ( “programas” ó “software”);
Se las denomina de “alto nivel” pues especifican el funcionamiento con mayor generalidad;
Las capaz inferiores o de “bajo nivel” requieren mayor especificidad cuanto a la forma en la que se
desea que la computadora opere:
De modo que cuanto más abajo se encuentra una capa, más cerca se está de describir el funcionamiento de
los circuitos electrónicos o “hardware”;

Algoritmos

+ Alto Nivel
+ Software
Lenguajes de Programación
Sistemas Operativos
Microarquitectura

+ Hardware
+ Bajo Nivel
Transferencias de Registros
Compuertas Lógicas
Circuitos de Transitores
Ing. Martín Vernengo, 2020.
[email protected]
Algoritmos Algoritmo “Arreglar Lámpara”
Son una lista de pasos o instrucciones que deben ser ejecutados
secuencialmente por una computadora digital para obtener un
modelo de solución para un problema planteado.

Para realizar un programa es conveniente entonces el


diseño previo del algoritmo.
Un lenguaje de programación es sólo un medio para expresar un
algoritmo, de modo que los algoritmos son independientes de los
lenguajes de programación.
Es decir: en cada problema el algoritmo puede escribirse y luego
implementarse y ejecutarse con un lenguaje diferente de
programación.

Algoritmos
Lenguajes de Programación
Sistemas Operativos
Microarquitectura
Transferencias de Registros
Compuertas Lógicas
Circuitos de Transitores
Ing. Martín Vernengo, 2020.
[email protected]
Lenguajes de Programación
Los lenguajes de “Alto Nivel” como C++, Pascal, Java , etc. contienen las sentencias específicas que
permiten implementar un algoritmo pero que no pueden en general ser ejecutados directamente
por la computadora digital que utiliza “código de máquina” constituido directamente por 1’s y 0’s;
Existe un tipo particular de programa llamado “compilador” que traduce el código de los lenguajes de alto
nivel al código de máquina que puede ejecutar la computadora;

Los lenguajes de “Bajo Nivel” (denominados generalmente “assembler” o ensambladores)


contienen instrucciones muy granulares que están directamente relacionadas con una instrucción
como realmente las ejecuta la computadora con los códigos de máquina, pero tiene una sintaxis
entendible para los seres humanos;

Algoritmos
Lenguajes de Programación
Sistemas Operativos
Microarquitectura
Transferencias de Registros
Compuertas Lógicas
Circuitos de Transitores
Ing. Martín Vernengo, 2020.
[email protected]
Lenguajes de Programación: ejemplo alto nivel
Algoritmo “Arreglar Lámpara” Lenguaje Alto Nivel

input estado_lamp
PROGRAMADOR (humano) If estado_lamp == no_enchufada /* = 0
estado_lamp = enchufada /* = 1
return /* FIN PROGRAMA

input estado_foco
if estado_foco == fallado /* = 0
prox_accion = reemp_foco /* = 1
return /* FIN PROGRAMA

prox_accion = compra_lampara /* = 2
return /* FIN PROGRAMA

Algoritmos
Lenguajes de Programación
Sistemas Operativos
Microarquitectura
Transferencias de Registros
Compuertas Lógicas
Circuitos de Transitores
Ing. Martín Vernengo, 2020.
[email protected]
Lenguajes de Programación: ejemplo bajo nivel
Código “Assembler” Equivalente Lenguaje Alto Nivel

LOAD Reg_A, MEM_estado_lamp input estado_lamp


LOAD Reg_B, VALOR_no_enchufada
SUBTRACT Reg_A, Reg_B If estado_lamp == no_enchufada /* = 0
JMP_NONZERO SALTO1 estado_lamp = enchufada /* = 1
LOAD Reg_A, VALOR_enchufada return /* FIN PROGRAMA
STORE MEM_estado_lamp, Reg_A
17 instrucciones
JMP FIN_PROG de bajo nivel input estado_foco
SALTO1: LOAD Reg_A, MEM_estado_FOCO if estado_foco == fallado /* = 0
LOAD Reg_B, VALOR_fallado prox_accion = reemp_foco /* = 1
SUBTRACT Reg_A, Reg_B 10 instrucciones return /* FIN PROGRAMA
JMP_NONZERO SALTO2
LOAD Reg_A, VALOR_reemp_foco
de alto nivel prox_accion = compra_lampara /* = 2
STORE MEM__prox_accion, Reg_A return /* FIN PROGRAMA
JMP FIN_PROG
SALTO2: LOAD Reg_A, VALOR_comprar_foco
STORE MEM__prox_accion, Reg_A
FIN_PROG: RETURN

Código de Máquina (Binario) COMPILADOR


011101010011101010010110101011
011101010010010100101010100101
LENGUAJE
Correspondencia 010101110111010101011001010101
101010110001011111010101010000
ALTO NIVEL
directa línea a línea 110010010101001010101001010010
100101010100101001010010100101
(software)
101010101010101001010101010111
101010101001010100101010101111
010101010101010100101010100101
Registro A (Reg_A)
17 instrucciones
010101010111110100000101001110
101010110001011111010101010000 Registro B (Reg_B)
110010010101001010101001010010
de bajo nivel 100101010100101001010010100101 estado_lamp
101010101010101001010101010111
101010101001010100101010101111 estado_foco
010101010101010100101010100101
Ing. Martín Vernengo, 2020.
[email protected]
010101010111110100000101001110 prox_accion
Sistemas Operativos
En los primeros días de la computación, no había
teclados ni pantallas: los usuarios imprimían “tarjetas
perforadas” que contenían los programas, que se leían
por un “lector de tarjetas” y los resultados luego de
“correr el programa” se obtenían en una impresora;
Luego se inventaron los “sistemas batch”
(procesamiento por lotes) que permitían acelerar el
proceso y utilizar cintas magnéticas para el ingreso y
salida de datos (aunque finalmente se imprimía).
Todas estas tareas para distintos usuarios que traían sus “tarjetas perforadas” eran realizadas por los
“operadores” de los centros de cómputos: y el programa que luego se implementó para leer la cinta magnética y
mandar ejecutar las rutinas una por una sería el “abuelo” de los actuales “sistemas operativos”;
Los sistemas operativos hoy en día son programas que permiten al igual que en los antiguos sistemas batch que
varios “usuarios”, que ahora son diferentes programas o procesos de un mismo o varios usuarios, compartan
recursos tales como el procesador y los dispositivos de entrada/salida, actuando como interfaz con el hardware.

Algoritmos
Lenguajes de Programación
Sistemas Operativos
Microarquitectura
Transferencias de Registros
Compuertas Lógicas
Circuitos de Transitores
Ing. Martín Vernengo, 2020.
[email protected]
Microarquitectura
Antes ya explicamos lo que era el “código de máquina”: instrucciones codificadas en forma digital binaria
que sólo pueden ser “entendidas” fácilmente por la CPU y que no tiene sentido que usen los humanos;
En particular, el área de la CPU encargada de interpretar el
código de máquina es la Unidad de Control;
“Microarquitectura”: es el proceso por el
cual el código de máquina se transforma
órdenes (señales de control) dirigidas al
resto de las partes de la CPU (registros o
memoria interna a del procesador,
memoria externa, Unidad Aritmética-
Lógica o ALU en inglés); señales de
control
Utiliza un tipo de “programación “ de muy muy bajo nivel, sólo utilizado
por los diseñadores de microprocesadores, que se llama
“microprogramación”.

Algoritmos
Lenguajes de Programación
Sistemas Operativos
Microarquitectura
Transferencias de Registros
Compuertas Lógicas
Circuitos de Transitores
Ing. Martín Vernengo, 2020.
[email protected]
Transferencias de Registros
Cuando la Unidad de Control por ejemplo da la orden a través de señales de control para transferir
datos de la memoria externa a la memoria interna (mejor conocida como “registros internos” de la
CPU) o hacia la ALU a la que a su vez le ordena realizar una suma, estamos en el domino de la capa
que hemos denominado “Transferencia de Registros”;

Una instrucción de alto nivel (por ejemplo en


Lenguaje C++ o Java) puede constar de
decenas de instrucciones de código de
máquina;
Y cada instrucción de máquina a su vez puede
implicar una secuencia de varias señales de
control, algo de lo cuál el programador no
necesita saber nada (por suerte).

Algoritmos
Lenguajes de Programación
Sistemas Operativos
Microarquitectura
Transferencias de Registros
Compuertas Lógicas
Circuitos de Transitores
Ing. Martín Vernengo, 2020.
[email protected]
Compuertas Lógicas
Este tema será estudiado en detalle más adelante pero por ahora veamos un ejemplo simple de
dos compuertas lógicas con las cuales en rigor podría construirse toda una computadora digital:
Compuerta AND (“Y” en inglés): la salida sólo es un “1” binario si la entrada 1 Y la entrada 2 Y la entrada 3
… Y TODAS las entradas son 1 (o lo que es lo mismo: es “0” si una o más de sus entradas es “0”);
1 1
1 0
… 1 0

1 1

Compuerta NOT (“NO en inglés): invierte la salida (de “0” a “1” y viceversa);
1 0
0 1

Algoritmos
Lenguajes de Programación
Sistemas Operativos
Microarquitectura
Transferencias de Registros
Compuertas Lógicas
Circuitos de Transitores
Ing. Martín Vernengo, 2020.
[email protected]
Circuitos de Transistores
En las CPU modernas hay miles de millones de transistores con los que se construyen las
compuertas lógicas (ejemplo de una NOT abajo) que son la base de su funcionamiento.

= R

Salida NOT:
0 Volt = “0”
+
5V

= 1
0
0
1

Entrada NOT: 5 Volt = “1”


Señal de Control: 5 Volt = “1”
S = +5 Volts (*) = “1”: Llave Cerrada. 0 Volt = “0”
S = 0 Volts = “0”: Llave Abierta.
(*) 5 volts es un ejemplo.

Algoritmos
Lenguajes de Programación
Sistemas Operativos
Microarquitectura
Transferencias de Registros
Compuertas Lógicas
Circuitos de Transitores
Ing. Martín Vernengo, 2020.
[email protected]
Principio de Equivalencia Hardware-Software
Está implícito en el modelo de “capas de abstracción” y nos dice que:

“Todo aquello que puede realizarse a través de software (programas), también


puede realizarse con hardware (circuitos electrónicos/compuertas lógicas)”.

Ejemplo:
Software Modificación ! Hardware

=
if A = 1 AND B = 1 then
C=1
else D
C=0
endif if A = 1 AND B = 1 AND D = 1 then
C=1
else
C=0
endif

Antes de la invención de las computadoras y sobretodo los microprocesadores, las


aplicaciones simples de control de equipos que actualmente se realizan con los sistemas
embebidos, se hacían directamente con hardware que “programaba” su funcionamiento:
Ejemplo: “encender el microondas (C=1) sólo si el usuario presionó el botón de calentar (A=1) Y
ADEMÁS (AND) la puerta del microondas se encuentra CERRADA (B=1)”.
Ing. Martín Vernengo, 2020.
[email protected]
Los FPGA’s y la posibilidad de “programar hardware”
En los últimos 20 a 30 años han surgidos dispositivos que gradualmente han ido
permitiendo a los ingenieros desarrollar hardware de microelectrónica programable hasta
llegar con los FPGA a la posibilidad de “crear su propia CPU”;
Con los FPGA (“Field Programmable Gate Array”, “Arreglo de Compuertas [Lógicas]
Programable en Campo”) es posible directamente crear un microprocesador de manera
flexible, es decir todo aquello que normalmente “viene fijo” en un procesador de Intel o
AMD, aunque el objetivo NO ES competir con ellos (y sería casi imposible…);
La utilidad de los FPGA está en
desarrollar CPUs o circuitos
inteligentes que cumplan un
objetivo específico: por
ejemplo procesamiento de
señales, cálculos en paralelo
(mayor rapidez) con un
algoritmo específico;
Hasta existe un lenguaje que
permite programarlos (son
“HDLs” o “Hardware
Description Languages”)y
“escribir un chip” a través de
una herramienta electrónica:
por ejemplo VHDL es uno y
Verilog es otro.

Ing. Martín Vernengo, 2020.


[email protected]
Historia de las Computadoras: las tarjetas perforadas
El sistema de tarjetas perforadas se ideó inicialmente para “programar” máquinas
textiles para tejer patrones fue perfeccionado en 1801 por J.M.Jacquard, en base a
diseños originales con papel perforado que databan de tan tempranamente como
1725 también en Francia (Bouchon, Falcon y Vaucanson);
En algún sentido, podría decirse que fue el primer sistema de
producción automatizado por métodos “informáticos”;

Diseños de 1840 y 1842 realizados con un “Telar de Jacquard” Perforadora de Tarjetas de Jacquard Joseph Marie Jacquard

Las máquinas de Jacquard no


utilizaban un sistema eléctrico
para sensar con las tarjetas
perforadas pero eso fue lo que sí
realizó Herman Hollerith para
obtener más rápidamente los
resultados del censo de 1890 en
los EUA;

Hollerith fundó la compañía que


más adelante se llamaría IBM y
que por muchos años fue el líder La tarjeta de Hollerith card tal como mostrada en la la
absoluto de la industria de la Railroad Gazette, en 1895, con 12 filas y 24 columnas
Herman Hollerith
computación.
Ing. Martín Vernengo, 2020.
[email protected]
Historia de las Computadoras: los comienzos
La primera computadora no electrónica (electromecánica) fue ideada Charles Babbage en el año 1833 y era lo que
podríamos hoy día llamar una “calculadora programable” y la llamó “Máquina Analítica”;
Babbage sólo pudo construir una versión previa llamada “Máquina Diferencial”
concebida sólo para cálculos muy específicos con polinomios y sólo
parcialmente pudo construir la siguiente versión, la “Máquina Analítica” que
era lo que hoy denominaríamos una computadora de uso general;
Aunque no pudo hacerla funcionar completamente, sí pudo realizar un diseño integral
en el papel;
Ya contenía la idea de una “Unidad Aritmético Lógica”, de una “Memoria” y hasta de
un “Programa” donde incluso se preveía la posibildad de saltos condicionales (el “if”);
Estaba previsto que los programas se introdujeran con tarjetas perforadas,
inspirándose en los telares de Jacquard y lo que sería el método que un siglo después
utilizaron las computadoras digitales (como veremos);
Charles Babbage
El diseño de la “máquina analítica” de Babbage, incluso preveía la primera impresora
automática como sistema de salida, algo que también utilizaron las primeras
computadoras construidas un siglo después;

Ada Byron (hija del famoso escritor británico y luego casada


con el Conde de Lovelace, por eso también conocida como
Ada Lovelace), fue una de las primeras matemáticas mujeres
eminentes de la historia;
Es considerada “la primera programadora de la historia” ya
que además de ayudar a Babbage a promover y buscar
financiación para su proyecto, generó algunos programas
para la computadora (eran diseños teóricos ya que como
dijimos Babbage no logró implementar su “máquina
analítica” completamente);
En su honor, en 1977 se creó un Lenguaje llamado “Ada”;

Ada Byron
Condesa de Lovelace
Ing. Martín Vernengo, 2020.
[email protected]
Historia de las Computadoras: George Boole
Nacido en 1815, fue profesor de matemáticas en el
Queen’s College (una Universidad) de Cork, Irlanda;

Como inventor del álgebra que hoy en día se conoce como


“Álgebra de Boole” en su honor, que marca los
fundamentos de la aritmética computacional moderna,
Boole es considerado como uno de los fundadores del
campo de las Ciencias de la Computación;

En 1854 publicó “An Investigation of the Laws of Thought


on Which are Founded the Mathematical Theories of Logic
and Probabilities”; George Boole

Allí desarrolló un sistema de reglas que le permitían expresar, manipular y simplificar


problemas lógicos y filosóficos cuyos argumentos admiten dos estados (verdadero o
falso, ó 1 y 0) por procedimientos matemáticos;

Se podría decir que es el padre de los operadores lógicos simbólicos y que gracias a su
álgebra hoy en día es posible operar simbólicamente para realizar operaciones lógicas;

Como veremos más adelante, el diseño de los circuitos internos de las computadoras
digitales modernas (la capa que anteriormente denominamos “Compuertas Lógicas”)
utiliza el Álgebra de Boole.
Ing. Martín Vernengo, 2020.
[email protected]
La 2da Guerra Mundial y las primeras computadoras electrónicas
La Segunda Guerra Mundial fue una de principales motores para acelerar el
desarrollo de computadoras digitales y de la computación como ciencia;
Nacido en Londres, Alan Turing (1912-1954) es considerado uno de los padres de
la ciencia de la computación y precursor de la informática moderna.
Proporcionó una influyente formalización matemática de los conceptos de algoritmo y
computación: la máquina de Turing;
Fue el primero en definir, en 1937 qué es y qué limitaciones tiene una computadora, a
la que definió en términos puramente matemáticos como un “Autómata Finito”.
Alan Turing
Turing fue el que decifró los códigos secretos de la Alemania Nazi de la
“Máquina Enigma” y luego los códigos FISH:
Para poner en práctica los algoritmos de desencriptación de mensajes de
Turing, el gobierno británico construyó una de las primeras computadoras
digitales de propósitos específicos , la COLOSSUS MARK I;
La primera COLOSSUS funcionaba con 1500 válvulas y entró en servicio en
Junio de 1944, siendo las ideas de Turing esenciales para su desarrollo;
Los datos (de los mensajes secretos) se leían con una cinta perforada;
No se la puede considerar la primera computadora ya que no era de “fines Teoría de Autómatas
generales” o sea, no permitía resolver cualquier problema planteado;
Konrad Zuse en Alemania desarrolló una computadora, la Z1, que si bien utilzaba relays
(electromecánica) su intención fue utilzar válvulas y sólo no lo pudo hacer por falta de esos
suministros debido a la guerra (el gobierno nazi no financió su proyecto, por suerte);
John Atanasoff (1904–1995) fue un norteamericano que diseñó y construyó la primera
computadora digital binaria con válvulas en 1939 pero tampoco era de “propósitos generales”;
Servía para resolver un problema matemático particular (ecuaciones lineales);
Sin embargo, el trabajo de Atanasoff fue el inspirador para los inventores de la primera computadora
digital de propósitos generales, la ENIAC.
Ing. Martín Vernengo, 2020.
[email protected]
La “Primera Generación”: la ENIAC
Se considera como primera computadora electrónica Folleto del ejército estadounidense ofreciendo
digital (binaria) de propósitos generales la que se trabajo en la ENIAC, 1946.
desarrolló y construyó durante la Segunda Guerra
Mundial financiada por el ejército de EUA, la ENIAC ó
“Electronic Numerical Integrator and Computer”;
La ENIAC fue inventada por J. Mauchly y J. P. Eckert
(profesor y alumno), quienes estaban en una universidad
cerca de Philadelphia, donde el primero era profesor de
Física y deseaba acelerar los cálculos meteorológicos.
Mauchly estaba al tanto del trabajo de Atanassof.
No pudiendo recibir fondos de la universidad, y sabiendo
Mauchly que el ejército de EUA necesitaba acelerar los
cálculos de tablas de trayectorias balísticas, propuso y
obtuvo financiación para el proyecto;
Sin embargo la computadora no pudo ser utilizada durante
la guerra, ya que se puso en servicio recién en el año 1946.

Utilizaba 17.468 válvulas, ocupaba


un espacio de casi 170 m2, pesaba 30
toneladas y consumía una potencia
de 170 Kilowatts, pero su memoria
de datos era lo equivalente a menos
de 128 bytes! (1000 bits) y se
ingresaban por tarjetas perforadas;
=
Si bien funcionaba en base a lógica
circuital binaria, la Unidad Aritmético
Lógica (ALU) era decimal;

Ing. Martín Vernengo, 2020.


[email protected]
Cómo se “programaba” la ENIAC
La ENIAC se programaba conectando cables: el “código Folleto del ejército estadounidense ofreciendo
de máquina” no eran estrictamente hablando 1s y 0s trabajo en la ENIAC, 1946.
sino “cable conectado” =1 ó “cable no conectado” = 0;
Esto hacía muy engorroso “programar” la
computadora (en esa época se hacía directamente en
código de máquina, ni siquiera era “assembler”);

CPU
MEMORIA INTERNA
(REGISTROS)
MEMORIA Sólo
REGISTRO A REGISTRO B
EXTERNA Datos
REGISTRO C REGISTRO D

UNIDAD DE
ALU CONTROL

DISPOSITIVOS
DE ENTRADA / SALIDA

6000 cables e = “Programa” = código de máquina


interruptores cable conectado = 1,
Ing. Martín Vernengo, 2020.
[email protected] cable desconectado = 0
Arquitectura de Von Neuman
Debido a la gran lentitud que implicaba la “programación con cables”, para la próxima computadora,
la EDVAC, surgió la idea de almacenar los 1s y 0s del código de máquina en la misma memoria;
La idea fue aportada por el famoso matemático húngaro (y genio) nacionalizado estadounidense, John Von
Neuman, quien era uno de los colaboradores para ENIAC y estaba en la Universidad de Princenton;
Nota: en algunos libros se menciona esta idea como original de los propios Mauchly y Eckert, quienes no
pudieron publicarla al ser el de la ENIAC un proyecto clasificado secreto;
Pero un aporte indiscutido de Von Neuman fue dejar de lado la aritmética decimal y utilizar la binaria;
dirección del dato
Las primeras computadora construidas en base (variable o código de máquina)
al paradigma de Von Neuman, es decir
“Computadoras Digitales por Programa
Almacenado” y enteramente binarias fueron la CPU MEMORIA
EXTERNA
EDVAC (construida por Mauchly y Eckert para PROGRAM MEMORIA INTERNA
el ejército de EUA) y la EDSAC en la Universidad COUNTER (PC) (REGISTROS)

de Cambridge, Reino Unido y ambas entraron REGISTRO A REGISTRO B CÓDIGO DE


en servicio en el año 1949; MÁQUINA

REGISTRO C REGISTRO D
Hubo que agregar un registro interno adicional,
el INSTRUCTION POINTER (IP), también
llamado habitualmente PROGRAM COUNTER DATOS
(PC) para almacenar la dirección de la memoria UNIDAD DE (VARIABLES)
donde está guardado el código de máquina de ALU CONTROL
la próxima instrucción a realizar;
El PC se va incrementando para ejecutar
secuencialmente las instrucciones: Programas
DISPOSITIVOS + Datos
Salvo cuando hay un salto de programa (un “if”) DE ENTRADA / SALIDA 010110101…
en que la ALU se utiliza para incrementar o
decrementar el PC.
Ing. Martín Vernengo, 2020.
[email protected]
El problema de la primera generación de computadoras
Las primeras computadoras digitales, aunque no electrónicas (ejemplo la Z1 de K. Zuse) fueron
construidas con relés, que servían para generar un “1” con llave abierta y un “0” con llave cerrada;

“Compuerta NOT a relé”


Utiliza un electroimán y un

=
resorte para atraer o repeler R + 1 0
la pieza móvil de la llave 5V 0 1
Entrada NOT: Salida NOT: −
PROBLEMAS: 5 Volt = “1” 0 Volt = “0”
- Tamaño grande; 0 Volt = “0” 5 Volt = “1”

- Bajísima velocidad;
- Ultra baja confiabilidad “Computadora Electromecánica”
(contactos defectuosos). (digital, mas no electrónica).

Las válvulas de vacío, inventadas a comienzos del siglo XX mejoraban mucho la velocidad, pero no el
del tamaño y la confiabilidad era aún baja (se quemaban como las lamparitas de luz eléctrica),
Los electrones son atraidos
por la tensión positiva y el Salida NOT:
vacío elimina el aire que 0 Volt = “0”
impediría su movimiento. 5 Volt = “1”
++++
+
5V

- - -
Entrada NOT:
5 Volt = “1”
0 Volt = “0”
La reja de mando puede impedir que los electrones
pasen (abre la llave) si se le aplica una tensión
Ing. Martín Vernengo, 2020. negativa respecto del cátodo. “Computadora Electrónica”...
[email protected] … pero a Válvulas.
Los comienzos de la industria de computadoras/IT
La mayoría de las personas centralmente involucradas en el desarrollo de las primeras computadoras
como la ENIAC terminaron fundando compañías propias para fabricar computadoras;
Mauchly y Eckert fundaron EMCC y a la Oficina del Censo de los Estados Unidos para que encargasen
una computadora que se transformaría en la antecesora de la famosa Sperry UNIVAC (UNIVAC =
Universal Automatic Computer), consiguiendo en 1948 un contrato para elaborar el censo de 1950,
aunque no llegaron a tiempo para cumplir el diseño.

La empresa lanzó
un ambicioso
programa para
diseñar y fabricar
computadoras a
gran escala, sin
embargo sólo el
gobierno,
universidades y
megacorporacion
es tenían dinero
para comprar una
computadora;
Uno de los
grandes logros
fue el uso de la
cinta magnética
para
almacenamiento
a gran velocidad;
Crearon un departamento de software con el que desarrollaron aplicaciones, comenzando por el primer
compilador de Lenguaje "Shortcode" del mundo;
Años después la empresa fue comprada y de ella deriva la empresa UNISYS, que sigue en el mercado de IT.
Ing. Martín Vernengo, 2020.
[email protected]
Los comienzos de la industria de computadoras/IT
Ya habíamos visto que Hollerith, el pionero que utilizó
tarjetas perforadas para el censo de EUA en 1890 fue
quien fundó la compañía que años después se llamó IBM;
Pero IBM no estuvo interesada en el negocio de
computadoras hasta 1953, cuando lanzó la IBM 701;
Tenía una memoria (RAM) de hasta 4096 palabras de 36 bits
(lo equivalente a 18 Kilobytes!) ;
IBM fue durante largos años hasta la década del 1980 “la
Coca Cola de la informática”, hablar de esta empresa en
la década del 70 e incluso de los 80 era como desde 1990
en adelante hablar de Microsoft;
Pero al crear la “IBM-PC” en 1981 y licenciar la utilización del firmware BIOS
para la fabricación de PC’s por terceros, terminó perdiendo el control sobre
este mercado de hardware que hoy domina la industria informática a manos
de Intel y Microsoft, los fabricantes del entonces procesador 8088 y el sistema
operativo DOS;
IBM esperaba mantener su posición en el mercado al tener los
derechos de licencia del BIOS, y manteniéndose delante de la
competencia. Desafortunadamente para IBM, otros fabricantes
rápidamente hicieron ingeniería inversa del BIOS y produjeron
sus propias versiones sin pagar derechos de uso a IBM.
Sin embargo, hoy en día IBM sigue siendo una empresa muy
importante en el mercado de la informática, que factura del
orden de 80 mil millones de dólares anuales (el 20% del PBI
Argentino) no obstante muy diversificada hacia el software y
la consultoría informática con sólo alrededor de 10% de su
facturación proveniente de hardware tal como servidores de
alta performance.
Ing. Martín Vernengo, 2020.
[email protected]
La “Segunda Generación”: transistores discretos
Aunque hubo algunas versiones anteriores de transistores (de “efecto de campo”) en la década de
1920 que se pantentaron, no llegaron a ser utilizados;
La primera versión de transistor que tuvo un
impacto directo en la tecnología (los
“transistores bipolares”) y cuyo
funcionamiento pudieron explicar sus
inventores, ganando por ello el premio Nobel
de Física de 1956, surgió en el año 1948;
Utilizaban semiconductores (Germanio, Silicio) que al
ser “contaminados” con impurezas generaban dos tipos John Bardeen, William Shockley y
de portadores carga, los electrones (semiconductor Walter Brattain (Bell Labs, 1948 ).
tipo “N”) y las “lagunas” (semiconductor tipo “P”);

El nombre “transistor” significa en realidad “trans-resistor”, lo que permitía en general es cambiar la


resistencia eléctrica entre dos puntos (“C” y “E” en la figura, Colector y Emisor) a través (de ahí
“trans”) del voltaje aplicado a un tercer punto (“B” en la figura, Base);

=
+
+ VC
VC +

− VB

La aplicación como “trans-resistor” de la figura superior se dio en la Modo Digital


electrónica analógica (en la época: para disminuir el tamaño de radios
y TV’s que funcionaban con válvulas), pero en la electrónica digital
(computadoras) el funcionamiento del transistor también se hizo
“digital” (binario):
Resistencia CERO: llave cerrada;
Resistencia INFINITA: llave abierta.
=
Ing. Martín Vernengo, 2020.
[email protected]
Ing. Martín Vernengo, 2020.

Las primeras computadoras con transistores [email protected]

La primera computadora a transistores fue construida en el MIT (Massachusetts Institute of


Technology) y se llamó TX-0 (computadora Transistorizada eXperimental) en 1956;
Uno de los ingenieros que trabajaba en el laboratorio, Kenneth Olsen, fundó en 1957 la que luego fue la
famosa DEC (Digital Equipment Corporation) que fabricaba los también famosos computadores PDP.
La primera computadora, la PDP-1 (US$ 120.000 de 1961)
PDP-1, de 1961, costaba en el
orden de decenas de miles de
dólares en lugar de millones
(US$ 120.000 que a precios
actuales equivale a cerca de
un millón de USD);
Las computadoras a transistores fueron el comienzo de la
industria de los “MINICOMPUTADORES”, habiendo dos tipos
de computadoas, las “científicas” (para universidades y
gobierno) y las “comerciales” (empresas).
IBM-7090 (US$ 3 millones de 1958) IBM-1401 (US$ 370 mil de 1959)
La reacción de IBM fue construir
la primera computadora a
transistores, la IBM 7090 en
1958, luego la IBM 7094,
convirtiéndose en el gran
protagonista de la computación
científica en esos años;

En 1954 , para competir con DEC en el mercado de las minicomputadoras, IBM lanzó el modelo
1401 (US$ 370.000), aunque se podía alquilar a US$ 2500/mes (estos valores hay que
multiplicarlos por 8 para compararlos con precios del año 2020);
La “Tercera Generación”: circuitos integrados
Jack Kilby (en Texas Instruments) primero y Robert Noyce (co-fundador
de Fairchild Semiconductor) 6 meses después, inventaron en 1958 el
“circuito integrado”;
También comunmente llamado “chip” (con referencia a la pastilla
cuadrada de silicio donde se implantaban decenas de transistores);
Kilby recibió el premio Nobel de Física en el año 2000 por este logro ;
Robert Noyce
El de Noyce fue más importante, pues se hizo en Silicio y no Germanio (Kilby);
La idea fue colocar más de un transistor en un chip de silicio mediante el uso
de una máscara fotográfica con la que junto con la utilización de luz
Ultravioleta (UV) se podía controlar en qué zonas se aplicaban contaminantes
de un tipo u otro, para generar zonas de “semiconductor P” y “N” en
espacios cada vez más pequeños y allí donde se quisiera;

Ing. Martín Vernengo, 2020.


[email protected]
Proceso de fabricación de Circuitos Integrados
Resina fotosensible que
Óxido de Silicio (aislante eléctrico) aún es resistente al MÁSCARA
Silicio “tipo N” “ataque ácido” (proceso litográfico
(semiconductor)
O2

Luz UV (UltraVioleta) Resina resistente al ácido


Resina NO resistente al ácido
ácido

Creación de una “isla de Silicio Tipo


P” por medio de implantación de
impurezas de Boro

Ing. Martín Vernengo, 2020.


[email protected]
Los Circuitos Integrados por dentro
Lo que se ve en la figura grande es el resultado de la aplicación de las máscaras sucesivas y de distintas “islas” de
semiconductores “N”, “P”, óxido de silicio y metalizaciones para interconectar los transistores entre sí.
Conexiones de oro (alta confiabilidad) del “chip” (circuito integrado) al circuito externo

Encapsulado
protector de
resina epoxy
(polímero)

Ing. Martín Vernengo, 2020.


[email protected]
Ing. Martín Vernengo, 2020.

Primeras Computadoras con Circuitos Integrados [email protected]

Las IBM 7094 y el modelo 1401 (el primero compacto de IBM),


ambos basados en transistores individuales, tenían softwares
completamente incompatibles entre sí;
En 1964, IBM lanzó la primera computadora con circuitos
integrados “híbridos”, el System/360 ó simplemente S/360, que
fue un ícono de toda una época y un gran éxito comercial (se
comercializó hasta 1977 y luego se continuó con los S/370 en
1970 y S/390 hasta los años 1990);
Pero una innovación casi tan importante como los circuitos
integrados fue la “compatibilidad hacia atrás”:
Los S/360 eran sistemas que podían venir en varios tamaños y todo el
software corría sin problemas en las versiones anteriores;
Esta compatibilidad hacia atrás se debió a que IBM introdujo la “microprogramación” (ya mencionada en la
introducción), que permitía “programar” las señales de control de la Unidad de Control en forma similar a
software y de esa forma facilitar el diseño de CPUs compatibles con otras);
La microprogramación permitía a la S/360 incluso emular las primeras computadoras de IBM, la 701 y la
7090/4 y de esta forma surgía la novedad que hoy en día es habitual de poder utilizarse el software
previamente aplicado a otras plataformas.

DEC lanzó en 1965 el PDP-8, también con circuitos integrados


híbridos que fue su primer gran éxito comercial y una de las
computadoras más baratas hasta entonces:
US$ 18.500 ( x 8 a valores actuales…!!!) y en 1970 lanzó el PDP-11,
que siguió utilizándose hasta 1997;
DEC al igual que IBM fue impactada por el aparecimiento de los
clones de la IBM PC, aunque intentó competir con sus modelos “no
compatibles” en la década de 1980;
La empresa fue vendiendo progresivamente sus unidades de
negocios durante los 1990, por ejemplo a Oracle y Compaq (1998), y
dejó de existir (Compaq fue luego comprada por Hewlett-Packard);
La “Cuarta Generación”: las PC y los Servidores (VLSI)
En abril de 1965, uno de los ejecutivos
de Fairchild Semiconductor, Gordon
Moore observó que la cantidad de
transistores que se podían colocar
dentro de una pastilla o chip de silicio se
duplicaba cada 18 meses a dos años,
afirmación que hasta aproximadamente
el 2012 se viene cumpliendo;
En 1968 el inventor de los circuitos integrados en
Silicio y co-fundador de Fairchild, Robert Noyce dejó
la compañía junto con G. Moore para fundar INTEL.
Como era previsible por la “Ley de Moore” (como se popularizó la predicción), en 1970
se lanzaron al mercado las primeras CPU’s enteramente contenidas en una pastilla de
Silicio, aunque eran versiones que manejaban palabras de “½ byte” (4 bits);
El primero fue un desarrollo para los aviones F14 de la marina en 1970, el MP944;
Intel lanzó en 1971 el 4004 (de 4 bits), el tátarabuelo de los Pentium y sucesores;
Utilizaban (y se siguen utilizando) un tipo de transistor distinto del transistor “bipolar”
descubierto en 1948, el transistor MOS (Metal Óxido Semiconductor) que permite un mucho
mayor nivel de integración; El Intel 4004

En 1972 Intel lanza el 8008, el primer microprocesador de 8 bits y sucesivamente varias compañías
introducen decenas de microprocesadores similares de 8 bits durante la década de 1970:
Ejemplos: Motorola 6800 (1974), Motorola 6809 (1976), Zilog Z-80 (1976);
En 1974 Intel lanza el 8080 (8 bits) y en 1976 el primer microprocesador de 16 bits, el 8086, pero IBM
decide utilizar la versión posterior de 8 bits, el 8088 (1979) para desarrollar la IBM PC;
Como IBM (equivocadamente) utilizó chips de mercado y publicó integralmente la ingeniería de la IBM PC,
además de usar el MS-DOS de la naciente Microsoft como sistema operativo, esto significó el aparecimiento de
los “clones de IBM” y en definitiva de la era actual de computación personal pervasiva.
Ing. Martín Vernengo, 2020.
[email protected]
Paradigma Cliente – Servidor versus…
Actualmente nos encontramos de lleno en la “era del paradigma Cliente-Servidor” en la
arquitectura de los sistemas informáticos;
Es un modelo de diseño de interconexión de hardware e implementación de “software distribuido”, donde
las tareas se reparten entre los proveedores de recursos o servicios, llamados servidores, y los
demandantes, llamados clientes, que por lo tanto son “inteligentes”, ya que tienen su propia CPU, al igual
que el servidor.
Un cliente realiza peticiones a otro programa, el servidor, quien le da respuesta;
El objetivo de esta arquitectura es que muchos usuarios puedan acceder simultáneamente a
servicios compartidos de procesamiento y almacenamiento de datos y programas.

Router IP
Clientes
Internet
Router IP (WAN con protocolo IP) (“inteligentes”)

CPU
Servidor Red de Área Local
Wireless Router (LAN)
(Access Point)
Switch/Hub

Interacción
CPU permanente CPU

CPU
LAN = “Local Area Network”; CPU
WAN = “Wide Area Network”; CPU
Ing. Martín Vernengo, 2020.
[email protected]
Paradigma Cliente – Servidor versus… los “mainframes”
Sin embargo este paradigma no fue el inicial con el que arrancó la historia de la computación y
está en constante evolución (como veremos en las próximas láminas);
En los primeros días de la computación (años 1950) no había recursos que compartir, había siempre un
solo usuario que tenía a su disposición una “gran computadora personal”;
Luego, en los años 1960, cuando bajó el precio de las computadoras de millones de dólares a centenas y
decenas de miles de dólares, creció el número de usuarios y se inventaron los sistemas “batch” ya vistos:

“Batch Processing”
(“Procesamiento por Lotes”)

… Fila de Procesos
(“process queue”)

Fila (“queue”) de usuarios


CPU
A medida que la cantidad de usuarios creció
CPU
todavía más y la tecnología evolucionó, fue
posible crear los sistemas de “time sharing”
(“tiempo compartido” pero nada que ver con turismo): (sin CPU)
Con el uso de “terminales bobos” (“dumb terminals” en
inglés) permitía que un usuario por vez accediera a una
porción de “tiempo de procesador”, teniendo la ilusión de
tener una “CPU dedicada”;
No se lo considera en general como un sistema “cliente- (sin CPU)
servidor” (aunque podríamos decir que sí lo era, pero con
clientes “no inteligentes” que no tenían ninguna capacidad “Time Sharing”
de procesamiento propia) y sólo pedían ejecutar programas (“Tiempo Compartido”)
y recibir los resultados en forma remota.
Este tipo de sistemas aparecieron progresivamente durante (sin CPU)
la década de los 60 y se generalizaron en los 70. Nota: los primeros terminales ni tenían
Ing. Martín Vernengo, 2020. pantalla, eran teletipos: se imprimía en papel y
[email protected] simultáneamente se envíaba al mainframe.
Los 1970 – 1980: transición hacia el “cliente-servidor”
Durante los 70 fue justamente el período de tiempo en que se desarrollaron las primeras
“computadoras personales”, ya que estaban en pleno desarrollo los microprocesadores, que
abarataron la computación hasta dejarla en el orden de las centenas de dólares;
Inicialmente, esto sólo significó que las compañías seguían teniendo los mismo mainframes que
antes, y las personas pasaron a poder también tener computadoras en sus casas – pero como
internet todavía no llegaba al hogar, esto sólo era una versión más barata de la computación que
había existido en la década de 1950;
Sin embargo, las compañías como ya tenían redes propias (no internet aún), comenzaron a utilizar
algunas PC como “terminales bobos”, mediante un software que emulaba a estos últimos:
Esto tenía la ventaja de que los usuarios corporativos podían usar la PC para programas simples como
procesadores de texto y utilizaban la PC como “terminal bobo” para acceder a los sistemas administrativos
del mainframe;
Incluso una PC tenía la ventaja de que si
había dos mainframes diferentes (para
aplicaciones distintas), con “terminales
bobos” diferentes, con una misma PC CPU 1
podía emularse cualquiera de ellos.
DEC (mainframe)
A nadie se le ocurría en
esa época quitar los
mainframes y sustituirlos (sin CPU) (CPU)
por aplicaciones cliente en
las PC’s, mudando datos y IBM
aplicaciones a servidores;
Pues la inversión en
mainframes era alta y no (sin CPU)
había internet extendido CPU 2
(los protocolos de (mainframe)
comunicaciones como el
IBM-SNA eran propietarios
de los mainframes).
Ing. Martín Vernengo, 2020.
[email protected]
“Cloud Computing” y SaaS, surge un nuevo paradigma?
“The Data Center is the
new Mainframe”
www.brightworkresearch.com
En los últimos 10 años viene desarrollándose este
paradigma, que comenzó con aplicaciones sólo de
almacenamiento en Data Centers lo que luego dio lugar a
una serie de servicios adicionales:
Saas = “Software as a Service”: esencialmente qué es
esto? Ni más ni menos que la “vuelta a los mainframes”,
que ahora son los servidores de un “data center”, pero en
la era de internet.
El software reside en un servidor del data center y una PC
“boba” sólo solicita que se ejecute y recibe datos en forma
remota… las PC vuelven a ser en cierta medida “dummy
terminals” y toda la inteligencia está en los servidores;
Una sola instalación de software es compartida por diferentes
compañías, no se pagan costosas licencias sino un “alquile#,
no se consumen recursos del lado del cliente ni hay que gastar
en la realización de costos upgrades, entre otras ventajas;
Cloud Computing: más amplio que Saas, incluyéndolo pero
adicionando muchos otros recursos computacionales como
servidores donde se alojan los datos, pudiendo
gestionarlos y hacer back-ups en la nube como propios;
Virtualización: implica simular casi cualquier cosa “en la
nube”, Sistemas Operativos que corren remotamente en
una máquina cliente, distintos tipos de hardware como por
ejemplo servidores que en realidad son uno solo dentro
del Data Center.
Ing. Martín Vernengo, 2020.
[email protected]
Sistemas Numéricos: el decimal
Partamos de un ejemplo, el número 724,5 en el sistema decimal.
La posición de cada dígito en realidad nos indica una potencia de 10:

,
¿Cómo sabemos que es potencia de 10? En realidad no lo sabemos con certeza pero…
LA POTENCIA DE 10 ESTÁ IMPLÍCITA PORQUE TODO EL MUNDO TIENE 10 DEDOS
Y ESE ES EL ÚNICO MOTIVO POR EL QUE 10 ES LA “POTENCIA POR DEFECTO”
En general, un número decimal con n dígitos a la izquierda y m a la derecha se expresa :
,
10 10 10 10 10 10 10 10

Con lo que el número X representado en ese caso es entonces:


10 10 ⋯ 10 10
10 10 ⋯ 10 10

En el ejemplo inicial, para 724,5:


n = 3, m = 1, = 7, = 2, = 4 y = 5.
Ejercicio - encuentre los valores de n, m, y todos los Ak para los
siguientes números: 1895,73 / 12,03712 / 0,10034 / 210927,32.
Ing. Martín Vernengo, 2020.
[email protected]
Sistemas Numéricos: un sistema de base “r”
Por analogía, si la base fuera un número cualquiera “r” entonces otro número X se
podría poner también como:
… (
,
( …

( (
r

Con lo que en este caso general el número X representado sería:


(
⋯ (
(
( …

En la primer expresión, la notación … indica que la base es r, de modo que el


724,5 con el que arrancamos debería haberse expresado como:
724,5
Ejercicio Resuelto: encuente el valor decimal de 312,4 ".

SOLUCIÓN: ,
, ,

Ejercicio: encuente los valores decimales de 4231,42 " , 524,5 # ,


360,4 % , 247,1 & , 30121,32 ' , 231,0143 ' .
Ing. Martín Vernengo, 2020.
[email protected]
Cantidad de dígitos de un sistema de base “r”
Pregunta:
1) ¿Si en el sistema decimal (r = 10) la cantidad máxima de dígitos es justamente 10 y van
del 0 al 9, en un sistema de base “r”, cuántos dígitos debería haber y desde 0 hasta cuál
de dígito debería ser posible escribir?
2) ¿Estaría correcto escribir los números: 4251,42 " y 248,1 & ?

Ayuda: si por ejemplo quisiéramos escribir el número 5 en base r = 5, evidentemente


tendríamos que hacer la cuenta…

5 1 5 0 5 10 "

Conclusión: pareciera que el dígito 5 no es requerido


para un sistema de base 5, así como no hay dígito para
el 10 en base 10 (9 es el máximo), entonces…

Ing. Martín Vernengo, 2020.


[email protected]
Sistema Binario (r = 2): conversión a decimal
En función de lo visto, para un sistema binario debe haber dos dígitos: 0 y 1:
,
… ( (
(
2 2 2( 2 2 2 2 2 2 2 2

Con lo que en este caso general el número X representado sería:


(
2 2 ⋯ (2 2 2 2
(
2 2 (2 … 2 2

Ejemplo:

Pero para ahorrar pasos es mejor memorizar las potencias de 2 al menos hasta el 12
para convertir más rápidamente de binario a decimal:
Ejemplos:

128 32 16 4 1 181

Ing. Martín Vernengo, 2020.


[email protected]
Conversión binario a decimal cuando hay coma
¿Y si hay coma? ¿Cómo utilizamos la tabla? Por ejemplo el número 110101, 101 :
1 1 0 1 0 1 , 1 0 1
2" 2' 2 2 2 2 (

32 16 4 1 0,5 0,125 53,625

1 1 1
2 0, 5 2 (
0,125
2 2( 8

Ing. Martín Vernengo, 2020.


[email protected]
Kilo, Mega, Giga, Tera… pero binarios
Volviendo a la tabla de potencias de 2, focalicemos en dos exponentes: 10 y 20;

2 1024

Por pura coincidencia, la potencia 10 del sistema binario está extremadamente


próxima a la potencia 3 del decimal, que se conoce con el prefijo “Kilo” (“Kilogramos”)
y la potencia 20 del sistema binario con la potencia 6 del decimal, a la que se le asigna
“Mega” (“Mega Hertz”) pero en el mundo de la informática son levemente diferentes:
2 1024 * 1000 10( 1+;
2 2 2 .2 2 1024 * 1000 1′000′000 10# 1.;
2( 2 .2 .2 2 (
1024( * 1000( 1′000′000′000 10/ 10;
2' 2 '
1024' * 1000' 11 000′000′000′000 10 12;
Por eso cuando se habla de Kilo en el ámbito de la informática queremos decir 1024, no
“mil” y por ejemplo “64K” entonces sería 64 1024 2# 2 2 # 65′536 y no
directamente 64′000;
Ing. Martín Vernengo, 2020.
[email protected]
Conversión binario a decimal: ejercicios
Convertir de binario a decimal los siguientes números utilizando en lo posible la
memorización de la tabla de potencias de 2 siempre que el exponente sea hasta 10
(positivo o negativo) y buscando en la tabla para exponentes mayores:

1001101 ? 0,01100101 ?
1010011,101 ? 101101,00110111 ?
10101110,1001 ? 1000000110000,01011 ?
100011011001 ? 1010100001000011,10101 ?

Para los siguientes números decimales expresados con prefijos binarios que se usan
para indicar tamaños de memoria en bytes (por ejemplo) expresarlos directamente en
decimal o utilizando otro prefijo binario, según se pide en cada caso:
10 KB _________ Bytes; 10 KB _________ MBytes
16 MB _________ Bytes; 16 MB _________ GBytes;
16 MB _________ KBytes; 16 GB _________ TBytes;
32 GB _________ KBytes; 32 GB _________ TBytes
32 GB _________ MBytes; 12 TB _________ GBytes
32 GB _________ Bytes; 12 TB _________ MBytes

Ing. Martín Vernengo, 2020.


[email protected]
Conversión binario a decimal: ejercicios (soluciones)
Convertir de binario a decimal los siguientes números utilizando en lo posible la
memorización de la tabla de potencias de 2 siempre que el exponente sea hasta 10
(positivo o negativo) y buscando en la tabla para exponentes mayores:

1001101 77 0,01100101 0,39453


1010011,101 83,625 101101,00110111 45,21484
10101110,1001 174,5625 1000000110000,01011 4144,34375
100011011001 2265 1010100001000011,10101 43075,65625

Para los siguientes números decimales expresados con prefijos binarios que se usan
para indicar tamaños de memoria en bytes (por ejemplo) expresarlos directamente en
decimal o utilizando otro prefijo binario, según se pide en cada caso:
10 KB 10′240 Bytes; 10 KB 0,009765625 MBytes
16 MB 16′777′216 Bytes; 16 MB 0,015625 GBytes;
16 MB 16′384 KBytes; 16 GB 0,015625 TBytes;
32 GB 33′554′432 KBytes; 32 GB 0,03125 TBytes
32 GB 32′768 MBytes; 12 TB 12′288 GBytes
32 GB 34′359′738′368 Bytes; 12 TB 12′582′912 MBytes

Ing. Martín Vernengo, 2020.


[email protected]
Conversión decimal a binario

Se van sumando las potencias


de 2 (de acuerdo a la tabla ya
vista y memorizada en lo
posible) que sean más
próximas SIN SUPERAR el
número a convertir.
45 > 32 13
13 > 8 5

5>4 1


76 > 64 12
12 > 8 4

4>4 0
Ing. Martín Vernengo, 2020.
[email protected]
Conversión decimales fraccionarios a binario:
Utilizamos el Método 1: simplemente se continúa sumando las potencias de 2
fraccionarias más próximas a la parte fraccionaria del decimal;
14,8125 14 0,5 0,25 0,0625
Ejemplo: 14,8125 ?

?@, ABC ∶ EF! HI JKLF!

14,75

14,5

14
12

14,8125 8 4 2 0 0,5 0,25 0 0,125 0,0625


1 (
1 '
1
2( 2 2 2 2 2 2 2
4 8 16

14,8125 1 1 1 0 , 1 1 0 1
14,8125 1110,1101
Pero, puede ocurrir que la cantidad de dígitos binarios necesaria siga incrementándose si
el número decimal fraccionario no se puede aproximar exactamente con la cantidad de
dígitos binarios máxima disponible para manejar con la computadora;
Por ejemplo, si sólo se disponen de 4 dígitos binarios después de la coma, tenemos que convertir
en forma aproximada el siguiente número: 14,8130 * 14,8125 1110,1101 ;
Ing. Martín Vernengo, 2020.
[email protected]
Conversión decimal a binario: ejercicios
Convertir de decimal a binario utilizando el método más conveniente, pero probar con
los dos métodos y comparar al menos en 5 casos a elección y limitando a 5 dígitos
binarios después de la coma como máximo:
29 ? 514 ?
49 ? 555 ?
85 ? 857 ?
103 ? 905 ?
127 ? 953 ?
128 ? 1019 ?
133 ? 1023 ?
198 ? 1024 ?
227 ? 1040 ?
255 ? 27,625 ?
256 ? 21,5625 ?
258 ? 45,4375 ?
297 ? 3,1875 ?
323 ? 3,21875 ?
457 ? 19,23475 ?
506 ?
511 ?
512 ?

Ing. Martín Vernengo, 2020.


[email protected]
Conversión decimal a binario: ejercicios (soluciones)
Convertir de decimal a binario utilizando el método más conveniente, pero probar con
los dos métodos y comparar al menos en 5 casos a elección y limitando a 5 dígitos
binarios después de la coma como máximo:
29 00011101 ; 514 1000000010 ;
49 00110001 ; 555 1000101011 ;
85 01010101 ; 857 1101011001 ;
103 01100111 ; 905 1110001001 ;
127 01111111 ; 953 1110111001 ;
128 10000000 ; 1019 1111111011 ;
133 10000101 ; 1023 1111111111 ;
198 11000110 ; 1024 1000000000 ;
227 11100011 ; 1040 10000010000 ;
255 11111111 ; 27,625 11011,101 ;
256 100000000 ; 21,5625 10101,1001 ;
258 100000010 ;
45,4375 101101,0111 ;
297 100101001 ;
3,1875 11,0011 ;
323 101000011 ;
3,21875 11,00111 ;
457 111001001 ;
19,23475 10011,00111 ? ;
506 111111010 ;
511 111111111 ;
512 1000000000 ;
Ing. Martín Vernengo, 2020.
[email protected]
Números Octales y Hexadecimales

Si bien las computadoras realmente utilizan


numeración binaria, es muy útil conocer las
numeraciones con bases 8 y 16, ya que nos permiten a
los humanos visualizar más rápidamente (y
escribiendo menos también) los números binarios;

Ing. Martín Vernengo, 2020.


[email protected]
Números Octales: pasaje directo a binario
Primeramente analicemos los octales de la misma forma que hasta ahora:
,
… ( (
(
8 8 8( 8 8 8 8 8 8 8 8

donde los N pueden valer cualquiera de los 8 dígitos del 0 al 7 (pero nunca 8 ó mayor!
De hecho, NO NECESITO el dígito 8 en octal, como no se necesita el 2 en binario, ya que:
8 10 &
2 10
Con lo que en este caso general el número X representado en octal sería:
(
8 8 ⋯ (8 8 8 8
(
8 8 (8 … 8 8

Ojo! El 8 y el 9 NO
Ejemplo: , , PUEDEN ESTAR en un
número en octal !!!

Sin embargo, para pasar Binario Octal
de octal a binario, la 0 0 0 0
operación es mucho 0 0 1 1 127,4 & 1 2 7 , 4 &
más simple, pasando 0 1 0 2
cada dígito octal a 0 1 1 3
binario según la tabla: 1 0 0 4 127,4 001 010 111 , 100
&
1 0 1 5
1 1 0 6 Ejercicio - verifique que efectivamente:
1 1 1 7 001 010 111 , 0100 87,5
Ing. Martín Vernengo, 2020.
[email protected]
Conversión binario - octal: ejercicio resuelto
Realice el pasaje directo a octal para el siguiente número binario, realizando las
conversiones binario octal y binario decimal octal, verificando que coinciden:
110100,011 ? &;
Solución:

binario octal directo: binario decimal:


110 100 , 011 64,3 &. 110100,011 1 2" 1 2' 1 2 1 2 1 2 (

6 4 3 52,375
(
8 8 2" 2 2
Binario Octal
0 0 0 0 8 2' 2
0 0 1 1 decimal octal:
0 1 0 2 52,375 ? &
0 1 1 3 • Primer dígito: 7 8 56 O 52 ⇒ QR! 7 STUVWXVSY Z V[ST!
1 0 0 4
1 0 1 5 6 8 48 \ 52 ⇒ ]^, ?_` aícdef fgehi j
1 1 0 6 • Segundo dígito: 52,375 > 6 8 4,375 ⇒ kaf aícdef fgehi @
1 1 1 7
• Después de la coma: 4,375 > 4 0,375
4 8 '⁄ 0,5 O 0,375 ⇒ QR! 4 STUVWXVSY Z V[ST!
&

3 8 (⁄ 0,375 ⇒ ]^, ?_` aícdef fgehi


&
después de la coma m
⇒ 52,375 64,3 & ]^‼!
Ing. Martín Vernengo, 2020.
[email protected]
Conversión binario - octal: ejercicios
Realice el pasaje directo octal binario (tabla memorizada!) cuidando que no haya ceros de más
ni a la izquierda ni la derecha (es decir minimizando la cantidad de bits necesarios para representar el número), y
luego la conversión de binario decimal, vía cálculo con potencias de 2 (memorizadas):
67 &
? ? ; 11,43 & ? ? ;
516 & ? ? ; 262,55 & ? ? ;
761 ? ? ; 36,6 & ? ? ;
&
167,14 & ? ? ;
361 &
? ? ;
741,716 &
? ? ;
161 ? ? ;
& 57,002 &
? ? ;
2170 &
? ? ; 3617,524 ? ? ;
&
1201 & ? ? ;

Realice el pasaje directo a octal para los siguientes números binarios, pero elija 3 casos
donde realice la conversión binario decimal octal verificando que coinciden:
100110 ? ? ; 10100110 ? ? ;
101111010 ? ? ; 1001 ? ? ;
1100110 ? ? ;
111100001 ? ? ;
101110,1 ? ? ;
110001000001 ? ? ;
10111001,11 ? ? ;
111100110 ? ? ;
1011110010,10101 ? ? ;
10001 ? ? ;
10,011101001 ? ? ;
11010110 ? ? ;
Ing. Martín Vernengo, 2020.
[email protected]
Conversión binario - octal: ejercicios (soluciones)
Realice el pasaje directo octal binario (tabla memorizada!) cuidando que no haya ceros de más
ni a la izquierda ni la derecha (es decir minimizando la cantidad de bits necesarios para representar el número), y
luego la conversión de binario decimal, vía cálculo con potencias de 2 (memorizadas):
67 &
110111 55 ; 11,43 & 1001,100011 9,546875 ;
516 & 101001110 334 ; 262,55 & 10110010,101101 178,703125 ;
761 111110001 497 ; 36,6 & 11110,11 30,75 ;
&
167,14 & 1110111,0011 119,1875 ;
361 &
11110001 361 ;
741,716 &
111100001 , 11100111 481,90234375 ;
161 1110001 113 ;
& 57,002 &
101111 , 00000001 47,00390625 ;
2170 &
10001111000 1144 ; 3617,524 11110001111 , 1010101 1935,6640625 ;
&
1201 & 1010000001 641 ;

Realice el pasaje directo a octal para los siguientes números binarios, eligiendo 5 casos
donde realice la conversión binario decimal octal y verificando que coinciden:
100110 38 46 &; 10100110 166 246 & ;
101111010 378 572 & ; 1001 9 11 & ;
1100110 102 146 & ;
111100001 378 741 & ;
101110,1 46,5 56,4 & ;
110001000001 3137 6101 & ;
10111001,11 185,75 271,6 & ;
111100110 486 746 & ;
1011110010,10101 754,65625 1362,52 & ;
10001 17 21 & ;
10,011101001 2,455078125 2,351 & ;
11010110 214 326 & ;
Ing. Martín Vernengo, 2020.
[email protected]
Números Hexadecimales
Como vimos, los octales nos permiten “comprimir” la numeración binaria de “3 a 1”, es
decir cada 3 dígitos binarios tenemos un dígito octal.
,
En el sistema hexadecimal, la compresión es aún mayor: 4 a 1;
Esto es lo que se logra con la base 16:

… ( (
(
16 16 16( 16 16 16 16 16 16 16 16

Pero así como en decimal se requieren 10 dígitos del 0 al 9 en base 16 necesitamos igual cantidad de dígitos,
lo que nos obliga a utilizar LETRAS para los N : 0 al 9 y luego A, B, C, D, E, F para los dÍgitos del 10 al 15:
10 A # , 11 B # , 12 C # , 13 D # , 14 E # , 15 F #

Con lo que en este caso general el número X representado en hexadecimal sería:


(
16 16 ⋯ ( 16 16 16 16
(
16 16 ( 16 … 16 16

Ejemplo:
, ,

Ing. Martín Vernengo, 2020.
[email protected]
Números Hexadecimales: pasaje directo a binario
Utilizando una tabla de conversión similar a la ya vista para octal pero agrupando 4
dígitos binarios en lugar de 3, la conversión es inmediata:
Con octal habíamos visto que: 127,4 & 1 2 7 , 4 &

Binario Hexa
0 0 0 0 0
127,4 & 001 010 111 , 100
0 0 0 1 1
En hexadecimal, útilizando la tabla obtenemos: 0 0 1 0 2
0 0 1 1 3
B65F # B 6 5 F # 0 1 0 0 4
0 1 0 1 5
0 1 1 0 6
B65F # 1011 0110 0101 1111 0 1 1 1 7
Ejercicio – Pase a decimal el número de este ejemplo partiendo del 1 0 0 0 8
valor binario y verifique que es el mismo que el obtenido en la 1 0 0 1 9
página anterior, 46687 .
1 0 1 0 A
Otro ejemplo: 1 0 1 1 B
1 1 0 0 C
1 1 0 1 D
Ejercicio – Pase a decimal el número de este último ejemplo, tanto 1 1 1 0 E
partiendo del valor hexadecimal como del binario.
TWrsTWtV: 2v6w , x06 # 11371,93896484375 1 1 1 1 F
Ing. Martín Vernengo, 2020.
[email protected]
Conversión binario - hexa: ejercicios
Realice el pasaje directo hexadecimal binario (tabla memorizada!) decimal (elegir 5 casos
donde se haga la conversión directa de hexa a decimal y binario a decimal, comparando):
8A #
? ? ; 7C03 # ? ? ;
3C # ? ? ; 8,D3 # ? ? ;
ABE ? ? ; B2,55 # ? ? ;
#
21C, 18 # ? ? ;
1D8 ? ? ;
# 1E3C,E36 # ? ? ;
A4BD #
? ? ;

Realice el pasaje directo octal binario hexadecimal (sugerencia: reagrupe los bits de
grupos de 3 a grupos de 4):
67 ? ? #; 161 &
? ? #;
&
516 & ? ? #; 2170 ? ? #;
&
761 &
? ? #; 1201 & ? ? #;

361 ? ? #;
11,43 & ? ? #;
&

Realice el pasaje directo a binario hexadecimal (tabla memorizada) decimal (cálculo):


100110 ? # ? ; 10100110
? # ? ;
1100110 ? # ? ;
101111010 ? # ? ;
101110,1 ? # ? ;
111100001 ? # ? ;
10111001,11 ? # ? ;
110001000001 ? # ? ;
1011110010,10101 ? # ? ;
111100110 ? # ? 10,011101001 ? # ? ;
10001 ? # ? ;
11010110 ? # ? ;
Ing. Martín Vernengo, 2020.
[email protected]
Conversión binario - hexa: ejercicios (soluciones)
Realice el pasaje directo hexadecimal binario (tabla memorizada!) decimal (elegir 5 casos
donde se haga la conversión directa de hexa a decimal y binario a decimal, comparando):
8A #
10001010 138 ; 7C03 # 11111000011 31747 ;
3C # 111100 60 ; 8,D3 # 1000,11010011 8.82421875 ;
ABE 101010111110 2750 ; B2,55 # 10110010,01010101 178,33203125 ;
#
21C, 18 # 100011100,00011 540,09375 ;
1D8 111011000 472 ;
# 1E3C,E36 # 1111000111100,1110001111
A4BD #
1010010010111101 42173 ; 774,088818359375 ;

Realice el pasaje directo octal binario hexadecimal (sugerencia: reagrupe los bits de
grupos de 3 a grupos de 4):
67 110111 37 #; 161 &
1110001 71 #;
&
516 & 101001110 14E #; 2170 10001111000 478 #;
&
761 &
111110001 1F1 #; 1201 & 1010000001 281 # ;
361 11110001 F1 #;
11,43 & 1001,100011 9,8C #;
&

Realice el pasaje directo a binario hexadecimal (tabla memorizada) decimal (cálculo):


100110 26 # 38 ; 10100110 A6 # 166 ;
1100110 66 # 202
101111010 17A # 378 ;
101110,1 2E,8 # 46,5 ;
111100001 1E1 # 481 ;
10111001,11 B9, C # 185,75 ;
110001000001 C41 # 3137 ;
1011110010,10101 2F2,A8 # 754,65625 ;
111100110 1E6 # 486 ; 10,011101001 2,748 2,455078125 ;
#
10001 11 # 17 ;
11010110 D6 # 214 ;
Ing. Martín Vernengo, 2020.
[email protected]
Formato BCD (Binary Coded Decimal)
No debe confundirse este formato con un sistema numérico más, como sí lo son el
decimal, el decimal, binario, octal, hexadecimal u otros que se pueden definir;
El BCD es una forma de codificación BINARIA del sistema de numeración DECIMAL, de
manera que una computadora digital pueda representar internamente los números
para su presentación en forma “amigable” para los humanos;
Un número binario de n bits permite representar 2 números:
Del 00 … 000 al 11 … 111 2 -1, son 2 pues son 2 x 2 x … x 2 combinaciones;
n bits n bits n decisiones de 0 ó 1
(2 posibilidades cada una).

En el sistema BCD, utilizamos n = 4 bits para Dígito


representar solamente 10 de las 2' = 16 Símbolo
posibilidades (que de hecho en hexadecimal Decimal BCD
van del 0, 1, …, 8, 9, A, B, C, D, F);
Cuando se desea representar un número
decimal de más de un dígito, simplemente se
ubican 4 dígitos BCD por cada dígito decimal:

Como se puede apreciar, el formato BCD es


mucho menos eficiente que el sistema binario
en términos de cantidad de bits (en este
ejemplo se requieren 12 bits para representar
lo que en binario alcanza con 8).
Ing. Martín Vernengo, 2020.
[email protected]
Otros formatos BCD
A partir del formato BCD clásico (página anterior), también denominado “BCD 8421”
pues éstos son los pesos de los 4 bits utilizados, en los inicios de la computación y
sobretodo de las primeras calculadoras electrónicas se crearon formatos alternativos;

El objetivo de estos formatos era permitir que las calculadoras electrónicas realizaran
operaciones de suma y resta de una manera más eficiente, debido a que como se
puede observar tanto en el código “Exceso 3” (XS-3) como el Aiken 2421, todos los
números que en decimal suman 9 tienen los bits 1 y 0 intercambiados;
Aquí no explicaremos el motivo, pero esto termina facilitando las operaciones cuando se
realizan directamente en BCD y no en binario como haremos en las próximas páginas.
Ing. Martín Vernengo, 2020.
[email protected]
Resumen: comparación decimal, binario, octal, hexa, BCD
Para representar números del 0 al 15 decimal:

Decimal Binario Octal Hexadecimal BCD (8421)

Ing. Martín Vernengo, 2020.


[email protected]
Cómo representar caracteres con binarios: Códigos ASCII
ASCII = “American Standard Code for Information Interchange”, y se lee “aski”;
No es el único estándar para representación de caracteres (el otro también importante históricamente ha sido
el “EBCDIC”, pronunciado “ebkidik” y que usaban los primeros “mainframes” de IBM );
El ASCII un código de 7 bits (en la tabla abajo indicados como w% w# w" w' w( w w , con los 3 más significativos
en las columnas y los 4 menos significativos en las filas, con el carácter representado en la intersección);
Como las computadoras normalmente manejan 8 bits, se agrega el bit más significativo en 0, pero con la
posibilidad de ponerlo en 1 para indicar otros códigos adicionales no previstos en el ASCII estándar, por
ejemplo: las letras griegas o las letras con acentos;

Ing. Martín Vernengo, 2020.


[email protected]
Ejercicios de codificación con ASCII
Como ejemplo vemos que letra “A” es el 100 0001 41 # 65 ;
Ejercicios – verifique con la tabla los siguientes códigos hexa y páselos a decimal:
Las letras mayúsculas van de la “A” = 41 # a la “Z” = 5 # ;
Las letras minúsculas van de la “a” = 61 # a la “Z” = 7 # ;
Los caracteres para dígitos decimales que van del 0 al 9 tienen códigos del 30 # al 39 #;

Ing. Martín Vernengo, 2020.


[email protected]
Caracteres ASCII de control
Los caracteres en las columnas con w% w# w" = 000 y 001 no se imprimen directamente sino
que generan un comportamiento específico durante la impresión (impresora/ pantalla);
Ejemplos destacados (Ejercicio: verifique los códigos abajo indicados según la tabla):
CR = 0D # 13 = “Carriage Return”, “el carro de impresora retorna a primer columna (pantalla)”;
LF = 0A # 10 = “Line Feed”, “avanzar una línea de la impresora (pantalla)”;
SP = 20 # 32 = = “SPace”, espacio en blanco, impresora o cursor saltea una posición (= control);

Ing. Martín Vernengo, 2020.


[email protected]
Caracteres ASCII de control (Listado)
Existen además otros caracteres para manejar la información, por ejemplo dentro de
archivos (= información normalmente almacenada magnéticamente), ejemplo: FS;
También existen caracteres para transmisión de información en forma de texto entre dos
puntos (Ejemplo: STX, ETX).

Ing. Martín Vernengo, 2020.


[email protected]
Código ASCII y su extensión con UNICODE
El código ASCII se ideó para representar caracteres solamente utilizados en el idioma
inglés, pero a medida que fueron pasando los años se visualizó la necesidad de contar con
un código de más de 1 byte que permitiera satisfacer las necesidades globales;
El código utilza tanto com 4 bytes (32 bits);
Los primeros 128 códigos correspondientes a los 7 bits de ASCII coinciden con el propio
ASCII en Unicode, se los indica como U+0000 0000 al U+0000 007F, ya que 7F en hexa son
7 bits en 1, es decir están cubiertas todas las combinaciones de ASCII.
Para el código conocido como UTF-32 se usan siempre 32 bits fijos, en cambio los códigos
UTF-8 y UTF-16 utilizan longitud variable de 8 a 32 y 16 a 32 bits respectivamente;
Para los códigos hexa por arriba del 0000 007F, la longitud del código es variable, pudiendo utilizarse la
siguiente tabla para entender la longitud que queda definida (caso UTF-8).
Por ejemplo: en la segunda línea de la tabla, vemos que la cantidad de bits realmente utilizados para código
son 11, ya que 7FF # 111 1111 1111 , pero que se utilizan 2 bytes donde los tres bits más significativos
del byte más significativo valen 110 y los dos bits más significativos del byte menos significativo valen 10 (esto
permite identificar a la computadora que recibe el código qué estamos en la segunda fila de la tabla) y luego los
11 bits indicados con “x” son los que llevan el código del carácter propiamente dicho.

Ing. Martín Vernengo, 2020.


[email protected]
Transmisión Serie y Paralelo – Bit de Paridad
En la figura se indican las dos modalidades de intercambio o transmisión de bits;
Siempre que posible, es mejor realizar la
transmisión paralelo, ya que evidentemente se
realiza mucho más rápidamente al realizarse en
forma simultánea; TRANSMISIÓN
Ejemplo: dentro de una CPU, donde el conjunto de bits PARALELO
transmitidos en paralelo se conoce como “bus” de datos;
Otro ejemplo: cables muy cortos como los antiguamente
utilizados entre computadora e impresora antes de la
generalización del USB (“S” = “Serial”).

Sin embargo, a veces no es posible realizarla ya


que se complica el encaminamiento línea por
línea largas distancia, el costo de los cables e
incluso por la interferencia electromagnética de
TRANSMISIÓN
líneas adyacentes que genera errores;
SERIE
Justamente para solucionar el problema de los
errores, una de las muchas técnicas es el “bit de
paridad”:
BYTE A TRANSMITIR BYTE TRANSMITIDO
ANTES DE AGREGAR PARIDAD CON PARIDAD PAR CON PARIDAD IMPAR

Ing. Martín Vernengo, 2020.


[email protected]
Sumas decimal, binaria, octal, hexa… (comparadas)
Esta sección es MUY importante para poder luego más adelante entender cómo funciona
la ALU (Unidad Aritmético Lógica en su sigla en inglés) de una CPU;
Los ejemplos abajo muestran operaciones de suma decimales y sus correspondientes
binarias, donde el “carry” sería el término en inglés para el “me llevo 1”:
Decimal Binario Octal Hexa
"Carry" 1 0 0 0 0 1 0 0 0 0 0
Sumando 1: 1 3 1 1 0 1 1 5 D
Sumando 2: + 1 7 + 1 0 0 0 1 + 2 1 + 1 1
Resultado: 3 0 1 1 1 1 0 3 6 1 E

3 7 10 1 1 2 10
D 1 # 0E #

5 1 & 06 &

Decimal Binario Octal Hexa


"Carry" 1 0 1 1 1 1 1 0 1 0 1 0
Sumando 1: 3 1 1 1 1 1 1 3 7 1 F
Sumando 2: + 1 9 + 0 1 0 0 1 1 + 2 3 + 1 3
Resultado: 5 0 1 1 0 0 1 0 6 2 3 2

1 1 2 10 F 3 15+3
1 9 10 #
1 1 1 3 11 16+2 12 #
Ing. Martín Vernengo, 2020.
[email protected] 7 3 & 10 12 &
Suma binaria – Ejercicios
Partiendo de la suma planteada en decimal, realizarla y luego pasando los sumandos a
binario, realizar la suma en ese sistema, convirtiendo el resultado primero a hexadecimal y
luego a decimal nuevamente (para verificar el primer resultado).
Resuelto:
Decimal Binario
"Carry" 0 1 0 1 1 1 1 1 1 0 0
Sumando 1: 1 0 6 = 64 + 32 + 8 + 2 1 1 0 1 0 1 0
Sumando 2: + 5 5 = 32 + 16 + 4 + 2 + 1 + 1 1 0 1 1 1
Resultado decimal: 1 6 1 Resultado binario: 1 0 1 0 0 0 0 1
hexa: A 1
decimal (verif.): = 10 x 16 + 1 = 161
Resolver:
Decimal Binario
"Carry"
Sumando 1: 1 3 7
Sumando 2: + 7 5 +
Resultado decimal: Resultado binario:
hexa:
decimal (verif.): =
Decimal Binario
"Carry"
Sumando 1: 1 8 5
Sumando 2: + 9 9 +
Resultado decimal: Resultado binario:
hexa:
Ing. Martín Vernengo, 2020. decimal (verif.): =
[email protected]
Suma binaria – más ejercicios
Decimal Binario
"Carry"
Sumando 1: 1 4 5
Sumando 2: + 1 2 3 +
Resultado decimal: Resultado binario:
hexa:
decimal (verif.): =

Decimal Binario
"Carry"
Sumando 1: 1 5 7
Sumando 2: + 3 3 +
Resultado decimal: Resultado binario:
hexa:
decimal (verif.): =

Decimal Binario
"Carry"
Sumando 1: 3 3 4
Sumando 2: + 2 2 5 +
Resultado decimal: Resultado binario:
hexa:
Ing. Martín Vernengo, 2020.
decimal (verif.): =
[email protected]
Números binaros negativos
Hasta aquí hemos visto números binarios de diferentes cantidades de dígitos, llamemos
“n” a esa cantidad y veamos algunos ejemplos:
[ 2: [ 4: [ 6: [ 8: [ 16:
10 0110 010110 01010110 0101101101010110

Ahora bien, en cada CPU en particular, hay una cantidad máxima de bits n almacenados en
cada posición de memoria, que se conoce como “palabra de memoria”; típicamente
cuando n = 8 bits esa palabra de memoria recibe el nombre de “octeto” o “byte”;
En este contexto, si quisiéramos efectuar una resta dentro de la ALU, la metodología sería
definir números negativos binarios que pudieran ser representados también con n bits;
Y luego, una resta como X-Y no sería otra cosa que sumar un negativo: X + (-Y);
[ 2: [ 4: [ 6: [ 8: [ 16:
>10 >0110 >010110 >01010110 >0101101101010110
Sin embargo, el signo menos implica tener un tercer símbolo a almacenar en la CPU;
Y dentro de una CPU sólo tenemos 2 símbolos, el 0 y el 1, no existe posibilidad de un tercero;

Entonces, se decidió que para representar un número negativo es el bit más significativo
del mismo debe valer 1. Es así que para n = 8 bits:
{1010110 sería considerado positivo y ?1111001 sería considerado negativo;
No obstante, la representación de un número negativo –X a partir de un número positivo
X no se hace de ninguna manera poniendo simplemente el bit más significativo en 1:
|W ST}X , rY T~TUr•Y: >00111010 € 10111010
Ing. Martín Vernengo, 2020.
[email protected]
“Complemento a 1” de un número binario
La razón por la que un “número binario negativo” no puede ser simplemente obtenido
cambiando a 1 el bit más significativo es que justamente para que funcione como
negativo debe cumplirse que la suma con su opuesto dé cero, concretamente:
> 0
Y en el ejemplo de la página anterior, esto vemos que claramente no ocurre:
"Carry" 0 0 1 1 1 0 1 0 0
X = 0 0 1 1 1 0 1 0
-X = + 1 0 1 1 1 0 1 0
X + (-X ) 0 1 1 1 1 0 1 0 0
descartado pues la palabra de 8 bits OK pero € 0
memoria tiene longitud 8 y no mayor!

Para poder definir a partir de un número cualquiera otro > tal que sumado al primero
dé cero es que definimos primeramente el “complemento 1” de :
Complemento a 1 de •: ‚? • kƒ > ? > •;
Por ejemplo, para el número del ejemplo de arriba: 00111010 3A #
3 16 10 58 , y ya que n = 8, el complemento a 1 sería:
v 2 >1> 2& > 1 > 58 256 > 1 > 58 197
128 64 4 1 11000101
Ing. Martín Vernengo, 2020.
[email protected]
Obtención del “Complemento a 1”
Comparemos al número de la página anterior y a su complemento a 1 bit a bit:
00111010
v 11000101
Conclusión: el complemento a 1 se obtiene invirtiendo todos los bits del número original
(de ahí el nombre complemento a 1), lo que ya vimos que se corresponde con la
compuerta NOT que definimos durante la Introducción;
Este resultado es lógico ya que 2 > 1 = 2& > 1 255 11111111 ;
Por lo tanto restar de un número con todos sus bits en 1 al número , es decir al
calcular v 2 > 1 > estaremos intercambiando 1s con 0s;
De esta manera, para obtener el complemento a 1 de un número, simplemente lo que
tenemos que hacer es aplicar una “operación NOT bit a bit” sobre , lo que ya vimos que
se puede realizar con un solo transistor de la computadora:
Con lo que podremos escribir:
v 2 >1> NOT X R +
5V

= 1
0
0
1

Entrada = 1 bit de :
5 Volt = “1”
0 Volt = “0” Salida = 1 bit de v :
0 Volt = “0”
Ing. Martín Vernengo, 2020. 5 Volt = “1”
[email protected]
Del “Complemento a 1” al “Complemento a 2”
Pero la pregunta que nos queda es: será el “complemento a 1” el número “negativo”
que buscamos, es decir aquél que cumple que > 0 ? Veamos:
"Carry" 0 0 0 0 0 0 0 0 0
X = 0 0 1 1 1 0 1 0
NOT(X ) = + 1 1 0 0 0 1 0 1
X + (-X ) 1 1 1 1 1 1 1 1

El resultado no es nulo, pero tampoco esto es para nada sorprendente, debido a la


propia definición que hicimos de complemento a 1: n
v 2 > 1 > ⇒ v X 2 >1 1111 … . . 1

Sin embargo, si definimos “Complemento a 2” como:


v 2 > v 1 ⇒ v X 2 1 00000 … . . 0

descartado pues la palabra de


n bits en cero!!!
memoria tiene longitud n y no mayor!

⇒ Vemos que hemos logrado que los primeros n bits sean nulos y aunque quedó
un bit final no nulo, éste puede ser descartado ya que si se lo tuviera en cuenta,
el tamaño del número obtenido sería n+1 y excedería el tamaño de la palabra de
memoria (por ejemplo sería de 9 bits que es mayor que un byte).
Por lo tanto el Complemento a 2 es el número
Ing. Martín Vernengo, 2020.
[email protected]
binario negativo que estábamos buscando!
Resta de binarios con suma del “Complemento a 2”
En el siguiente ejemplo, restamos 19 de 21 en decimal y en binario, luego realizando la
misma operación mediante la suma del complemento a 2 de 19, suponiendo n = 6:
Así como el “Carry” debe interpretarse como “me llevo 1”, el “Borrow” se interpreta
como “le pido 1”, que se le resta al dígito a la izquierda del que “pide”;
Decimal Binario: n = 6 Binario: n = 6
"Borrow" 0 1 0 0 0 0 0 1 0 0 "Carry" 1 1 1 1 0 1 0
Minuendo: 2 1 0 1 0 1 0 1 0 1 0 1 0 1
6
Sustraendo: - 1 9 - 0 1 0 0 1 1 C2(19) = 2 -19 = 45 = 2D hex + 1 0 1 1 0 1
Diferencia: 0 2 0 0 0 0 1 0 1 0 0 0 0 1 0
Carry final descartado pues la palabra Bit más significativo nulo
memoria tiene longitud n = 6 y no 7! Indica que el resultado es positivo
En el ejemplo anterior el minuendo es mayor que el sustraendo y el resultado debe
interpretarse como positivo; ¿Y si ocurre lo inverso y restamos 21 de 19? Veamos:
Binario: n = 6
"Carry" 0 0 0 0 1 1 0
0 1 0 0 1 1
6
C2(21) = 2 -21 = 43 = 2B hex + 1 0 1 0 1 1
0 1 1 1 1 1 0
Carry final nulo confirma que Bit más significativo = 1
El resultado es negativo Indica que el resultado es negativo
El resultado es el correcto ya que:
Resultado 111110 3E # 3 16 14 62 2# > 2 v 2 -2
Ing. Martín Vernengo, 2020.
[email protected]
Ing. Martín Vernengo, 2020.

Procedimiento para la resta de binarios [email protected]

Ya vimos cómo es posible realizar una sustracción en binario a través del complemento a 2
del sustraendo, pero para poder hacerlo en una computadora es necesario que haya una
manera simple de obtener ese complemento.
La respuesta es que esto es muy fácil de lograr a partir del “Complemento a 1” (que ya
vimos que se obtiene con un simple intercambio de bits 1 por 0;
Y ya vimos que v 2 > v 1 , por lo tanto para realizar la resta
>• >• necesitamos simplemente un sumador binario (que ya veremos cómo
diseñar en su momento…) y un inversor de bits (NOT), realizando los siguientes pasos:
1. Invertir todos bits de • para obtener v • NOT • ;
2. Sumar 1 al “complemento a 1” de • para obtener v • v • 1;
3. Realizar la suma v • ;
4. Si el resultado tiene su bit más significativo en 0, es el resultado final positivo pues O •;
5. Si el resultado tiene su bit más significativo en 1, es porque \ •, entonces se debe obtener el
valor positivo correspondiente (agregándole el signo menos al “mostrar en pantalla”) con la
misma operación que se hizo anteriormente:
v TWs•tVSY v TWs•tVSY 1 NOT TWs•tVSY 1;
La implementación en hardware de este procedimiento se verá cuando veamos el tema
de circuitos combinacionales, pero para entenderlo es importante primero ejercitar con
cálculos hechos “por humanos”;
Veamos dos ejemplos en las próximas páginas.
Ing. Martín Vernengo, 2020.
[email protected]
Procedimiento para resta de binarios (Ejemplo 1)
Decimal
Ejercicio – realizar la siguiente resta decimal "Borrow" 0 1 0
en binario, por el procedimiento de “suma Minuendo: 1 1 4
del complemento a 2 del sustraendo”:
Sustraendo: - 9 5 •
Solución: Diferencia: 0 1 9
Primero pasamos minuendo y sustraendo a binario:
• 95 64 + 16 + 8 + 4 + 2 + 1= 01011111 ; 114 64 + 32 + 16 +2 = 01110010 ;

Pasos: NOT

1. Invertir todos bits de • para obtener v • : 3. Realizar la suma v • ;


v • NOT • 10100000 ; Binario: n = 8
"Carry" 1 1 1 0 0 0 0 0 0
2. Sumar 1 al “complemento a 1” de •para obtener
v • =v • 1; 0 1 1 1 0 0 1 0
v • + 1 0 1 0 0 0 0 1
Binario: n = 8 1 0 0 0 1 0 0 1 1
"Carry" 0 0 0 0 0 0 0 0 hexa: 1 3
MSB, bit
v • NOT • 1 0 1 0 0 0 0 0 +significativo = 1 x 16 + 3 = 19 OK
+ 0 0 0 0 0 0 0 1
4. Si el resultado tiene su bit más
v • v • 1 1 0 1 0 0 0 0 1 significativo en 0 (SÍ!) , es el resultado
hexa: A 1 final positivo pues O •;
19
= 10 x 16 + 1 = 161
Resultado ?{{{?{{??
Verificación: v 95 2& >
95 Bit +significativo nulo,
256 > 95 161 OK! Carry descartado (n = 8) OK, X = 114 > 95 = Y
Ing. Martín Vernengo, 2020.
[email protected] porque sería el bit 9
Procedimiento para resta de binarios (Ejemplo 2)
Ahora realizamos el mismo ejercicio invirtiendo minuendo con sustraendo, con lo que
tendría que darnos un resultado igual al anterior pero negativo:
95, • 114 ⇒ > • >19 v 19 2& > 19 237
Solución:
Partimos nuevamente de los operandos en binario:
• 114 64 + 32 + 16 +2 = 01110010 ; 95 64 + 16 + 8 + 4 + 2 + 1= 01011111 ;

Pasos: NOT

1. Invertir todos bits de • para obtener v • : 3. Realizar la suma v • ;


v • NOT • 10001101 ; Binario: n = 8
"Carry" 0 0 0 1 1 1 1 0 0
2. Sumar 1 al “complemento a 1” de •para obtener
v • =v • 1; 0 1 0 1 1 1 1 1
v • + 1 0 0 0 1 1 1 0
Binario: n = 8 0 1 1 1 0 1 1 0 1
"Carry" 0 0 0 0 0 0 1 0 hexa: E D
MSB, bit
8
v • NOT • 1 0 0 0 1 1 0 1 +significativo = 14 x 16 + 13 = 237 = 2 -19 OK
+ 0 0 0 0 0 0 0 1 4. Si el resultado tiene su bit más
v • v • 1 1 0 0 0 1 1 1 0 significativo en 0… NO!;
hexa: 8 E 5. Si el resultado tiene su bit más
significativo en 1 (SÍ!), es porque \•
= 8 x 16 + 14 = 142
>19 2& > 19
Verificación: v 114 2& > 114 Resultado {???{??{?
256 > 114 142 OK!
Carry descartado (n = 8) Bit +significativo = 1,
Ing. Martín Vernengo, 2020.
[email protected] porque sería el bit 9 X = 95 < 114 = Y
Ejercicio: resta con resultado > 0
Realice la operación 81 – 25 en binario utilizando la suma con el complemento a 2 de 25.
Decimal
"Borrow" 0 1 0 Pasaje a binario de Minuendo:
Minuendo: 0 8 1 =
Sustraendo: - 2 5 C2 (25) =
Diferencia: 0 5 6
25 = Cálculo Complemento a 2 del Sustraendo:
Pasaje a Binario Sustraendo: "Carry"
25 bin = NOT(25)=
+ 0 0 0 0 0 0 0 1
C2(25) =
hexa:
= x 16 + =

Suma Minuendo + Complemento a 2 Sustraendo:


"Carry"

+
binario:
hexa:
decimal (verif.): = x 16 + =
Ing. Martín Vernengo, 2020.
[email protected]
Ing. Martín Vernengo, 2020.

Ejercicio: resta con resultado > 0 (solución) [email protected]

Realice la operación 81 – 25 en binario utilizando la suma con el complemento a 2 de 25.


Decimal
"Borrow" 0 1Pasaje a binario de Minuendo:
0
Minuendo: 0 8 1 = 64 +16 + 1
8
Sustraendo: - 2 5 C2 (25) = 2 -25 = 231 = 128 + 64 + 32 + 4 + 2 + 1
Diferencia: 0 5 6

Suma Minuendo + Complemento a 2 Sustraendo:


"Carry" 1 1 0 0 0 1 1 1 0
0 1 0 1 0 0 0 1
+ 1 1 1 0 0 1 1 1
binario: 1 0 0 1 1 1 0 0 0
hexa: 3 8
decimal (verif.): = 3 x 16 + 8 = 56 OK
Ing. Martín Vernengo, 2020.
[email protected]
Ing. Martín Vernengo, 2020.

Ejercicio: resta con resultado < 0 [email protected]

Realice la operación 25 – 81 en binario utilizando la suma con el complemento a 2 de 81.


Decimal
"Borrow" Pasaje a binario:
Minuendo: 2 5 =
Sustraendo: - 8 1 C2 (81) =
Diferencia: - 0 5 6
81 = Cálculo Complemento a 2 del Sustraendo:
Pasaje a Binario Sustraendo: "Carry"
81 bin = NOT(81)=
+ 0 0 0 0 0 0 0 1
C2(81) =
hexa:
= x 16 + =

Suma Minuendo + Complemento a 2 Sustraendo:


"Carry"

+
binario:
hexa:
Ing. Martín Vernengo, 2020.
decimal (verif.): = x 16 + =
[email protected]
Ing. Martín Vernengo, 2020.

Ejercicio: resta con resultado < 0 (solución) [email protected]

Realice la operación 81 – 25 en binario utilizando la suma con el complemento a 2 de 25.


Decimal
"Borrow" Pasaje a binario de Minuendo:
Minuendo: 2 5 25 = 16 + 8 + 1
8
Sustraendo: - 8 1 C2 (81) = 2 -81 = 175 = 128 + 32 + 8 + 4 + 2 + 1
Diferencia: - 0 5 6
81 = 64 +16 + 1 Cálculo Complemento a 2 del Sustraendo:
Pasaje a Binario Sustraendo: "Carry" 0 0 0 0 0 0 0 0
81 bin = 0 1 0 1 0 0 0 1 NOT(81)= 1 0 1 0 1 1 1 0
+ 0 0 0 0 0 0 0 1
1 0 1 0 1 1 1 1
hexa: A F
= 10 x 16 + 15 = 175
8
C2(81) = 2 -81 = 175 OK

Suma Minuendo + Complemento a 2 Sustraendo:


"Carry" 0 0 1 1 1 1 1 1 0
0 0 0 1 1 0 0 1
+ 1 0 1 0 1 1 1 1
binario: 0 1 1 0 0 1 0 0 0
hexa: C 8
8
Ing. Martín Vernengo, 2020. decimal (verif.): = 12 x 16 + 8 = 200 = 2 -56 OK
[email protected]
Ing. Martín Vernengo, 2020.

Binarios “con signo” y “sin signo” [email protected]

El caso típico de análisis para este tema lo hacemos para n = 8, o sea un byte, pero será
completamente análogo de acuerdo al tamaño de “palabra de memoria” considerado;
Como vimos en todos los ejemplos anteriores, hemos considerado que si el bit más
significativo del byte (= 27) vale 1, el número representado será negativo;
En este supuesto, el número positivo más grande que se puede representar con 8 bits es aquél
que tiene todos sus bits en 1 excepto el más significativo: 01111111 = 127 ;
Este hecho implica que hay 128 números “no negativos” representables con un byte, contando
además de los 127 números positivos el cero = 00000000 ;
Pero como con un byte son 8 bits, tenemos un total de 28 = 256 números posibles de
representar, lo cuál nos deja 256 – 128 = 128 números negativos posibles: del -1 al -128;
Teniendo en cuenta el método del “complemento a 2” deberá ser:
-1 = v 1 = 256 – 1 = 255 = 11111111 ;
-2 = v 2 = 256 – 2 = 254 = 11111110 ;
-3 = v 3 = 256 – 3 = 253 = 11111101 ;

-128 = v 128 = 256 – 128 = 128 = 10000000 ;
(es decir, el -128 es el como si fuera un “cero negativo”: esto explica por qué hay un número negativo más que
los positivos , debido a que la combinación con 7 bits nulos ya está utilizada para el 0 en los “no negativos”).

Pero ¿qué pasa si por algún motivo sabemos que NO VAMOS A UTILIZAR NÚMEROS
NEGATIVOS? ¿No sería un desperdicio de bits no poder utilizar las 256 combinaciones de
un binario de 8 bits? Respuesta: un rotundo sí!
Es por ello que un byte se puede definir CON y SIN signo:
Si es SIN signo, sirve para representar 256 números del 0 al 255;
Y si es CON signo, para representar también 256 números pero desde -128 al +127.
Ing. Martín Vernengo, 2020.
[email protected]
Binarios “con signo” y “sin signo”: ejercicio
Complete el rango de números positivos y negativos representables con palabras
definidas con y sin signo para cada cantidad de bits por palabra (se presenta la solución
para 16 bits, debe demostrarse los valores correspondientes):

Bits por
Sin Signo Con Signo
Palabra:
n= De Hasta De Hasta
2
4
8 0 255 -128 127
12
16 0 65535 -32768 32767
20
24
32
48
64

Ing. Martín Vernengo, 2020.


[email protected]
Ing. Martín Vernengo, 2020.

Cómo implementar sumadores binarios (adelanto) [email protected]

Volvemos a la suma binaria y lo que buscamos aquí es plantear lo que luego


desarrollaremos en la sección de lógica combinacional: qué sería necesario para poder
implementar una suma con un circuito, un hardware de computadora;
En definitiva, qué función debe cumplir el “sumador de una ALU”;
Tomemos por ejemplo la entradas salidas
siguiente suma binaria, Ak Bk Ck S k C k+1
que escribimos de una 0 0 0 0 0
manera un poco diferente Carry IN = ‚m ‚k ‚ ? ‚{
0 1 0 1 0
hasta lo realizado hasta 1 0 0 1 0 Sumando A = Km Kk K ? K{
ahora, haciendo énfasis Sumando B = Žm Žk Ž ? Ž{
en los “me llevo 1”, los 1 1 0 0 1
“Carry” generados por la 0 0 1 1 0 Resultado S = Lm Lk L ? L{
suma de cada dígito: 0 1 1 0 1
1 0 1 0 1 Carry OUT = ‚@ ‚m ‚ k ‚?
1 1 1 1 1
Para poder efectuar la suma
necesitamos contar con un
SUMADOR 4 BITS
“sumador por dígito” que
en la figura abajo está
indicado por “FA” (= “Full
Adder”), que debe cumplir
cada uno con la tabla de
“entradas” y “salidas” que
se indica arriba.

Ya veremos cómo construir un hardware que permita realizar esta “suma bit a bit”, pero remarcamos
aquí el mecanismo de “carry”, que replica lo realizado en una suma realizada manualmente.
Ing. Martín Vernengo, 2020.
[email protected]
Multiplicación y división por 10 en decimal (repaso)
Todos sabemos que en el sistema decimal, multiplicar/dividir por 10 equivale a
“agregar/quitar un 0 a la derecha”…
…o con más rigor correr la coma una posición a la derecha o la izquierda:
302,05 10 3020,5 4172 • 10 417,2
Esta operación se puede justificar en base a una simple cuestión algebraica:
10 ⋯ 10 10 10 10 ⋯ 10

⇒ 10 10 10 ⋯ 10 10 10 10 ⋯ 10 0

10.10N = 10N

⇒ 10 10 10 … 10 10 10 10 … 10 0 10

Por lo que vemos que hay un desplazamiento a la izquierda/derecha de todos los dígitos
en bloque al multiplicar/dividir por 10:
10 10 10 10 10 10 10 10 10 10
0 …
, ( …

0

?{ ?{ • ?{ • ?{

0 …
, ( ' …

0
10 10 10 10 10 10 10 10 10 10
Ing. Martín Vernengo, 2020.
[email protected]
Multiplicación y división por la base numérica “r”
Para una base numérica r = 2, 8, 16, etc. Cualquiera ocurre exactamente lo mismo que al
multiplicar por r = 10:
⋯ ⋯

⇒ ⋯ ⋯ 0

. N = N

⇒ … … 0

Por lo que vemos que hay un desplazamiento a la izquierda/derecha de todos los dígitos
en bloque al multiplicar/dividir por 10:

0 …
, ( …

0

• •
•• ••

0 …
, ( ' …

0

La conclusión es que en el caso de multiplicación y división por la base numérica y en


particular por 2 en el caso binario, la operación es muy simple: desplazamiento de bits.
Ing. Martín Vernengo, 2020.
[email protected]
Multiplicación binaria
La consecuencia es que la multiplicación binaria es absolutamente análoga de decimal
que aprendemos en la primaria: a medida que vamos multiplicando por cifras de mayor
orden del multiplicador, desplazamos hacia la izquierda el resultado:
Multiplicando:
Multiplicador:

Producto:
Ejercicio – Para las siguientes operaciones planteadas en decimal, convierta los
operandos a binario, multiplique en este último sistema numérico y convierta de nuevo
el resultado a decimal confirmando que el valor es correcto:
18 3 ? ? ? ? ;
18 4 ? ? ? ? ;
27 6 ? ? ? ? ;
36 7 ? ? ? ? ;
Ing. Martín Vernengo, 2020.
[email protected]
Qué necesitamos para una multiplicación binaria
Evidentemente, para realizar una multiplicación
binaria, dado que para ser realizada
manualmente implica la combinación de sumas
con multiplicaciones por 2, también para ser
realizada automáticamente por la ALU de una
CPU digital, requerirá estas dos funciones:
Por lo tanto, necesitaremos implementar
básicamente dos tipos de bloques:
Los “Full Adders” o
“sumadores bit a bit”
interconectados como ya se
explicó en páginas previas y
con la tabla de entradas y
salidas que permite sumar bit
a bit y generar los “carry”;

Un dispositivo conocido como “Shift Register” o “Registro de Desplazamiento” que nos


permitirá hacer que un número almacenado en un “registro” (que es lo mismo que se decir
“posición de memoria”) tenga sus bits desplazados a la izquierda según se lo desee:
DATOS ENTRADA

DESPLAZAR IZQUIERDA
CARGAR DATOS ENTRADA … (

Ing. Martín Vernengo, 2020. DATOS SALIDA


[email protected]
Formato “floating point” (punto flotante): necesidad
Hasta aquí vimos cómo se realizan manualmente las operaciones más importantes en la
ALU (Unidad Aritmético Lógica) de una CPU, con excepción de la división, e incluso
pudimos plantear a un nivel general de “diagrama en bloques” qué tipo de circuitos o
hardware se requeriría para realizar dichas operaciones;
Como ya se dijo, el detalle de cómo realizarlo a nivel de bit lo veremos en la sección
de Lógica Combinacional y Secuencial;
Sin embargo, tenemos todavía el problema siguiente: cómo realizar operaciones entre
números que pueden tener un rango de variación mucho más amplio de lo que nos
permite el tamaño de la palabra (cantidad de dígitos).
Ejemplo: tenemos un sistema con palabra de n = 16 bits, lo que como ya vimos nos
permitiría representar números hasta el 65535 ó 32767 según que se utilice un esquema
sin o con signo respectivamente. Imaginemos que nos piden realizar un programa que
lleve la cuenta de la cantidad de unidades vendidas por un producto de una gran
empresa a lo largo de un año como asimismo la facturación obtenida: evidentemente no
nos alcanzarían 16 bits para la cantidad de productos y con respecto a la facturación no
podríamos utilizar sólo números enteros, ya que nos vemos obligados a tomar en cuenta
los centavos.
Solución (?): aumentar el tamaño de la palabra de 16 a 32 bits? Y si no alcanza? La
aumentamos a 48 o 64 bits? No parece razonable. Esto nos exigiría construir ALU’s muy
costosas, por los tamaños de los “Full Adders” y “Shift Register” crecientes.

Ing. Martín Vernengo, 2020.


[email protected]
La notación científica decimal - repaso
Para entender cómo funciona el formato floating point primero es conveniente repasar
la utilización de la llamada “notación científica” para expresar números en decimal;
En definitiva, el formato floating point es una forma de escribir números con notación
científica pero OJO, EN BINARIO!!!
Por ende, lo que sigue es un EJEMPLO, y debe quedar bien claro que para pasar un número
binario a formato floating point nunca se debe partir del número decimal expresado en
notación científica (como ya veremos);
Ejemplos de números expresados con y sin notación científica (en decimal):
976 000 9,76 10" 9,76 E5;
1 2 3 4 5

976 000 000 000 000 9,76 10 ' 9,76 E14;


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

0,0000976 9,76 10 " 9,76 E > 5;


5 4 3 2 1

0,0000000000000976 9,76 10 ' 9,76 E > 14;


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

Como vemos, al multiplicar por una potencia positiva de 10, la coma se corre a la
derecha igual cantidad de posiciones que el exponente, mientras que si la potencia es
negativa, la coma se corre lo indicado por el exponente pero hacia izquierda.
Ing. Martín Vernengo, 2020.
[email protected]
Floating Point = “notación científica binaria”
Utilicemos ahora la misma idea de la notación científica decimal pero con números
binarios ― veamos algunos ejemplos ― primero con exponente positivo:
17 16 1 10001 1,0001 2'
1 2 3 4

68 64 4 1000100 1,0001 2#
1 2 3 4 5 6

La idea es siempre expresar el número en floating point comenzando con “1,”, por ende si el
número del que partimos es mayor que 1, necesariamente habrá que multiplicarlo por una
potencia positiva de 2 para que el 1,…. Se haga mayor hasta igualar el número buscado.

Veamos ahora ejemplos con exponente negativo y donde ahora el número inicialmente
presentado es menos que 1:
0,53125 0,5 0,03125 2 2 "
0,10001 1,0001 2
1

0,265625 0,25 0,015625 2 2 #

0,010001 1,0001 2
2 1

0,1328125 0,125 0,0078125 2 ( 2 %

0,0010001 1,0001 2 (
Ing. Martín Vernengo, 2020.
[email protected] 3 2 1
Formato Floating Point: caso con exponente (+)
Volvamos ahora a uno de los ejemplos para el caso de exponente positivo de la lámina
anterior y veamos cómo se expresaría una primera versión de formato FP:
17 10001 1,0001 2' 1, 0001 10 ;
Nota: En este caso, en la expresión más a la derecha, hemos escrito el número utilizando
exclusivamente dígitos 0 y 1, es decir en “binario puro”, incluyend la potencia 2 y su exponente

En esta primer versión de formato FP, que usa sólo 8 bits y ya veremos que no es la final,
la computadora guarda en memoria por separado dos valores:
El “significante” o “mantisa”, que es primer número de la “notación científica binaria” ya vista;
El exponente, quedando implícito que la base a la que se eleva es el 2 (estamos en binario);

0 1 0 1 0 0 0 1
17 1,0625 2'

Exponente Significante (o mantisa)


0101 5 '
?, 0001 2 2 1,0625
“1,” implícito
¿Por qué se omite el 1 más significativo? Para ahorrar espacio de almacenamiento:
La computadora “sabe” que siempre se omite un “1,” al guardar el dato en memoria, así que
cuando realiza cálculos el programa sólo tiene que agregar ese “1,” y no hay problemas;
Pero vemos que en este ejemplo simplificado, donde el formato sólo tiene 8 bits, si NO se
omitiera el “1,” NO habría lugar para almacenar los 5 bits de la mantisa: 1,0001.
Ing. Martín Vernengo, 2020.
[email protected]
Floating Point con exponente (-): “desplazamiento”
Veamos ahora uno de los ejemplos ya presentados antes pero para exponente negativo:
#
0,265625 0,25 0,015625 2 2 0,010001 1,0001 2
Podríamos expresar el exponente negativo = -2 con complemento a 2, sin embargo, no
es esto lo que se hace en el caso particular de los formatos floating point:
Nota: en principio el método utilizado permitiría realizar comparaciones más rápidas entre dos
números en formato floating point para determinar cuál es mayor que si se usara complemento a 2;

Lo que se hace en formato FP es siempre sumar un número fijo al exponente que se


denomina desplazamiento, de manera que en la eventualidad de que el exponente
calculado sea negativo, genera siempre un número positivo:
Supongamos que DESPLAZAMIENTO = 7, entonces el formato será así:

0,265625
1 0 0 1 0 0 0 1 1,0625 2

Exponente Significante (o mantisa)


Almacenado ?, 0001 2 2 '
1,0625

7 Exponente Real
“1,” implícito
7 >2
9 1001
Ing. Martín Vernengo, 2020.
[email protected]
Reformulamos el caso con exponente (+)
Ahora nos vemos obligados a corregir el caso de exponente positivo presentado inicialmente, pues no
habíamos incluido el desplazamiento = 7 que estamos utilizando por ahora;
De este modo, el formato FP de apenas 8 bits que estamos utilizando como ejemplo simplificado
quedaría así para:
17 10001 1,0001 2' 1, 0001 10 ;

17 1 0 1 1 0 0 0 1
1,0625 2'

Exponente Significante (o mantisa)


Almacenado ?, 0001 2 2 '
1,0625

7 Exponente Real
“1,” implícito
7 4
11 1011

Es decir que SIEMPRE se suma el desplazamiento al exponente obtenido (que hemos llamado
“exponente real”) para obtener lo que hemos llamado “exponente almacenado”, ya que es dicho
número el que se guarda en memoria como “formato floating point” (punto flotante).

Ing. Martín Vernengo, 2020.


[email protected]
Ajustes en el formato floating point (IEEE 754)
En rigor, el formato de punto flotante realmente utilizado en informática tiene algunas
particularidades adicionales;
Fue estandarizado por el “Institute of Electric and Electronics Engineers”, IEEE y se conoce como
“Formato Floating Point IEEE 754”;
Existen dos opciones para el formato IEEE 754:
Un formato de “precisión simple”, que utiliza 32 bits y corresponde a las variables que por
ejemplo en lenguaje “C” se declaran como “float”;
Otro formato de “doble precisión”, que utiliza 64 bits y corresponde a variables que en
lenguaje “C” se declaran como “double”;

Para el caso del formato IEEE 754 de precisión simple, las diferencias con los ejemplos
visto hasta aquí son las siguientes:
Exponente: se utilizan 8 bits (en lugar de los 4 bits de nuestros ejemplos previos);
Desplazamiento = 127 (en lugar de = 7 como en las láminas anteriores);
Mantisa: se utilizan 23 bits (en vez de apenas los 4 bits que ejemplificamos antes):
Signo de 1 bit: esto es algo que no tuvimos en cuenta hasta aquí, e implica utilizar un bit 0
cuando el número floating point es positivo y un bit 1 cuando es negativo;

Respecto del signo vemos que en FP se omite utilizar el complemento a 2 para


representar tanto exponentes negativos como el caso en que todo el número a
representar es menor que cero, básicamente para facilitar comparaciones:
Sin embargo, esto es sólo a efectos de almacenaje en memoria, cuando la computadora realiza
operaciones con números en formato FP , siempre termina utilizando en algún punto el
complemento a 2 cuando debe realizar una resta entre números enteros.

Ing. Martín Vernengo, 2020.


[email protected]
Ejercicio resuelto: IEEE 754 de 32 bits
La mejor forma de comprender el formato IEEE 754 es con un ejemplo como el siguiente,
donde se debe encontrar el número decimal representado por el siguiente número en
formato IEEE 754 de 32 bits, recordando que el desplazamiento en el exponente es 127:

Signo Exponente Significante o Mantisa

Ing. Martín Vernengo, 2020.


[email protected]
Ejercicio resuelto: IEEE 754 de 32 bits (solución)
Encuentre el número decimal representado por el siguiente número en formato IEEE 754
de 32 bits, siendo que el desplazamiento en el exponente es 127:

Signo Exponente Significante o Mantisa

Significante ?, 01 1 2 0 2 1 2
Exponente >3 1 0 0,25 1,25
Pues 0111 1100 7C #
7 16 12 124
⇒ Número 1,25 2 (
Entonces Exponente
124 > 127 >3

desplazamiento

Este 1, lo mismo que la coma estaba implícito, hay que agregarlo, de


esta manera el formato IEEE 754 permite contar con un bit adicional,
en total 33 bits, a pesar de ocupar 32 bits (4 bytes).

Ing. Martín Vernengo, 2020.


[email protected]
Otros ejemplos de IEEE 754
Verifique como ejercicio que es correcta la representación de los primeros 4 ejemplos
abajo (los últimos dos son una convención establecida en el estándar):

Ing. Martín Vernengo, 2020.


[email protected]
Ing. Martín Vernengo, 2020.

Operaciones con floating point: planteo [email protected]

Para realizar operaciones con punto flotante, vamos primeramente a realizar un ejemplo
con números decimales en “notación científica” para entender mejor el método;
Supongamos que realizar las operaciones: suma y producto de 1,5 10 y 3,5 10( ;
Para la suma, primero tenemos que modificar uno de los sumandos para que su exponente
coincida con el del otro y luego sumar las mantisas:
1,5 10k 3,5 10( 0,15 10m 3,5 10( 0,15 3,5 10( 3,65 10(
suma SIN
notación 150 3500 ……………………………………………………………… 3650
científica
1 2 3
Para el producto, por las propiedades de la exponenciación, se multiplican las mantisas y se
suman los exponentes:
1,5 10 3,5 10( 1,5 3,5 10 10( 5,25 10 ( 5,25 10"
150 3500 … … … … … … … … … … … … … … … … … … … … … 525000
Veamos otro ejemplo para suma y producto de 3,4 10 y 10,6 10 ; 1 2 3 4 5

Para la suma, nuevamente modificamos el exponente del primer sumando para que sea igual
al del segundo y sumamos las mantisas:
3,4 10 10,6 10 0,0034 10 + 10,6 10 0,0034 10,6 10 10,6034 10
suma SIN
notación 0,34 1060 …………………… ……………………… …………………… 1060,34
científica
Para el producto, se multiplican las mantisas y se suman los exponentes: 1 2

3,4 10 10,6 10 3,4 10,6 10 10 36,04 10 36,04 10


0,34 1060 … … … … … … … … … … … … … … … … … … … … … … … … … 360,4
Operaciones con floating point: suma
Pasamos ahora al caso de la suma binaria con FP (usamos el formato simplificado de 8
bits y desplazamiento = 7 visto inicialmente) y sea sumar 17 8,5 :

17 1,0001 2'; 8,5 1,0001 2( 0,10001 2' ;


1
1 0 1 1 0 0 0 1 1 0 1 0 0 0 0 1

Exponente Mantisa Exponente Mantisa Incrementamos en 1 el


Almacenado 7 Exp. Real Almacenado 7 Exp. Real exponente, pero para
?, 0001 ?, 0001
7 4 compensar corremos 1
7 3 posición a la izquierda
11 1011 “1,” implícito “1,” implícito la coma;
10 1010

17 8,5

1,0001 2' 0,10001 2' 1,00010 0,10001 2' 1,10011 2';
0,10001

2 2 2 ' 2 " 2' 1,59375 2' 25,5

Ing. Martín Vernengo, 2020.


[email protected]
Ing. Martín Vernengo, 2020.

Operaciones con floating point: producto [email protected]

Por último, el producto de los mismos operandos que sumamos previamente:


Al igual que con la notación científica en decimal, se multiplican las mantisas y se suman los
exponentes, y dichas operaciones de realizan en formato binario de números enteros.
No es necesario
17 1,0001 2'; 8,5 1,0001 2( modificar el
exponente;
1 0 1 1 0 0 0 1 1 0 1 0 0 0 0 1

Exponente Mantisa Exponente Mantisa


Almacenado 7 Exp. Real Almacenado 7 Exp. Real
?, 0001 ?, 0001
7 4 7 3
11 1011 “1,” implícito “1,” implícito
10 1010

17 8,5 1,0001 2' 1,0001 2( 1,0001 1,0001 2' 2(



1,00010 0,10001 2' (
100
4 decimales 1,0001
+ 1,001000001 2% 011
4 decimales 1,0001
1,12890625 128 111
10001
00000 144,5 17 8,5
00000
00000
1 0001
( &
1,00100001 2 2 2 1,12890625
8 decimales

También podría gustarte