He hecho algunas investigaciones. Un byte tiene 8 bits y una palabra es la unidad más pequeña que se puede direccionar en la memoria. La longitud exacta de una palabra varía. Lo que no entiendo es cuál es el punto de tener un byte. ¿Por qué no decir 8 bits?
Le hice esta pregunta a un profesor y me dijo que la mayoría de las máquinas en estos días son direccionables por bytes, pero ¿cómo sería eso una palabra?
assembly
memory
hardware
terminology
cpu-architecture
Peter Cordes
fuente
fuente
Respuestas:
Byte : hoy, un byte es casi siempre de 8 bits. Sin embargo, ese no fue siempre el caso y no hay un "estándar" o algo que dicte esto. Dado que 8 bits es un número conveniente para trabajar, se convirtió en el estándar de facto.
Palabra : el tamaño natural con el que un procesador maneja los datos (el tamaño del registro). Los tamaños de palabra más comunes que se encuentran en la actualidad son 8, 16, 32 y 64 bits, pero son posibles otros tamaños. Por ejemplo, había algunas máquinas de 36 bits o incluso máquinas de 12 bits .
El byte es la unidad direccionable más pequeña para una CPU. Si desea establecer / borrar bits individuales, primero debe buscar el byte correspondiente de la memoria, jugar con los bits y luego escribir el byte en la memoria.
Por el contrario, la palabra es la mayor cantidad de bits con los que un procesador puede procesar (como sumas y restas) a la vez. Esa definición es un poco confusa, ya que algunos procesadores pueden tener diferentes tamaños de palabras para diferentes tareas (por ejemplo, procesamiento de números enteros o de coma flotante). El tamaño de la palabra es con lo que funcionan la mayoría de las operaciones.
También hay algunos procesadores que tienen un tamaño de puntero diferente : por ejemplo, el 8086 es un procesador de 16 bits, lo que significa que sus registros tienen un ancho de 16 bits. Pero sus punteros (direcciones) tienen un ancho de 20 bits y se calcularon combinando dos registros de 16 bits de cierta manera.
fuente
word
es de 16 bits, incluso en las CPU x86 modernas donde el tamaño predeterminado del operando es de 32 bits (dword) y el ancho del registro entero es de 64 bits (qword). Y los registros xmm tienen un ancho de 128 bits (semovdqa
mueven doble-cuádruple). El bus de memoria tiene al menos 64 bits de ancho (y transferencias en ráfagas de 64 bytes = una línea de caché), y las rutas de la unidad de ejecución a la caché tienen al menos 128 bits de ancho, o 256 o incluso 512 bits de ancho. Cualquiera que sea el tamaño de la palabra de máquina nativa del x86 moderno, no es de 16 bits, pero el x86 moderno todavía usa terminología 8086.Aparte del punto técnico de que un byte no es necesariamente de 8 bits, las razones para tener un término es la simple naturaleza humana:
economía de esfuerzo (también conocida como pereza): es más fácil decir "byte" en lugar de "ocho bits"
tribalismo: a los grupos de personas les gusta usar jerga / un lenguaje privado para diferenciarlos de los demás.
Sólo déjate llevar. No va a cambiar más de 50 años de terminología de TI acumulada y bagaje cultural quejándose de ello.
FWIW: el término correcto para usar cuando se refiere a "8 bits independientes de la arquitectura del hardware" es "octeto".
fuente
BYTE
Estoy tratando de responder a esta pregunta desde la perspectiva de C ++.
El estándar C ++ define 'byte' como "Unidad direccionable de datos lo suficientemente grande como para contener cualquier miembro del conjunto de caracteres básico del entorno de ejecución".
Lo que esto significa es que el byte consta de al menos suficientes bits adyacentes para acomodar el juego de caracteres básico para la implementación. Es decir, el número de valores posibles debe ser igual o superior al número de caracteres distintos. En los Estados Unidos, los juegos de caracteres básicos son generalmente los juegos ASCII y EBCDIC, cada uno de los cuales puede ser acomodado por 8 bits. Por tanto, se garantiza que un byte tendrá al menos 8 bits.
En otras palabras, un byte es la cantidad de memoria necesaria para almacenar un solo carácter.
Si desea verificar 'número de bits' en su implementación de C ++, verifique el archivo 'limits.h'. Debería tener una entrada como la siguiente.
PALABRA
Una palabra se define como un número específico de bits que la máquina / sistema puede procesar juntos (es decir, en un intento). Alternativamente, podemos decir que Word define la cantidad de datos que se pueden transferir entre CPU y RAM en una sola operación.
Los registros de hardware en una computadora tienen el tamaño de una palabra. El tamaño de Word también define la dirección de memoria más grande posible (cada dirección de memoria apunta a una memoria del tamaño de un byte).
Nota: en los programas C ++, las direcciones de memoria apuntan a un byte de memoria y no a una palabra.
fuente
Porque no todas las máquinas tienen bytes de 8 bits. Ya que etiquetó esto
C
, busqueCHAR_BIT
enlimits.h
.fuente
Una palabra es el tamaño de los registros en el procesador. Esto significa que las instrucciones del procesador como, agregar, mul, etc. están en entradas del tamaño de una palabra.
Pero la mayoría de las arquitecturas modernas tienen memoria direccionable en fragmentos de 8 bits, por lo que es conveniente usar la palabra "byte".
fuente
En este contexto, una palabra es la unidad que utiliza una máquina cuando trabaja con memoria. Por ejemplo, en una máquina de 32 bits, la palabra tiene una longitud de 32 bits y en una de 64 bits tiene una longitud de 64 bits. El tamaño de la palabra determina el espacio de direcciones.
En programación (C / C ++), la palabra se representa típicamente por el
int_ptr
tipo, que tiene la misma longitud que un puntero, abstrayendo así estos detalles.Sin embargo, algunas API pueden confundirlo, como la API de Win32, porque tiene tipos como
WORD
(16 bits) yDWORD
(32 bits). La razón es que la API inicialmente tenía como objetivo máquinas de 16 bits, luego se transfirió a máquinas de 32 bits y luego a máquinas de 64 bits. Para almacenar un puntero, puede utilizarINT_PTR
. Más detalles aquí y aquí .fuente
Parece que todas las respuestas asumen lenguajes de alto nivel y principalmente C / C ++.
Pero la pregunta está etiquetada como "ensamblaje" y en todos los ensambladores que conozco (para CPU de 8 bits, 16 bits, 32 bits y 64 bits), las definiciones son mucho más claras:
fuente
int<X>_t
yuint<X>_t
(y más) que deben usarse si desea una variable / parámetro de un tamaño de bit específico..word
puede ser de 32 bits (por ejemplo, para Sparc ).Aunque la longitud de una palabra varía, en todas las máquinas modernas e incluso en todas las arquitecturas antiguas con las que estoy familiarizado, el tamaño de la palabra sigue siendo un múltiplo del tamaño del byte. Por lo tanto, no hay ninguna desventaja en el uso de "byte" sobre "8 bits" en relación con el tamaño de palabra variable.
Más allá de eso, aquí hay algunas razones para usar el byte (u octeto 1 ) en "8 bits":
1 Aunque consideraré que un byte tiene 8 bits para esta respuesta, esto no es universalmente cierto: en máquinas más antiguas, un byte puede tener un tamaño diferente (como 6 bits . Octeto siempre significa 8 bits, independientemente de la máquina ( por lo que este término se usa a menudo para definir protocolos de red.) En el uso moderno, byte se usa abrumadoramente como sinónimo de 8 bits.
fuente
Cualquiera que sea la terminología presente en las hojas de datos y los compiladores, un 'Byte' tiene ocho bits. No intentemos confundir a los indagadores y generalidades con las excepciones más oscuras, particularmente porque la palabra 'Byte' proviene de la expresión "By Eight". He trabajado en la industria de semiconductores / electrónica durante más de treinta años y ni una sola vez supe que 'Byte' solía expresar algo más de ocho bits.
fuente
La unidad básica de almacenamiento de la computadora es el bit. Un bit puede contener uno de dos valores, 0 y 1. El resto del almacenamiento en una computadora se basa en colecciones de bits. Con suficientes bits, es sorprendente cuántas cosas puede representar una computadora: números, letras, imágenes, películas, sonidos, documentos y programas, por nombrar algunos. Un byte es de 8 bits y, en la mayoría de las computadoras, es la porción de almacenamiento más pequeña y conveniente. Por ejemplo, la mayoría de las computadoras no tienen una instrucción para moverse un poco, pero tienen una para mover un byte. Un término menos común es palabra, que es la unidad de datos nativa de una arquitectura de computadora determinada. Una palabra se compone de uno o más bytes. Por ejemplo, una computadora que tiene registros de 64 bits y direccionamiento de memoria de 64 bits normalmente tiene palabras de 64 bits (8 bytes). Una computadora ejecuta muchas operaciones en su tamaño de palabra nativa en lugar de un byte a la vez. Almacenamiento de computadora, junto con la mayor parte del rendimiento de las computadoras, generalmente se mide y manipula en bytes y colecciones de bytes. Un kilobyte o KB es 1.024 bytes un megabyte o MB es 1.024 2 bytes por gigabyte o GB es 1.024 3 bytes por terabyte o TB es 1.024 4 bytes un petabyte o PB es 1.024 5 bytes Computadora los fabricantes a menudo redondean estos números y dicen que un megabyte es 1 millón de bytes y un gigabyte es mil millones de bytes. Las mediciones de redes son una excepción a esta regla general; se dan en bits (porque las redes mueven datos un poco a la vez) 024 5 bytes Los fabricantes de computadoras a menudo redondean estos números y dicen que un megabyte es 1 millón de bytes y un gigabyte son mil millones de bytes. Las mediciones de redes son una excepción a esta regla general; se dan en bits (porque las redes mueven datos un poco a la vez) 024 5 bytes Los fabricantes de computadoras a menudo redondean estos números y dicen que un megabyte es 1 millón de bytes y un gigabyte son mil millones de bytes. Las mediciones de redes son una excepción a esta regla general; se dan en bits (porque las redes mueven datos un poco a la vez)
fuente
Si una máquina es direccionable por bytes y una palabra es la unidad más pequeña que se puede direccionar en la memoria, ¡supongo que una palabra sería un byte!
fuente
word
definitivamente significa 32 bits, pero hay unalb
instrucción (byte de carga) que carga 8 bits.Un grupo de 8 bits se llama byte (con la excepción de que no lo es :) para ciertas arquitecturas)
Una palabra es un grupo de bits de tamaño fijo que son manejados como una unidad por el conjunto de instrucciones y / o el hardware del procesador. Eso significa que el tamaño de un registro de propósito general (que generalmente es más de un byte) es una palabra
En la C, una palabra se suele llamar un número entero =>
int
fuente
octet
se definió para denotar explícitamente una secuencia de 8 bits debido a la ambigüedad asociada con el término byte . Pero me gusta el sonido debyte
mejor :)byte
mejor": Sospecho firmemente que no estás solo en esto y seguro para algunos sistemas de nicho, la "confusión" de un byte posiblemente sea de un tamaño diferente al de 8 bits ya no es relevante en estos días.Los términos de BYTE y WORD están relacionados con el tamaño del procesador al que se hace referencia. Los procesadores más comunes son / fueron de 8 bits, 16 bits, 32 bits o 64 bits. Estas son las longitudes de PALABRAS del procesador. En realidad, la mitad de una PALABRA es un BYTE, sea cual sea la longitud numérica. Listo para esto, la mitad de un BYTE es un NIBBLE.
fuente
De hecho, en el uso común, palabra se ha convertido en sinónimo de 16 bits, al igual que byte con 8 bits. Puede resultar un poco confuso ya que el "tamaño de palabra" en una CPU de 32 bits es de 32 bits, pero cuando se habla de una palabra de datos, uno significaría 16 bits. Los microcontroladores con un tamaño de palabra de 32 bits han comenzado a llamar a sus instrucciones "largas" (supuestamente para tratar de evitar la confusión palabra / doble palabra).
fuente
ldrh
cargar 16 bits y extenderlos a cero en un registro de 32 bits. Oldrsh
para cargar y firmar y extender 16 bits.