0% encontró este documento útil (0 votos)
86 vistas15 páginas

Conversión de Sistemas Numéricos Básicos

El documento trata sobre diferentes sistemas numéricos utilizados en computación como el binario, decimal, hexadecimal y BCD. Explica cómo convertir entre estos sistemas y también describe la representación de caracteres a través del código ASCII y de números en coma flotante.

Cargado por

Dario
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
86 vistas15 páginas

Conversión de Sistemas Numéricos Básicos

El documento trata sobre diferentes sistemas numéricos utilizados en computación como el binario, decimal, hexadecimal y BCD. Explica cómo convertir entre estos sistemas y también describe la representación de caracteres a través del código ASCII y de números en coma flotante.

Cargado por

Dario
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

-Sistemas Numéricos:

El sistema numérico que utilizamos a diario es el sistema decimal, pero este


sistema no es conveniente para las máquinas debido a que la información se
maneja codificada en forma de bits prendidos o apagados; esta forma de
codificación nos lleva a la necesidad de conocer el cálculo posicional que nos
permita expresar un número en cualquier base que lo necesitemos.
. Convertir números binarios a decimales:
El sistema binario está basado en únicamente dos condiciones o estados, ya sea
encendido (1) o apagado (0), por lo tanto, su base es dos (2). Para la conversión
podemos utilizar la fórmula de valor posicional:
Ejemplo, si tenemos el numero binario 10011, tomamos de derecha a izquierda
cada dígito y lo multiplicamos por la base elevada a la nueva posición que ocupan:
Binario: 1 1 0 0 1
Decimal:1*2^0+1*2^1+0*2^2+0*2^3+1*2^4
= 1 + 2 + 0 + 0 + 16 = 19 decimal.
Por lo tanto, 10011 binario = 19 decimal.
. Convertir números decimales a binarios:
Naturalmente es mucho más fácil una conversión con una calculadora científica,
pero no siempre se cuenta con ella, así que es conveniente conocer por lo menos
una forma manual para hacerlo.
El método que se explicará utiliza la división sucesiva entre dos, guardando el
residuo como dígito binario y el resultado como la siguiente cantidad a dividir.
Tomaremos como ejemplo el numero decimal 43.
43/2 = 21 y su residuo es 1
21/2 = 10 y su residuo es 1
10/2 = 5 y su residuo es 0
5/2 = 2 y su residuo es 1
2/2 = 1 y su residuo es 0
1/2 = 0 y su residuo es 1
Armando el número de abajo hacia arriba tenemos que el resultado en binario es
101011
Por lo tanto, 43 decimal = 101011 binario.
Sistema hexadecimal
En la base hexadecimal tenemos 16 dígitos que van del 0 al 9 y de la letra A hasta
la F (estas letras representan los números del 10 al 15). Por lo tanto, contamos 0,
1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E y F.
La conversión entre numeración binaria y hexadecimal es sencilla. Lo primero que
se hace para una conversión de un número binario a hexadecimal es dividirlo en
grupos de 4 bits, empezando de derecha a izquierda. En caso de que el último
grupo (el que quede más a la izquierda) sea menor de 4 bits se rellenan los
faltantes con ceros. Tomando como ejemplo el número binario 101011 lo dividimos
en grupos de 4 bits y nos queda:
10; 1011
Rellenando con ceros el último grupo (el de la izquierda):
0010; 1011
Después tomamos cada grupo como un número independiente y consideramos su
valor en decimal:
0010
0*2^0 + 1*2^1 + 0*2^2 + 0*2^3 = 2
1011
1*2^0 + 1*2^1 + 0*2^2 + 1*2^3 = 11
Por lo tanto, tenemos:
0010 = 2; 1011 = 11
Como no podemos representar este número hexadecimal como 211 porque sería
un error, tenemos que sustituir todos los valores mayores a 9 por su respectiva
representación en hexadecimal, con lo que obtenemos:
2BH (Donde la H representa la base hexadecimal) y 11 = B
Para convertir un número de hexadecimal a binario solo es necesario invertir estos
pasos: se toma el primer dígito hexadecimal y se convierte a binario, y luego el
segundo, y así sucesivamente hasta completar el número.
Código ASCII
Acrónimo de American Standard Code for Information Interchange (Código
Estándar Americano para Intercambio de Información), este código asigna a las
letras del alfabeto, a los dígitos decimales del 0 al 9 y a varios símbolos
adicionales un número binario de 7 bits (poniéndose el bit 8 en su estado de
apagado o 0). De esta forma cada letra, dígito o carácter especial ocupa un byte
en la memoria de la computadora.
Podemos observar que este método de representación de datos es muy ineficiente
en el aspecto numérico, ya que en formato binario nos basta un solo byte para
representar números de 0 a 255, en cambio con el código ASCII un byte puede
representar únicamente un dígito.
Debido a esta ineficiencia, el código ASCII es principalmente utilizado en la
memoria para representar texto.
Casi todos los sistemas informáticos actuales utilizan el código ASCII o una
extensión compatible para representar textos y para el control de dispositivos que
manejan texto como el teclado.
Los caracteres de control ASCII
El código ASCII reserva los primeros 32 códigos (numerados del 0 al 31 en
decimal) para caracteres de control: códigos no pensados originalmente para
representar información imprimible, sino para controlar dispositivos (como
impresoras) que usaban ASCII. Por ejemplo, el carácter 10 representa la función
"nueva línea" (line feed), que hace que una impresora avance el papel, y el
carácter 27 representa la tecla "escape" que a menudo se encuentra en la esquina
superior izquierda de los teclados comunes.
La tabla completa de caracteres de control ASCII con su respectivo significado
esta aquí: https://es.wikipedia.org/wiki/Car%C3%A1cter_de_control
Caracteres imprimibles ASCII
El carácter 'espacio', designa al espacio entre palabras, y se produce normalmente
por la barra espaciadora de un teclado. Los códigos del 32 al 126 se conocen
como caracteres imprimibles, y representan letras, dígitos, signos de puntuación y
varios símbolos.
El ASCII de siete bits proporciona siete caracteres "nacionales" y, si la
combinación concreta de hardware y software lo permite, puede utilizar
combinaciones de teclas para simular otros caracteres internacionales: en estos
casos un backspace puede preceder a un acento abierto o grave (en los
estándares británico y estadounidense, pero solo en estos estándares, se llama
también "opening single quotation mark"), una tilde o una "marca de respiración".
Lista completa de caracteres imprimibles:
https://es.wikipedia.org/wiki/ASCII#Caracteres_imprimibles_ASCII
Método BCD
BCD es un acrónimo de Binary Coded Decimal (Decimal codificado en binario). En
esta notación se utilizan grupos de 4 bits para representar cada dígito decimal del
0 al 9. Con este método podemos representar dos dígitos por byte de información.
Cuando este método es mucho más práctico para representación de números en
la memoria en comparación al ASCII, todavía se queda por debajo del binario, ya
que con un byte en el método BCD solo podemos representar dígitos del 0 al 99,
en cambio, en formato binario podemos representar todos los dígitos desde 0
hasta 255.
Este formato es utilizado principalmente para representar números muy grandes
en aplicaciones mercantiles ya que facilita las operaciones con los mismos
evitando errores de redondeo.
Los números decimales, se codifican en BCD con los bits que representan sus
dígitos. Por ejemplo, la codificación en BCD del número decimal 59237 es:
Decimal: 5 9 2 3 7
BCD: 0101 1001 0010 0011 0111
el BCD solo se utilizan 10 de las 16 posibles combinaciones que se pueden formar
con números de 4 bits, por lo que el sistema pierde capacidad de representación,
aunque se facilita la compresión de los números. Esto es porque el BCD solo se
usa para representar cifras, no números en su totalidad. Esto quiere decir que
para números de más de una cifra hacen falta dos números BCD.
Una forma sencilla de calcular números en BCD es sumando normalmente bit a
bit, y si el conjunto de 4 bits sobrepasa el número 9, entonces se le suma un 6
(0110) en binario, para poder volver a empezar, como si hiciéramos un módulo al
elemento sumante.
Representación de punto flotante
Esta representación está basada en la notación científica, esto es, representar un
número en dos partes: su mantisa y su exponente.
Poniendo como ejemplo el número 1230000, podemos representarlo como
1.123*10^6, en esta última notación el exponente nos indica el número de
espacios que hay que mover el espacio hacia la derecha para obtener el resultado
original.
En caso de que el exponente fuera negativo nos estaría indicando el número de
espacios que hay que recorrer el punto decimal hacia la izquierda para obtener el
original.
Operaciones con Sistemas Numéricos
Suma en binario
Para aprender a sumar, con cinco o seis años de edad, tuviste que memorizar las
100 combinaciones posibles que pueden darse al sumar dos dígitos decimales. La
tabla de sumar, en binario, es mucho más sencilla que en decimal. Sólo hay que
recordar cuatro combinaciones posibles:
Las sumas 0 + 0, 0 + 1 y 1 + 0 son evidentes:
0+0=0
0+1=1
1+0=1
Pero la suma de 1+1, que sabemos que es 2 en el sistema decimal, debe
escribirse en binario con dos cifras (10) y, por tanto 1+1 es 0 y se arrastra una
unidad, que se suma a la posición siguiente a la izquierda. Veamos algunos
ejemplos:
010 + 101 = 111 210 + 510 = 710
001101 + 100101 = 110010 1310 + 3710 = 5010
1011011 + 1011010 = 10110101 9110 + 9010 = 18110
110111011 + 100111011 = 1011110110 44310 + 31510 = 75810
Sustracción en binario
La técnica de la resta en binario es, nuevamente, igual que la misma operación en
el sistema decimal.
Las restas 0 - 0, 1 - 0 y 1 - 1 son evidentes:
0–0=0
1–0=1
1–1=0
La resta 0 - 1 se resuelve, igual que en el sistema decimal, tomando una unidad
prestada de
la posición siguiente: 10 - 1, es decir, 210 – 110 = 1. Esa unidad prestada debe
devolverse,
sumándola, a la posición siguiente. Veamos algunos ejemplos:
111 – 101 = 010 710 – 510 = 210
10001 – 01010 = 00111 1710 – 1010 = 710
11011001 – 10101011 = 00101110 21710 – 17110 = 4610
111101001 – 101101101 = 001111100 48910 – 36510 = 12410
Multiplicación en binario
Es más fácil que en cualquier otro sistema de numeración. Como los factores de la
multiplicación sólo pueden ser CEROS o UNOS, el producto sólo puede ser CERO
o UNO. En otras palabras, las tablas de multiplicar del cero y del uno son muy
fáciles de aprender:
En un ordenador, sin embargo, la operación de multiplicar se realiza mediante
sumas repetidas. Eso crea algunos problemas en la programación porque cada
suma de dos UNOS origina un arrastre, que se resuelven contando el número de
UNOS y de arrastres en cada columna. Si el número de UNOS es par, la suma es
un CERO y si es impar, un UNO. Luego, para determinar los arrastres a la
posición superior, se cuentan las parejas de UNOS.
Veamos, por ejemplo, una multiplicación:

