¿Qué se entiende por código de 16 bits?

La forma en que hizo la pregunta no está clara. Otros han respondido basándose en la interpretación de la pregunta para aplicar a la arquitectura.

Por lo tanto, responderé interpretando que se relaciona con conjuntos de caracteres (tal vez la referencia a BCD implica eso.

Los conjuntos de caracteres se representaron principalmente hasta hace unos 15 años más o menos en códigos de caracteres de 7 u 8 bits. Los dos prevalentes fueron ASCII (7 bits) y EBCDIC (8 bits). Este último se usó principalmente en sistemas mainframe y amigos de IBM. Como ASCII no tenía suficientes puntos de código (otro nombre para representar un carácter) para representar todos los glifos (el carácter se llama así cuando se enfatiza su imagen visual), incluso en idiomas europeos se necesitaban soluciones. Como primer paso, ASCCII se extendió a 8 bits, con muchos de los 128 puntos de código adicionales utilizados para representar glifos en los idiomas de Europa occidental. Esto fue suficiente para poder usar, por ejemplo, á y Ö, etc., pero todavía se omitieron muchos idiomas. Por ejemplo, ő (utilizado en húngaro) y Ł (utilizado en polaco) no se incluyeron.

Lo siguiente fue un intento de mantener el código de 8 bits, pero usar múltiples codificaciones (también conocidas como páginas de códigos). El ASCII de 8 bits se convirtió en un estándar internacional como ISO 8859-1 y se introdujeron otras codificaciones como, por ejemplo, ISO 8859-2 (centroeuropeo; contiene los caracteres anteriores y otros, reemplazando y omitiendo algunos que están presentes en 8859-1) , ISO 8859-5 (cirílico), etc. Al menos dos problemas principales:

  • Con un archivo escrito en una de estas codificaciones, es imposible saber cuál sin información adicional.
  • Todavía no es compatible con chino, japonés, etc.

Aparte: Microsoft siempre queriendo establecer sus propios estándares, no cumplió del todo e introdujo los “Conjuntos de caracteres de Windows”. Estos difieren de los estándares ISO en algunos caracteres (que se suman al problema “no se puede decir la codificación”).

El siguiente paso fue Unicode. La versión original de Unicode usa 16 bits para representar [matemáticas] 2 ^ {16} \ aproximadamente 65,000 [/ matemáticas] glifos. Uno podría pensar que esto sería suficiente para representar todos los guiones humanos (y no humanos) desde japonés hasta inuktitut. Pero no, actualmente hay 120,000 caracteres en el estándar Unicode. El pequeño organismo de estándares tuvo la temeridad de rechazar la estandarización del klingon, pero estoy seguro de que no podrán mantener esa posición durante más de un par de siglos.

La mayoría de los sistemas operativos y la web han cambiado a operar con Unicode por ahora. Entonces se podría decir que todos usan un código de 16 bits.

Esto es tanto verdadero como falso. En realidad, hay múltiples codificaciones de Unicode. UTF-16 usa 16 bits para cada carácter, pero, por supuesto, no puede representar todos los caracteres Unicode en el estándar actual (que necesitaría al menos 17 bits).

La codificación más utilizada es UTF-8 (https://en.wikipedia.org/wiki/UTF-8).

  • Se utilizan 8 bits para representar los primeros 128 caracteres Unicode, que por coincidencia son los mismos que los ASCII de 7 bits. El bit alto es 0.
  • Cuando el bit alto no es cero, es una indicación de más de 8 bits, y los bits adicionales indican si es 16, 24 o 32 (ver el enlace para más detalles). En principio, incluso podría llegar a 40 y 48 bits, sin embargo, todavía estamos lejos de tener tantos glifos definidos que lo requieran.
  • Se utilizan 16 bits para los siguientes 1.920 puntos de código, suficiente para la mayoría de los guiones no ideográficos (latín, griego, cirílico, árabe, hebreo, etc.).
  • Se utilizan 24 bits para chino, japonés, coreano, etc.
  • 32 se utilizan para lo que aún no ha sido cubierto.
  • Hay algunas combinaciones de códigos que nunca pueden representar caracteres. Algunos de estos se pueden usar al principio del archivo para indicar qué versión de UTF-8 está en uso (incluso con UTF-8, los bytes se pueden ordenar de dos maneras, y esto se indica mediante algunos códigos al principio). Esto no es 100% infalible, sin embargo, los caracteres fueron elegidos para que sea muy improbable que un archivo codificado de 8 bits comience de esa manera.

Bueno, para empezar, diste un número de 12 bits cuando escribiste “(1001 0100 1000)”.

Quiero decir, podrías escribir 0000 1001 0100 1000 y ahora has implicado explícitamente la notación de 16 bits. Y, como ya habrás adivinado, 16 bits tiene 16 … bueno … ¡bits!

[Lo anterior es una imagen que capturé de mi antiguo libro de texto, Organización de computadoras y programación en lenguaje ensamblador: Perspectiva de sistemas integrados por el Dr. Ben Lee de la Oregon State University]

Voy a hacer referencia a la imagen de arriba en un momento, je je, pero primero hablemos de algunas cosas. Cuando decimos código de 16 bits , podríamos referirnos a algunas cosas diferentes (pero esencialmente las mismas en principio). Hay direcciones de memoria de 16 bits, registros, tipos de datos, etc.

Numero Tiempo!

Primero saquemos la parte numérica del camino. Una “cosa” de n bits significa que dicha “cosa” tiene hasta n bits. Lo sé, bastante redundante, pero desnudo conmigo. La limitación de bits está dictada por restricciones de hardware; Es tan simple como eso. ¿Quieres un auto con asientos para 4 personas? Genial, todo el poder para ti! ¿Quieres un auto con asientos para 8? Bueno, eso podría costarle más. No solo por los materiales, sino que el diseño solo es una bestia en sí mismo. Entonces, el mismo principio se aplica aquí con bits y arquitectura de computadora.

Y si desea más información o una actualización de los sistemas de números binarios, no dude en ignorar mi descarado complemento y apunte su navegador a —> La respuesta de Bret Mishler a ¿Cómo puedo calcular los posibles estados de un número de 8 dígitos que consiste en 0 y 1, por ejemplo, 10010011?

En pocas palabras, 16 bits significa que tiene hasta [matemática] 2 ^ {16} [/ matemática] valores posibles. Comenzando desde 000 0000 0000 0000, seguido de 0000 0000 0000 0001, y terminando en 1111 1111 1111 1111. Lo que esos valores representan depende de los códigos de operación, la longitud de la dirección, etc., etc. – No es relevante en este momento. Simplemente acepte que cada número binario puede representar cosas diferentes. Algo así como que tal vez 1 = A, 2 = B, 3 = C, etc.

Arquitectura de Computadores

Ahora, si echa un vistazo a la Figura 4.3, en el lado izquierdo verá que tenemos memoria de Programa Flash que tiene “16 bits de largo”.

Lo que esto significa es que todas las instrucciones que componen su programa, desde el momento en que comienza, hasta cuando carga una imagen de un gato y hasta cuando termina, se almacenan aquí. Y cada instrucción puede ser tan larga como 16 bits. Cuantos más bits tenga, más detalladas o potentes serán sus instrucciones por instrucción.

Por ejemplo: haga una lista de instrucciones paso a paso para encender un sable de luz para una persona dominante diestra. Pero su limitado a 2 palabras por instrucción. Podría verse así: (en aras de la cordura, ignore la puntuación como ocupar un espacio en nuestro banco de 2 palabras)

  1. Gire a la izquierda
  2. mano, mover
  3. capa a un lado.
  4. Extender a la derecha
  5. brazo abierto
  6. mano derecha,
  7. utilizar el
  8. Forzar
  9. jale la
  10. sable en
  11. el alcance
  12. de tu
  13. mano derecha.
  14. Agarre cerrado
  15. una vez sable
  16. es en
  17. mano. Utilizar
  18. pulgar, presione
  19. encendido.

Bien, en nuestro procesador de instrucciones de 2 palabras, nos tomó 19 instrucciones. ¿Qué pasa si simplemente extendemos esto a 3 palabras por instrucción?

  1. Toma la mano izquierda
  2. mueve la capa a un lado.
  3. Extiende el brazo derecho,
  4. abrir la mano derecha
  5. usa la fuerza
  6. tirar del
  7. sable en el
  8. captar tu
  9. mano derecha. Cerrar
  10. agarre una vez sable
  11. Está en la mano.
  12. Usa el pulgar, presiona
  13. encendido.

¡Al agregar solo UNA palabra más a la longitud de nuestra instrucción, disminuimos la cantidad de instrucciones en un 31.58%! Si el papel, la tinta o el plomo fueran muy caros, este tipo de porcentaje podría ahorrarnos mucho dinero. Al tener más bits en una instrucción, podemos hacer MUCHO más por instrucción; especialmente cuando calcula números grandes (r) en matemáticas u otras aplicaciones que hacen que su computadora haga cosas interesantes. La dificultad se presenta al diseñar la arquitectura para utilizar todos esos bits adicionales de manera rápida y eficiente, o de lo contrario tendríamos procesadores que fueran más que el típico procesador de 64 bits que probablemente esté en la computadora de su hogar.

Además, mencioné sables de luz antes, ¿no? ¿Qué tal una foto de uno solo para los ojos dulces?

[Imagen de sable de luz amarillo | Tumblr, soy un fanático de los sables de luz amarillos]

De todos modos, cuando hablamos de escribir “código de 16 bits”, en realidad queremos decir “escribir código para un procesador de 16 bits”. Dicho procesador podrá manejar instrucciones (y datos / registros) de 16 bits de longitud. ¡Creo que ahora acabamos de llegar a la respuesta a su pregunta!

Nota: Debido a donde lo dejé, puedo escuchar la voz del Dr. Lee en mi cabeza advirtiéndome que le advierta que con procesadores integrados, algunos de ellos tendrán diferentes tamaños entre datos e instrucciones. Por lo general, las instrucciones pueden ser algo así como 16 bits, mientras que los registros de datos son 8. Pero tenga en cuenta que el tamaño está limitado a n bits cuando se trata de un procesador de n bits, independientemente de si estamos hablando de la longitud del registro o la longitud de la instrucción.

Respuesta corta:

El decimal codificado en binario (BCD) es una forma de describir los números decimales tradicionales en el sistema de números binarios. No es necesariamente un código de 16 bits porque cualquier número con más de 4 dígitos debería representarse en más de 16 bits y cualquier número con menos de 4 dígitos podría representarse en menos de 16 bits.

Respuesta larga:

Entonces, las computadoras digitales binarias (las computadoras con las que estamos más familiarizados) son capaces de interpretar 2 valores. Estos valores se pueden considerar como VERDADERO y FALSO (que es el caso en álgebra booleana) o 0 y 1, que comúnmente se llaman bits. Ahora 0 y 1 se pueden usar para crear muchos esquemas de codificación diferentes .

Por ejemplo, ASCII es un esquema de codificación creado para que las computadoras puedan poner texto en inglés americano en una pantalla, en cualquier pantalla. La idea era asignar un valor de 8 bits a cada símbolo (que se usaba comúnmente en inglés americano) e instrucciones (necesarias para formatear el texto). Entonces para el siguiente texto:

Hola

¡Mundo!

El código ASCII sería:

01001000 = 0x48 = H
01100101 = 0x65 = e
01101100 = 0x6C = l
01101100 = 0x6C = l
01101111 = 0x6F = o
00001101 = 0x0D = Retorno del carro (volver al inicio de la línea)
00001010 = 0x0A = Nuevo avance de línea (vaya a la siguiente línea)
01010111 = 0x57 = W
01101111 = 0x6F = o
01110010 = 0x72 = r
01101010 = 0x6C = l
01100100 = 0x64 = d
00100001 = 0x21 =!

Del mismo modo, Binary Encoded Decimal (BCD) es una forma de codificar algunos símbolos, en este caso los números del 0 al 9, utilizando bits. La codificación para BCD es la siguiente:

0 = 0000
1 = 0001
2 = 0010
3 = 0011
4 = 0100
5 = 0101
6 = 0110
7 = 0111
8 = 1000
9 = 1001

A cada dígito en un número decimal se le asigna una codificación correspondiente, por lo que, como en este caso, 946 es 1001 0100 0110 .

Observe que la codificación de estos números decimales en BCD es la misma codificación para los números en el sistema de números base-2. Es por eso que la codificación se llama “decimal codificado en binario “.

También es importante tener en cuenta que BCD no es la única forma de codificar números decimales utilizando bits. Hay esquemas llamados Excess-n, donde la codificación de cada número decimal es su codificación base-2 más la codificación base-2 del número n.

Por ejemplo, si estuviera usando Excess-2, usaría el siguiente esquema:

0 = 0010 = 0000 + 0010
1 = 0011
2 = 0100
3 = 0101
4 = 0110
5 = 0111
6 = 1000
7 = 1001
8 = 1010
9 = 1011

Bueno, el BCD que ha proporcionado tiene en realidad solo 12 bits de longitud. Pero lo más probable es que la representación de BCD no sea tan relevante para su pregunta.

En su mayor parte, cuando alguien se refiere a un diseño de computadora en particular como “16 bits”, lo que generalmente significa es que los registros internos de la CPU contienen 16 bits a la vez, y pueden realizar operaciones típicas como matemática simple o carga de memoria / store de los registros en fragmentos de 16 bits de la manera más eficiente.

Hay varias hibridaciones y excepciones en muchas CPU en las que las direcciones de memoria pueden, por ejemplo, admitir un ancho de bits diferente que los registros combinando varios registros juntos de varias maneras, o puede haber instrucciones especiales diseñadas para hacer cálculos matemáticos tratando dos registros como un valor único emparejado de un ancho mayor y así sucesivamente.

De hecho, cualquier computadora de cualquier bit-ness puede realizar el mismo trabajo que una computadora de cualquier otro bit-ness, puede que no sea terriblemente eficiente si se trata de simular el funcionamiento de una computadora con registros mucho más grandes. , o uno cuyas instrucciones funcionan en una cantidad mucho mayor de datos a la vez.

Dado que las máquinas más antiguas se construyeron alrededor de arquitecturas de 8 o 16 bits, esto significaba que el rango de valores posibles para un solo registro era 0-255, o 0-65535, respectivamente, y si necesita reservar un bit para representar el signo del entero, entonces incluso esos rangos se redujeron a la mitad. Esos no son muy grandes y obviamente no son suficientes para muchos problemas del mundo real. Por lo tanto, a menudo era necesario escribir un software más complicado para manejar números más grandes, como usar representaciones de coma flotante o aplastar dos valores enteros de 16 bits para hacer un número mayor de 32 bits.

Una vez que la CPU alcanzó los 32 bits, las cosas se volvieron un poco más fáciles, ya que el uso de un valor de 32 bits como el tamaño de datos nativo puede manejar números enteros de hasta un poco más de 4 mil millones (o +/- 2 mil millones si se usan números con signo) que maneja muchas situaciones del mundo real (o aborda mucha más memoria) sin tener que hacer un trabajo adicional para ir más allá de las capacidades nativas de los registros e instrucciones de la CPU.

Como nota al margen, Alan Turing demostró esta equivalencia teórica de las máquinas de computación bastante temprano en la historia de la computación, y es la base de todos los emuladores de computadoras y, en cierta medida, “máquinas virtuales”, que son de uso común en la actualidad. Las CPU modernas son bastante capaces de simular por completo el funcionamiento de arquitecturas informáticas más antiguas utilizadas en muchos videojuegos antiguos populares y computadoras personales, por ejemplo, y muy por encima de la velocidad requerida para ejecutarlas a velocidades equivalentes en el mundo real a las originales.