División binaria
Igual que en el producto, la división es muy fácil de realizar, porque no son
posibles en el cociente otras cifras que UNOS y CEROS. Consideremos el
siguiente ejemplo, 42/6 = 7, en binario:
Se intenta dividir el dividendo por el divisor, empezando por tomar en ambos el
mismo número de cifras (100 entre 110, en el ejemplo). Si no puede dividirse, se
intenta la división tomando un dígito más (1001 entre 100).
Si la división es posible, entonces, el divisor sólo podrá estar contenido una vez en
el dividendo, es decir, la primera cifra del cociente es un UNO. En ese caso, el
resultado de multiplicar el divisor por 1 es el propio divisor. Restamos las cifras del
dividendo del divisor y bajamos la cifra siguiente.
El procedimiento de división continúa del mismo modo que en el sistema decimal.
Complemento a 1 y 2 de números binarios
El complemento a 1 y a 2 de un número binario son importantes porque permiten
la representación de números negativos. El método de complemento a 2 en
aritmética es comúnmente usada en computadoras para manipular números
negativos.
Obteniendo el complemento a 1 de un numero binario
El complemento a 1 de un numero binario es encontrado simplemente cambiando
todos los 1s por 0s y todos los 0s por 1s.
Ejemplo:
Número binario = (1010110)2 = (86)
Complemento a uno = (0101001)2 = (− 87)
Obteniendo el complemento a 2 de un numero binario
El complemento a 2 de un numero binario es encontrado sumando 1 al bit menos
significativo del complemento a 1 del número.
Ejemplo:
Encontrar el complemento a 2 de 10110010 Complemento a 1 => 01001101
01001101
+1
01001110
Exceso a 2n-1
En Exceso a 2n-1, si se dispone de n bits para representar a un número entero (N)
positivo o negativo, dicho número se representa como N + 2n-1, por tanto:
NEX = N + 2n-1
El rango de representación en Exceso a 2n-1 es el mismo que en Complemento a
2:
Ejemplo:
En Exceso a 2n-1, para n = 16, el número positivo 950310 se representa como:
950310 = (950310 + (216-1)10) EX =
= (950310 + (215)10) EX =
= (950310 + 3276810) EX =
= (4227110) EX =
= (1010010100011111 2) EX =
= 1010010100011111EX. a 32768
ARQUITECTURA DEL 8086.
El 8086 es un circuito integrado (CI) que posee unos 29.000 transistores NMOS, lo
que supone unas 9.000 puertas lógicas. Está montado en una placa de silicio
sobre una cápsula de cerámica con 40 pines.
De los 40 pines, 20 están dedicados a la tarea de especificar la dirección de
memoria, por tanto, existe la posibilidad de direccionar 220 posiciones de memoria
(bytes), lo que equivale a 1Mb de memoria principal.
El 8086 se divide en dos unidades lógicas: una unidad de ejecución (EU) y una
unidad de interfaz del bus (BIU). El papel de la EU es ejecutar instrucciones,
mientras que la BIU envía instrucciones y datos a la EU.
La EU posee una unidad aritmético-lógica, una unidad de control y 10 registros.
Permite ejecutar las instrucciones, realizando todas las operaciones aritméticas,
lógicas y de control necesarias. La BIU tiene tres elementos fundamentales: la
unidad de control del bus, la cola de instrucciones y los registros de segmento.
La BIU controla el bus externo que comunica el procesador con la memoria y los
distintos dispositivos de E/S. Los registros de segmento controlan el
direccionamiento y permiten gestionar hasta 1 MB de memoria principal. La BIU
accede a la memoria para recuperar las instrucciones que son almacenadas en la
cola de instrucciones constituida por 6 bytes (4 bytes para el 8088). Mientras la
BIU busca las instrucciones, la EU ejecuta las instrucciones que va recogiendo de
la cola, es decir, la BIU y la EU trabajan en paralelo.
REGISTROS DEL 8086/88 Y DEL 80286.
Los registros del procesador tienen como misión fundamental almacenar las
posiciones de memoria que van a sufrir repetidas manipulaciones, ya que los
accesos a memoria son mucho más lentos que los accesos a los registros. El
8086 dispone de 14 registros de 16 bits que se emplean para controlar la
ejecución de instrucciones, direccionar la memoria y proporcionar capacidad
aritmética y lógica. Cada registro puede almacenar datos o direcciones de
memoria. Los registros son direccionales por medio de un nombre. Por convención
los bits de un registro se numeran de derecha a izquierda:
… 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
…1 0 0 0 1 1 0101011110
Los diferentes registros del 8086 se clasifican en: registros de propósito general o
de datos, registros de segmento, registro apuntador de instrucciones (IP), registros
apuntadores (SP y BP), registros índices (SI y DI) y registro de banderas, FLAGS
o registro de estado (FL).
Registro de propósito general o de datos: AX, BX, CX, DX
Registros punteros y Registro índice: SP, BP, SI, DI
Registro de segmento: CS, DS, SS, ES
Registro puntero, de direcciones y Registro de bandera, FLAGS o de estado (FL):
IP, FLAGS o FL
Registros de propósito general.
Se utilizan para cálculo y almacenamiento de propósito general. Los programas
leen datos de memoria y los dejan en estos registros, ejecutan operaciones sobre
ellos, y guardan los resultados en memoria. Hay cuatro registros de propósito
general que, aparte de ser usados a voluntad por el programador, tienen fines
específicos:
Registro AX: Este registro es el acumulador principal, implicado en gran parte de
las operaciones de aritméticas y de E/S.
Registro BX: Recibe el nombre de registro base ya que es el único registro de
propósito general que se usa como un índice en el direccionamiento indexado. Se
suele utilizar para cálculos aritméticos.
Registro CX: El CX es conocido como registro contador ya que puede contener un
valor para controlar el número de veces que se repite una cierta operación.
Registro DX: Se conoce como registro de datos. Algunas operaciones de E/S
requieren su uso, y las operaciones de multiplicación y división con cifras grandes
suponen que el DX y el AX trabajando juntos.
Registros de Segmento.
Los registros de segmento son registros de 16 bits que constituyen la
implementación física de la arquitectura segmentada del 8086.
Registro CS: Registro Segmento de Código. Establece el área de memoria dónde
está el programa durante su ejecución.
Registro DS: Registro Segmento de Datos. Especifica la zona donde los
programas leen y escriben sus datos.
Registro SS: Registro Segmento de Pila. Permite la colocación en memoria de una
pila, para almacenamiento temporal de direcciones y datos.
Registro ES: Registro Segmento Extra. Se suele utilizar en algunas operaciones
con cadenas de caracteres para direccionar la memoria.
Registro Apuntador de Instrucciones (IP).
Se trata de un registro de 16 bits que contiene el desplazamiento de la dirección
de la siguiente instrucción que se ejecutará. Está asociado con el registro CS en el
sentido de que IP indica el desplazamiento de la siguiente instrucción a ejecutar
dentro del segmento de código determinado por CS
Registros Apuntadores (SP y BP).
Los registros apuntadores están asociados al registro de segmento SS y permiten
acceder a los datos almacenados en la pila:
Registro SP: Proporciona un valor de desplazamiento que se refiere a la palabra
actual que está siendo procesada en la pila.
Registro BP: Facilita la referencia a los parámetros de las rutinas, los cuales son
datos y direcciones transmitidos vía la pila.
Registros Índice (SI y DI).
Los registros índices se utilizan fundamentalmente en operaciones con cadenas y
para direccionamiento indexado:
Registro SI: Registro índice fuente requerido en algunas operaciones con cadenas
de caracteres. Este registro está asociado con el registro DS.
Registro DI: Registro índice destino requerido también en determinadas
operaciones con cadenas de caracteres. Está asociado al registro DS o ES.
Registro de banderas, FLAGS, o registro de estado (FL).
Es un registro de 16 bits, pero sólo se utilizan nueve de ellos. Sirven para indicar
el estado actual de la máquina y el resultado del procesamiento. La mayor parte
de las instrucciones de comparación y aritméticas modifican este registro. Algunas
instrucciones pueden realizar pruebas sobre este registro para determinar la
acción siguiente.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
- - - - O D I T S Z- A - P–C
Los bits 0, 2, 4, 6, 7 y 11 son indicadores de condición que reflejan los resultados
de las operaciones del programa; los bits 8 al 10 son indicadores de control que,
modificados por el programador, sirven para controlar ciertos modos de
procesamiento, y el resto no se utilizan. El significado de cada uno de los bits es el
siguiente:

OF: Bit de Overflow o desbordamiento. Indica desbordamiento de un bit de orden alto (más
a la izquierda), después de una operación aritmética.

DF: Bit de Dirección. Designa la dirección, creciente (0) o decreciente (1), en operaciones
con cadenas de caracteres.

IF: Bit de Interrupción. Indica que una interrupción externa, como la entrada desde el
teclado, sea procesada o ignorada.

TF: Bit de Trap o Desvío. Procesa o ignora la interrupción interna de trace (procesamiento
paso a paso).

SF: Bit de Signo. Indica el valor del bit más significativo del registro después de una
operación aritmética o de desplazamiento.

ZF: Bit Cero. Se pone a 1 si una operación produce 0 como resultado.

AF: Bit de Carry Auxiliar. Se pone a 1 si una operación aritmética produce un acarreo del
bit 3 al 4. Se usa para aritmética especializada (ajuste BCD).

PF: Bit de Paridad. Se activa si el resultado de una operación tiene paridad par.
CF: Bit de Acarreo. Contiene el acarreo de una operación aritmética o de desplazamiento
de bits.

SEGMENTOS Y DIRECCIONAMIENTO

Un segmento es un área especial de memoria en un programa que comienza en un límite de


párrafo, es decir, en una posición de memoria divisible entre 16 (10H). Un segmento puede
estar ubicado en casi cualquier lugar de la memoria y puede alcanzar hasta 64K de longitud.
Por tanto, sólo necesitamos 16 bits para especificar la dirección de comienzo de un
segmento, puesto que los cuatro bits menos significativos serían siempre cero. En el 8086
se definen cuatro segmentos:

Segmentos y Desplazamientos (offsets).

Todas las direcciones de memoria están referidas a la dirección de comienzo de algún


segmento. La distancia en bytes desde la dirección de inicio del segmento se define como el
offset o desplazamiento. El desplazamiento es una cantidad de dos bytes, que por tanto va
de 0000H hasta FFFFH (0 a 65535) por lo que un segmento abarca como máximo 64K.
Para direccionar cualquier posición de memoria, el procesador combina la dirección del
segmento que se encuentra en un registro de segmento con un valor de desplazamiento.

Nota: Un programa puede tener uno o varios segmentos, los cuales pueden
comenzar en casi cualquier lugar de la memoria, variar en tamaño y estar en cualquier
orden.

Direccionamiento de Programas.
Cuando ejecutamos un programa, el DOS carga en la memoria el código máquina
del programa. El registro CS contiene la dirección de inicio del segmento de
código del programa y el registro DS la dirección de inicio del segmento de datos.
El segmento de código contiene las instrucciones que serán ejecutadas, mientras
que el segmento de datos contiene los datos a los que las instrucciones hacen
referencia. El registro IP indica el desplazamiento de la instrucción actual que es
ejecutada dentro del segmento de código. Un operando (que sea una referencia a
memoria) de una instrucción indica un desplazamiento en el segmento de datos
del programa.

PILA (STACK).
Los programas ejecutables (.COM y .EXE) requieren una zona de memoria
reservada denominada pila (stack). La pila no es más que un área para el
almacenamiento temporal de direcciones y datos.
El registro SS es inicializado por el DOS con la dirección de inicio de la pila,
mientras que el registro SP contiene el tamaño de la pila: apunta al byte siguiente
al último que pertenece a la pila. La pila se caracteriza porque empieza a
almacenar datos en la localidad más alta y avanza hacia abajo en la memoria:

Ejemplo: Introducimos en la pila los registros AX y BX que contienen FA01H y


35A9H respectivamente. Suponemos que el registro SP contiene 50 bytes.
Registros de Segmento por defecto.
Existen unos segmentos asociados por defecto a los registros de desplazamiento
(IP, SP, BP, BX, DI y SI); sólo es necesario declarar el segmento cuando no
coincide con el asignado por defecto. En este caso, la instrucción incluye un byte
adicional (a modo de prefijo) para indicar cuál es el segmento referenciado.
En la siguiente figura se muestran los segmentos que se emplean por defecto para
cada uno de los registros que se encuentran en la primera columna:

También podría gustarte