Arquitectura del procesador: ¿Cuál es la diferencia entre las CPU de 32 bits y las de 64 bits? ¿Cómo aumenta el rendimiento de las CPU de 64 bits?

El “bitness” de un sistema (y específicamente su CPU) generalmente se define como el tamaño de bit de su archivo de registro de propósito general (GPR) y, en menor medida, el ancho del bus del sistema. En máquinas de 32 bits, los GPR tienen un tamaño de 32 bits; en máquinas de 64 bits, los GPR tienen un tamaño de 64 bits.

El GPR es responsable de mantener los valores de datos que la CPU utilizará para el procesamiento. Por lo tanto, representan directamente los tipos de datos en los que la CPU puede trabajar. Al calcular una dirección de memoria, la CPU debe obtener esos datos de un registro (o como parte de la instrucción, que generalmente es mucho más pequeña que un registro en longitud de bits), por lo que el espacio de memoria mapeado directamente de la CPU está limitado a 4GB para una CPU de 32 bits y 16EB para una CPU de 64 bits.

Sin embargo, eso no quiere decir que la CPU no pueda acceder a más de 4 GB de memoria. Las extensiones de dirección física de Intel y las extensiones de virtualización recientes de ARM, por ejemplo, permiten que la CPU acceda a la memoria de más de 4 GB. Sin embargo, se debe utilizar una etapa de traducción para que la CPU lo haga.

Otra implicación de un GPR de 32 bits es que los datos aritméticos (como ADD, multiplicar, etc.) están limitados a 32 bits. Sin embargo, debe tenerse en cuenta que la mayoría de las CPU contienen más que solo la unidad lógica aritmética principal (que opera desde GPR), sino también una unidad de ejecución vectorial o FP (SSE para Intel, NEON para ARM).

Estos operan desde diferentes registros y no dependen del GPR para alimentar sus rutas de datos. En ARMv7-A, se proporcionan instrucciones NEON que pueden funcionar en enteros de 64 bits a pesar de que la arquitectura es “32 bits”. Los registros para la implementación de NEON y SSE tienen un ancho de 128 bits (256 bits para la versión más reciente de SSE).

Cuando habla de la diferencia entre una máquina de 32 bits y una máquina de 64 bits, realmente está preguntando acerca de la CPU. Aquí, la principal diferencia es la cantidad de memoria que se puede abordar. Un espacio de direcciones de 32 bits (la cantidad de memoria que puede consultar directamente) tiene un tamaño de 4 GB, un espacio de direcciones de 64 bits es 16EB (Exabytes).

La cuestión de si una máquina de 64 bits es más rápida que una de 32 bits es mucho más complicada. Primero, depende de si la cantidad de memoria que necesita abordar es mayor que 4 GB. Si es así, eso limitaría lo que una CPU de 32 bits podría almacenar en caché, por ejemplo. Segundo, depende del tipo de aritmética que estés haciendo. Si solo está haciendo un trabajo de enteros de 32 bits, entonces las CPU de 32 bits y 64 bits con optimizaciones matemáticas similares probablemente tendrán un rendimiento similar. Sin embargo, si realiza una aritmética de 64 bits, la CPU de 32 bits necesitará realizar muchas más operaciones para lograr el mismo trabajo.

Por supuesto, esto se complica aún más por el diseño de la CPU, cómo se optimiza, si se hace un trabajo entero o de coma flotante, cómo se ha escrito y compilado el código que usa, etc. En consecuencia, es engañoso suponer que un La CPU de 64 bits es automáticamente más rápida que una de 32 bits.

Diferencias entre una CPU de 32 bits y 64 bits

Una gran diferencia entre los procesadores de 32 bits y los procesadores de 64 bits es la cantidad de cálculos por segundo que pueden realizar, lo que afecta la velocidad a la que pueden completar las tareas. Los procesadores de 64 bits pueden venir en versiones de doble núcleo, cuatro núcleos, seis núcleos y ocho núcleos para la informática doméstica. Múltiples núcleos permiten un mayor número de cálculos por segundo que se pueden realizar, lo que puede aumentar la potencia de procesamiento y ayudar a que una computadora funcione más rápido. Los programas de software que requieren muchos cálculos para funcionar sin problemas pueden funcionar más rápido y más eficientemente en los procesadores multi-core de 64 bits, en su mayor parte.

Otra gran diferencia entre los procesadores de 32 bits y los procesadores de 64 bits es la cantidad máxima de memoria (RAM) que es compatible. Las computadoras de 32 bits admiten un máximo de 3-4 GB de memoria, mientras que una computadora de 64 bits puede admitir cantidades de memoria de más de 4 GB. Esta característica es importante para los programas de software utilizados en diseño gráfico, ingeniería y edición de video, ya que estos programas tienen que realizar muchos cálculos para representar sus imágenes.

Una cosa a tener en cuenta es que los programas y juegos gráficos en 3D no se benefician mucho, si es que lo hacen, de cambiar a una computadora de 64 bits, a menos que el programa sea de 64 bits. Un procesador de 32 bits es adecuado para cualquier programa escrito para un procesador de 32 bits. En el caso de los juegos de computadora, obtendrá un rendimiento mucho mayor al actualizar la tarjeta de video en lugar de obtener un procesador de 64 bits.

Al final, los procesadores de 64 bits se están volviendo cada vez más comunes en las computadoras domésticas. La mayoría de los fabricantes construyen computadoras con procesadores de 64 bits debido a precios más baratos y porque ahora hay más usuarios que utilizan sistemas operativos y programas de 64 bits. Los minoristas de piezas de computadoras ofrecen cada vez menos procesadores de 32 bits y es posible que pronto no ofrezcan ninguno.

Cuando considere las versiones de Windows, puede pensar inmediatamente en las ediciones Home o Pro. Si bien son diferentes, hay otro factor que separa las versiones de Windows, ya sea que el sistema sea de 32 bits o de 64 bits. Es posible que haya escuchado los términos de 32 bits y 64 bits, pero nunca los entendió realmente. Echemos un vistazo a de dónde provienen estas designaciones y qué significan para su experiencia informática

¿Cómo se determina el número de bits?

Si la arquitectura de su computadora es de 32 bits o de 64 bits depende del procesador (también llamado unidad central de procesamiento o CPU) dentro de su computadora. Actualmente, la mayoría de los procesadores informáticos se incluyen en una de estas dos categorías. Los procesadores de 64 bits son exponencialmente más potentes que sus equivalentes de 32 bits, ya que pueden almacenar y procesar mucha más información.

Para comprender la magnitud de las diferencias entre los dos, debe comprender un poco acerca de contar en binario. A diferencia de nuestro sistema decimal, que tiene diez dígitos por lugar, el binario solo tiene dos: 0 o 1.

Por lo tanto, un número de 32 bits tiene 2 ^ 32 direcciones posibles, o 4,294,967,296. Por el contrario, la capacidad de un número de 64 bits es 2 ^ 64, o 18,446,744,073,709,551,616. La comparación de ~ 4 mil millones de bytes (aproximadamente 4 gigabytes) con ~ 18 quintillones de bytes (aproximadamente 18 mil millones de gigabytes) muestra la diferencia.

Microsoft proporciona versiones de Windows de 32 bits y de 64 bits, entre las que puede elegir cuando lo descarga o lo instala.

Cómo Windows diferencia

Si está utilizando un procesador de 64 bits, también debe usar una versión de Windows de 64 bits para aprovecharlo. Las versiones de 32 bits de Windows funcionan en procesadores de 64 bits, pero no pueden usar la potencia adicional. No puede instalar una versión de Windows de 64 bits en procesadores de 32 bits, pero Windows de 64 bits es compatible con versiones anteriores de software de 32 bits, como veremos más adelante.

Hay dos grandes lugares donde notarás esta diferencia en Windows. Una es que una versión de Windows de 32 bits solo puede utilizar hasta 4 GB de RAM (o menos). Por lo tanto, si coloca 16 GB de RAM en una instalación de Windows de 32 bits, en realidad no está utilizando más de 4 GB.

El otro lugar donde encontrará una diferencia es la carpeta Archivos de programa. En una versión de Windows de 32 bits, las aplicaciones se instalarán en la única carpeta de Archivos de programa . Sin embargo, los sistemas de 64 bits tienen una carpeta adicional de Archivos de programa (x86) . Esto se debe a que escribir software para una arquitectura de 32 bits es muy diferente de escribirlo para un sistema de 64 bits.

Cuando los programas necesitan obtener información compartida, como archivos DLL, para ejecutarse, deben buscar en el directorio correcto de Archivos de programa. Es por eso que Windows los mantiene separados. Tenga en cuenta que en Windows, 32 bits se conoce como x86 y 64 bits se llama x64 .

Las versiones antiguas de Windows, como Windows 3.1, ejecutaban software de 16 bits. Las versiones de 32 bits de Windows son compatibles con estos programas heredados. Sin embargo, si tiene una máquina de 64 bits, no puede ejecutar un software anterior de 16 bits. Tendrás que pasar a emular un sistema operativo de 32 bits.

Programas de 32 bits y 64 bits

Cada vez que instala algún software, varía según el proveedor si obtiene una versión de 32 bits o de 64 bits. Algunos desarrolladores solo proporcionan una versión de 32 bits, a veces le permiten elegir, y otros instalan automáticamente la versión correcta para usted. Si está ejecutando una versión de Windows de 64 bits, debe instalar las versiones de software de 64 bits siempre que pueda.

Como se probó con Google Chrome, estas versiones x64 probablemente no te dejarán boquiabierto con una velocidad increíble. Sin embargo, aprovechan la mayor seguridad de la arquitectura de 64 bits y podrían ser más estables y eficientes que sus contrapartes x86.

Esté atento a enlaces como Versiones o Ediciones en las páginas de descarga de los proveedores para ver si ofrecen una versión de 64 bits. Debido a que el software de 32 bits funciona para todos, es comprensiblemente el predeterminado para la mayoría de los proveedores. Por supuesto, si está en un sistema de 32 bits, solo el software de 32 bits funcionará para usted.

¿Qué estoy ejecutando y puedo actualizar?

Ahora que hemos discutido todos los detalles sobre las versiones de Windows de 32 y 64 bits, podemos averiguar qué versión está utilizando.

Hay muchas maneras de hacerlo, pero la más fácil es abrir el diálogo del Sistema . En Windows 8 o Windows 10, haga clic con el botón derecho en el botón Inicio y seleccione Sistema . En Windows 7 o anterior, haga clic con el botón derecho en Equipo y elija Propiedades . También puede usar el atajo de Windows Key + Pause para abrir este menú.

Aquí verá información básica sobre su computadora, como si su versión de Windows es Home o Pro. En Tipo de sistema , Windows le dirá si su sistema operativo y procesador son de 64 bits o no. También puede ver su RAM instalada aquí. En un sistema de 32 bits, esto notará algo como 4 GB utilizables si tiene más de 4 GB instalados.

Los tamaños de bits de su procesador y sistema operativo deben coincidir, pero si no lo hacen, es posible que pueda actualizar. Si está ejecutando una versión de Windows 10 de 32 bits en un procesador de 64 bits, puede actualizar a Windows x64. Aquellos que ejecutan una versión de Windows de 32 bits en un procesador de 32 bits no pueden actualizar; necesitará comprar una nueva máquina para aprovechar 64 bits.

Bits suficientes

La informática de 64 bits se está convirtiendo en el nuevo estándar, pero ha sido un camino difícil llegar hasta aquí. Si bien había versiones de 64 bits de Windows XP disponibles, fue un dolor de cabeza lidiar con sus problemas de compatibilidad, por lo que no mucha gente lo usó. El uso de sistemas de 64 bits no se hizo demasiado popular hasta Windows 7, y hoy continúa hasta Windows 10.

4 GB de RAM, que era una cantidad insondable cuando se diseñaron las CPU por primera vez, sigue siendo una cantidad viable de memoria en 2016. Sin embargo, a medida que los precios de los componentes continúen cayendo, las máquinas de gama baja probablemente se enviarán con más RAM, lo que generará 32 bits sistemas eventualmente obsoletos.

Esto a su vez hará que los desarrolladores se concentren en desarrollar software de 64 bits, que será el estándar durante mucho, mucho tiempo. ¡Probablemente no alcanzaremos el techo de 2,305 petabytes de RAM en el corto plazo!

Fuera de mi cabeza, aquí están las diferencias más notables al pasar de una arquitectura de 32 bits a 64 bits. Me referiré principalmente a x86 frente a x86-64, porque esas son, con mucho, las plataformas más comunes de 32 y 64 bits.

  • Hay más memoria disponible para los programas. Una dirección de memoria de 32 bits significa referir hasta 4 GB de memoria. La arquitectura x86-64 permite direcciones de memoria de 48 bits, lo que genera hasta 256 TB de memoria direccionable.
  • Los programas ocupan más memoria y espacio en el disco. Otra consecuencia de que las direcciones de memoria duplican su tamaño es que cada puntero de dirección en un programa dado duplica su tamaño, y un programa típico (compilado en código nativo) tiene muchísimos punteros. El tamaño entero predeterminado también se duplica; dependiendo de la forma en que se compiló el programa, podría usar este tamaño predeterminado más grande.
  • Los programas se pueden optimizar mejor. El propósito general de la CPU registra el doble en tamaño y número. El doble del tamaño del registro significa que las instrucciones SIMD pueden operar en más datos por ciclo de reloj (también ayuda el doble de la cantidad de registros XMM, ya que su propósito principal es SIMD), y el doble de la cantidad de registros ayuda a un compilador a mantener más cerca de los datos necesarios la CPU, donde un programa equivalente de 32 bits tendría que recurrir a más empuje y extracción de los datos hacia / desde la memoria.

Aquí está la respuesta técnica:

En primer lugar, la “bitness” de una computadora (llamada “arquitectura” en la mayoría de los círculos) se refiere a la CPU y el bus de memoria, específicamente, el ancho del bus y el tamaño del conjunto de instrucciones de la CPU. Una CPU de 32 bits tiene instrucciones de 32 bits (4 bytes) de ancho, y puede operar con hasta 4 bytes de datos por núcleo por ciclo de reloj. Trabajar con datos más grandes (por ejemplo, un número entero de 64 bits o un número de coma flotante de doble precisión) requiere más ciclos de reloj y, por lo tanto, es más lento.

Una CPU de 64 bits tiene 8 bytes disponibles para instrucciones y datos. El número de instrucciones no es realmente un problema incluso con 32 bits (las CPU realmente no tienen muchas instrucciones distintas), pero el ancho de banda adicional hace posible que la CPU tome más datos en cada instrucción individual, múltiples instrucciones a la vez o piezas de datos más grandes. También puede operar en tipos de datos que tienen 64 bits de ancho en un solo ciclo de reloj, haciendo que tales operaciones sean mucho más eficientes.

Una cosa más que vale la pena señalar es que una CPU de 32 bits solo puede direccionar hasta 4 GB de memoria, que según los estándares actuales es demasiado pequeña para ser útil en la mayoría de los casos. Una CPU de 64 bits, por otro lado, en teoría puede abordar hasta 16 EXABYTES (es decir, 16,384 petabytes, o más de 16 millones de terabytes, o más de 16 mil millones de gigabytes), por lo que no excederemos los 64- capacidad de memoria de la CPU de poco tiempo pronto.

Ahora para una respuesta no técnica:

Una computadora de 32 bits puede manejar hasta 4 gigabytes de memoria, mientras que una computadora de 64 bits puede manejar muchas veces más. Los sistemas de 64 bits pueden ser mucho más rápidos y más eficientes que las computadoras de 32 bits que funcionan a la misma velocidad porque pueden hacer más de una vez.

(Esa es realmente la respuesta técnica en pocas palabras. Por supuesto, hay muchos más detalles que están incluso más allá de mi nivel de conocimiento, pero esos son los más importantes).

(EDITAR: Gracias a Richard Collier por corregir mis matemáticas en exabytes. :))

En la práctica, el paso de 32 bits a 64 bits agrega mucho más que solo ptrs más grandes (por ejemplo, más espacio de direcciones de memoria) y registros más amplios (incluyendo más paralelismo en los registros para operaciones ALU, como MACS flotante de 4 vías de SSE4), aunque esos cambios son agradables y notables también. Intel y AMD también utilizaron esta oportunidad de “actualización” para volver a visitar / cambiar muchas cosas importantes no relacionadas con el número de bits per se. Por ejemplo, la convención de llamadas de funciones cambió: menos uso de pila y más uso de (más) registros … y ya no es necesario usar un registro de puntero base para el marco de pila (el registro de puntero de pila también puede manejar eso, con el nuevo convención introducida para 64 bits). Un fragmento específico de código de 64 bits no es necesariamente más rápido que un equivalente de 32 bits; podría ser incluso más lento si su código dice que necesita leer una gran cantidad de ptrs (más grandes) de 64 bits de las tablas de memoria, por ejemplo. Pero el código y las convenciones de 64 bits son más flexibles, y eso, junto con la disponibilidad de más registros, hace que las CPU Intel / AMD de 64 bits modernas sean mucho más tolerables y parecidas a RISC que nunca.

Diferencias:

  • Un procesador de 32 bits tiene acceso a 2 ^ 32 o aproximadamente 4 GB de memoria virtual. En un procesador de 64 bits, esto aumenta a 2 ^ 64 o 16 exabytes. Cuanto mayor sea la cantidad de memoria disponible, mayor será la capacidad disponible para almacenar datos, lo que implica menos golpes en el disco duro. Dado que leer y escribir en la memoria es mucho más rápido que en el disco, este es un factor enorme en términos de rendimiento.
  • Una CPU típica de 32 bits tiene solo 8 registros. En una arquitectura de 64 bits, esto aumenta a 16. ¿Qué significa esto que preguntas? Registrarse es como la capa de caché entre el procesador y la memoria. Por lo tanto, es mucho más rápido almacenar y acceder a datos desde / hacia un Registro en contraste con la memoria principal. Más registros significan más capacidad para almacenar datos y menos acceso a la memoria misma. De nuevo un impulso en el rendimiento.
  • La arquitectura de 64 bits admite tipos de datos más grandes.
  • Yendo un poco más profundo, hay optimizaciones hechas a la Arquitectura del conjunto de instrucciones que reducen los preciosos ciclos de reloj.
  • Mejor rendimiento y precisión en operaciones de punto flotante. Por lo tanto, las máquinas de 64 bits se pueden usar para cálculos más pesados, lo que las hace útiles para aplicaciones que implican la manipulación de grandes conjuntos de datos, como la informática científica, las bases de datos y la minería de datos.

Los primeros 32 bits y 64 bits se llaman arquitecturas.

Estas arquitecturas significan cuántos datos procesará un microprocesador dentro de un ciclo de instrucción, es decir, buscar-decodificar-ejecutar. Ponerlos en una lista.

  1. cantidad de cálculos por segundo que pueden realizar, lo que afecta la velocidad a la que pueden completar las tareas. – Es uno importante.
  2. La cantidad máxima de RAM que es compatible. Las computadoras de 32 bits admiten un máximo de 3-4 GB de memoria, mientras que una computadora de 64 bits puede admitir cantidades de memoria de más de 4 GB.

Algunos puntos que deben ser atendidos son:

  1. Una computadora con un procesador de 64 bits puede tener una versión de 64 bits o 32 bits de un sistema operativo. Sin embargo, con un sistema operativo de 32 bits, el procesador de 64 bits no funcionaría a su máxima capacidad.
  2. Con un procesador de 64 bits, no puede ejecutar un programa heredado de 16 bits.

La principal diferencia es el aumento del espacio virtual. Cuando hablamos de espacio de direcciones físicas, depende literalmente de la implementación de la CPU. Basado en la arquitectura Arm, se admiten hasta 48 bits de dirección física. Donde, como la mayoría de las implementaciones, aún admiten un espacio de direcciones de 40 bits, que incluso era posible con la arquitectura de 32 bits y el modo LPAE activado.
Otra diferencia es que el tamaño y el número del registro arquitectónico se duplican.

La ventaja realmente proviene de una mayor cantidad de registros arquitectónicos. Con eso, los compiladores pueden romper fácilmente las dependencias de registros falsos. También menos número de accesos a la memoria para las variables utilizadas en el bucle, ya que pueden mantenerse en el archivo de registro.

Espero que esto ayude.

Usted preguntó: “¿Cómo aumenta el rendimiento para las CPU de 64 bits?” La respuesta es, para los programas vinculados a la CPU, el rendimiento no aumenta con 64 bits frente a 32 bits. Si dos programas son exactamente iguales, excepto que uno se compila con un compilador de 32 bits y el otro con un compilador de 64 bits, y ambos se ejecutan en una computadora de 64 bits, que también ejecutará programas de 32 bits, y el La tarea del programa utiliza mucho la CPU, el programa de 32 bits será más rápido. La razón de esto es que los programas de 64 bits deben usar punteros de dirección de memoria de 8 bytes (para direccionar más de 4 GB de memoria), mientras que los programas de 32 bits necesitan solo 4 bytes para un puntero de dirección de memoria. Dado que la aritmética del puntero y la manipulación del puntero son una gran parte de casi todos los programas de computadora, para las tareas vinculadas a la CPU, los programas de 64 bits son más grandes y requieren más tiempo para ejecutarse.

La ventaja de una CPU y un programa de 64 bits es la cantidad casi ilimitada de memoria que se puede abordar. Si necesita resolver grandes problemas, lo más probable es que necesite 64 bits.

Es muy sencillo.

Un procesador de 32 bits puede funcionar con 32 bits a la vez. Un procesador de 64 bits puede funcionar con 64 bits a la vez.

Explicacion :
Bit es la unidad más pequeña de memoria de la computadora. Puede ser 0 o 1 , en cualquier momento dado.
Entonces, un procesador de 32 bits puede manejar una secuencia como:
xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx
donde x puede ser 0 o 1 .

Del mismo modo, un procesador de 64 bits puede manejar una secuencia como:
xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx .

Sin embargo, aunque el no. de bits procesados ​​aquí es solo el doble del no. de bits que se procesan en un procesador de 32 bits PERO las capacidades de procesamiento de un procesador de 64 bits son exponencialmente mayores que las de un procesador de 32 bits.

Imagina que estás jugando un juego en el que tienes que llenar una caja con monedas. Es un deporte de equipo y todas las monedas están en una bolsa. Las reglas del juego son que el equipo se divide en dos: usted (el relleno) y los demás (los ayudantes).

Los oficiales han establecido una restricción de que habrá una cierta cantidad de fichas y la cantidad de ayudantes que un equipo puede usar estará determinada por la cantidad de fichas asignadas al equipo. Es un evento de dos días.

Llegará al lugar del evento unos 10 minutos antes de la hora de inicio estipulada. Para su sorpresa, encontrará que todos los otros equipos ya han llegado y usted es el último en llegar. Los tokens se asignan por orden de llegada y aunque eres un equipo de 65 miembros, solo hay 32 tokens. Entonces terminas usando solo 32 ayudantes.

Al día siguiente, llegas una hora antes y puedes encontrar fichas para todos tus compañeros de equipo. Entonces juegas con 64 ayudantes.

Entre estas dos situaciones, la segunda habría llevado a una finalización más rápida del trabajo porque 64 miembros tenían acceso a las monedas en la bolsa, mientras que en el primer escenario, solo 32 miembros lo hacían.


La informática de 32 y 64 bits es un poco así (sin juego de palabras). La máquina puede usar una dirección de 64 bits, lo que significa que puede acceder a 2 ^ 64 bits en cualquier momento dado si es necesario, en un modo de direccionamiento de 32 bits solo puede acceder a 2 ^ 32 bits en cualquier momento dado si es necesario.

La única diferencia entre el modo de 16 bits y el modo de 32 bits en una Intel 80386+ es el significado y el uso de los prefijos operandsize- y addressize-. Comenzando con un Intel 80386, es posible utilizar en el modo de 16 bits todo el registro de CPU de 32 bits, también para direccionar los 4 GB completos del espacio de direcciones de 32 bits también.

Puñal

Intel:
Los prefijos de instrucciones se pueden usar para anular el tamaño de operando predeterminado y el tamaño de dirección de un segmento de código. Estos prefijos se pueden usar en modo de dirección real, así como en modo protegido y en modo virtual-8086. Un prefijo de tamaño de operando o de dirección solo cambia el tamaño durante la duración de la instrucción.

Los siguientes dos prefijos de instrucciones permiten mezclar operaciones de 32 bits y 16 bits dentro de un segmento:
• El prefijo de tamaño de operando (66H)
• El prefijo de tamaño de dirección (67H)

Estos prefijos invierten el tamaño predeterminado seleccionado por la bandera D en el descriptor de segmento de código. Por ejemplo, el procesador puede interpretar la instrucción (MOV mem, reg) de cualquiera de las cuatro maneras siguientes:
• En un segmento de código de 32 bits:
—Mueve 32 bits de un registro de 32 bits a la memoria utilizando una dirección efectiva de 32 bits.
—Si va precedido de un prefijo de tamaño de operando, mueve 16 bits de un registro de 16 bits a la memoria utilizando una dirección efectiva de 32 bits.
—Si precedido por un prefijo de tamaño de dirección, mueve 32 bits de un registro de 32 bits a la memoria usando una dirección efectiva de 16 bits.
—Si va precedido por un prefijo de tamaño de dirección y un prefijo de tamaño de operando, mueve 16 bits de un registro de 16 bits a la memoria utilizando una dirección efectiva de 16 bits.

• En un segmento de código de 16 bits:
—Mueve 16 bits de un registro de 16 bits a la memoria usando una dirección efectiva de 16 bits.
—Si va precedido de un prefijo de tamaño de operando, mueve 32 bits de un registro de 32 bits a la memoria utilizando una dirección efectiva de 16 bits.
—Si va precedido de un prefijo de tamaño de dirección, mueve 16 bits de un registro de 16 bits a la memoria utilizando una dirección efectiva de 32 bits.
—Si va precedido por un prefijo de tamaño de dirección y un prefijo de tamaño de operando, mueve 32 bits de un registro de 32 bits a la memoria utilizando una dirección efectiva de 32 bits.

Los ejemplos anteriores muestran que cualquier instrucción puede generar cualquier combinación de tamaño de operando y tamaño de dirección, independientemente de si la instrucción está en un segmento de 16 o 32 bits. La elección del valor predeterminado de 16 o 32 bits para un segmento de código normalmente se basa en los siguientes criterios:
• Rendimiento: utilice siempre segmentos de código de 32 bits cuando sea posible. Se ejecutan mucho más rápido que los segmentos de código de 16 bits en los procesadores de la familia P6, y algo más rápido en los procesadores IA-32 anteriores.
• El sistema operativo en el que se ejecutará el segmento de código: si el sistema operativo es un sistema operativo de 16 bits, es posible que no admita módulos de programa de 32 bits.
• Modo de operación: si el segmento de código se está diseñando para ejecutarse en modo de dirección real, modo virtual-8086 o SMM, debe ser un segmento de código de 16 bits.
• Compatibilidad con versiones anteriores de procesadores IA-32 anteriores: si un segmento de código debe poder ejecutarse en un procesador Intel 8086 o Intel 286, debe ser un segmento de código de 16 bits.

El indicador D en un descriptor de segmento de código determina el tamaño de operando y el tamaño de dirección predeterminados para las instrucciones de un segmento de código. (En el modo de dirección real y el modo virtual-8086, que no usan descriptores de segmento, el valor predeterminado es 16 bits). Un segmento de código con su conjunto de banderas D es un segmento de 32 bits; un segmento de código con su bandera D limpia es un segmento de 16 bits.

Segmento de código ejecutable. La bandera se llama bandera D e indica la longitud predeterminada para direcciones y operandos efectivos a los que hacen referencia las instrucciones en el segmento. Si se establece el indicador, se supone que las direcciones de 32 bits y los operandos de 32 bits u 8 bits; si está claro, se suponen direcciones de 16 bits y operandos de 16 u 8 bits.
El prefijo de instrucción 66H se puede usar para seleccionar un tamaño de operando que no sea el predeterminado, y el prefijo 67H se puede usar para seleccionar un tamaño de dirección que no sea el predeterminado.

El prefijo de operando de 32 bits se puede usar en programas de modo de dirección real para ejecutar las formas de instrucciones de 32 bits. Este prefijo también permite que los programas en modo de dirección real utilicen los registros de propósito general de 32 bits del procesador.
El prefijo de dirección de 32 bits se puede usar en programas de modo de dirección real, lo que permite compensaciones de 32 bits.

Los procesadores IA-32 que comienzan con el procesador Intel386 pueden generar compensaciones de 32 bits utilizando un prefijo de anulación de dirección; sin embargo, en el modo de dirección real, el valor de un desplazamiento de 32 bits no puede exceder FFFFH sin causar una excepción.

Uso del ensamblador:
Si se define un segmento de código que se ejecutará en modo de dirección real, debe establecerse en un atributo USE 16. Si se utiliza un operando de 32 bits en una instrucción en este segmento de código (por ejemplo, MOV EAX, EBX), el ensamblador genera automáticamente un prefijo de operando para la instrucción que obliga al procesador a ejecutar una operación de 32 bits, aunque El atributo predeterminado del segmento de código es de 16 bits.

El prefijo de operando de 32 bits permite que un programa de modo de dirección real use los registros de propósito general de 32 bits (EAX, EBX, ECX, EDX, ESP, EBP, ESI y EDI).

Al mover datos en modo de 32 bits entre un registro de segmento y un propósito general de 32 bits
registrarse, el procesador Pentium Pro no requiere el uso de un prefijo de tamaño de operando de 16 bits;
sin embargo, algunos ensambladores requieren este prefijo. El procesador supone que los 16 menos significativos
Los bits del registro de uso general son el operando de destino o de origen. Al mover un
valor de un selector de segmento a un registro de 32 bits, el procesador llena los dos bytes de alto orden de
el registro con ceros.

————————————————–

AMD:
3.3.2. Dirección de 32 bits frente a 16 bits y tamaños de operandos
El procesador puede configurarse para direcciones de 32 bits o 16 bits y tamaños de operandos. Con 32 bits
dirección y tamaños de operando, la dirección lineal máxima o el desplazamiento del segmento es FFFFFFFFH
(232-1), y los tamaños de operando son típicamente de 8 bits o 32 bits. Con direcciones de 16 bits y tamaños de operandos,
la dirección lineal máxima o el desplazamiento de segmento es FFFFH (216-1), y los tamaños de operando son típicamente
8 bits o 16 bits.
Cuando se utiliza el direccionamiento de 32 bits, una dirección lógica (o puntero lejano) consiste en un segmento de 16 bits.
selector y un desplazamiento de 32 bits; cuando se usa el direccionamiento de 16 bits, consiste en un selector de segmento de 16 bits
y un desplazamiento de 16 bits.
Los prefijos de instrucciones permiten anulaciones temporales de la dirección predeterminada y / o tamaños de operando de
dentro de un programa.
Cuando se opera en modo protegido, el descriptor de segmento para el código actualmente en ejecución
El segmento define la dirección predeterminada y el tamaño del operando. Un descriptor de segmento es un dato del sistema
estructura normalmente no visible para el código de la aplicación. Las directivas de ensamblador permiten el valor predeterminado
direccionamiento y tamaño de operando a elegir para un programa. El ensamblador y otras herramientas luego establecen
arriba el descriptor de segmento para el segmento de código adecuadamente.
Cuando se opera en modo de dirección real, el tamaño predeterminado de direccionamiento y operando es de 16 bits. Un
la anulación del tamaño de la dirección se puede usar en el modo de dirección real para habilitar el direccionamiento de 32 bits; sin embargo, el
la dirección lineal máxima permitida de 32 bits sigue siendo 000FFFFFH (220-1).

3.6. ATRIBUTOS DE TAMAÑO DE OPERACIÓN Y TAMAÑO DE DIRECCIÓN
Cuando el procesador se ejecuta en modo protegido, cada segmento de código tiene un tamaño de operación predeterminado
atributo y atributo de tamaño de dirección. Estos atributos se seleccionan con la D (tamaño predeterminado)
indicador en el descriptor de segmento para el segmento de código (consulte el Capítulo 3, Memoria en modo protegido
Administración, en el Manual del desarrollador de software de arquitectura Intel, Volumen 3). Cuando el D
se establece el indicador, se seleccionan los atributos de tamaño de operando y tamaño de dirección de 32 bits; cuando la bandera es clara,
Se seleccionan los atributos de tamaño de 16 bits. Cuando el procesador se ejecuta en modo de dirección real,
modo virtual-8086, o SMM, los atributos predeterminados de tamaño de operando y tamaño de dirección son siempre 16
bits
El atributo de tamaño de operando selecciona los tamaños de operandos en los que operan las instrucciones. Cuando el
El atributo de tamaño de operando de 16 bits está en vigor, los operandos generalmente pueden ser de 8 o 16 bits, y
cuando el atributo de tamaño de operando de 32 bits está en vigor, los operandos generalmente pueden ser de 8 bits o 32 bits.
El atributo de tamaño de dirección selecciona los tamaños de las direcciones utilizadas para la memoria de direcciones: 16 bits o 32
bits Cuando el atributo de tamaño de dirección de 16 bits está en vigor, los desplazamientos y desplazamientos de segmento son 16
bits Esta restricción limita el tamaño de un segmento que se puede direccionar a 64 KBytes. Cuando el
El atributo de tamaño de dirección de 32 bits está en vigor, los desplazamientos de segmento y los desplazamientos son de 32 bits, lo que permite
segmentos de hasta 4 GBytes para ser abordados.
El atributo predeterminado de tamaño de operando y / o el atributo de tamaño de dirección se pueden anular para un determinado
instrucción agregando un prefijo de tamaño de operando y / o tamaño de dirección a una instrucción (vea
“Prefijos de instrucciones” en el Capítulo 2 del Manual del desarrollador de software de arquitectura Intel,
Volumen 3). El efecto de este prefijo se aplica solo a la instrucción a la que está adjunto.
La Tabla 3-1 muestra el tamaño efectivo del operando y el tamaño de la dirección (cuando se ejecuta en modo protegido)
dependiendo de la configuración de la bandera D y los prefijos de tamaño de operando y tamaño de dirección.

Muy bien, déjame explicarte.

32 bits : – Por lo general, es mejor para aquellos sistemas que tienen menos de 4 GB de RAM, ya que ejecutará su sistema más rápido. Y si instala un sistema operativo de 64 bits en un sistema cuya RAM es inferior a 4 GB, definitivamente lo ejecutará, pero notará una gran cantidad de consumo de RAM en comparación con el sistema operativo de 32 bits. Tiene una restricción de 4 GB de RAM, significa que solo puede usar 4 GB de RAM máxima. Entonces, si desea instalar más de 4 GB, entonces no lo usará. ( Teóricamente tiene una restricción de 4 GB, pero la restricción real y práctica es de 3.76 GB )

64 bits : es el tipo de sistema operativo más utilizado en la actualidad. Puede instalar hasta 128 GB de RAM como máximo y su sistema operativo de 64 bits lo utilizará todo. Es mucho más rápido en comparación con el sistema operativo de 32 bits. Especialmente diseñado para la multitarea, obtendrá el beneficio completo de su RAM. Antes era muy difícil obtener controladores de sistema de 64 bits, pero hoy se ha convertido en algo normal. También existe la ventaja de que puede instalar y usar software de 32 bits en un sistema operativo de 64 bits, pero tampoco puede usar programas de 16 bits que solo puede usar en un sistema operativo de 32 bits. Solo puede ejecutar el sistema operativo de 64 bits en su sistema cuando su procesador también es de 64 bits.

Y si aún necesita más información sobre la diferencia entre el sistema operativo de 32 bits y 64 bits, visite este enlace (¿Cuál es la diferencia entre una CPU de 32 bits y 64 bits?)

Espero que esto pueda ayudarte 🙂

¡Gracias por preguntar!

En general, los sistemas de 64 bits funcionan un poco más lento porque las direcciones más grandes significan que el código es más grande y hay un poco más de tráfico de memoria.

Sin embargo, en la arquitectura Intel x86_64 (AMD64) hay grandes mejoras en el conjunto de instrucciones, los códigos binarios que ejecuta el hardware. En lugar de aproximadamente 5 registros para trabajar con restricciones funky, la arquitectura de 64 bits tiene 16 registros honestos de propósito general. Esto permite que los compiladores generen un mejor código y reduce drásticamente los “derrames de registros” donde los valores intermedios deben almacenarse temporalmente en la memoria. También permite una convención de llamada de función más eficiente donde los parámetros se pasan en registros en lugar de en la pila

Una de las nuevas características que no aprecié hasta que miré el código generado son las mejoras para el Código Independiente de Posición (PIC). Este es un código que se puede cargar en cualquier lugar de la memoria virtual y ejecutar, en lugar de estar vinculado para ejecutarse en una ubicación específica. Los nuevos modos de direccionamiento relativos al contador de instrucciones reducen el número de indirectos requeridos. El PIC es importante porque las bibliotecas compartidas y (con algunos movimientos manuales) DDL son PIC, por lo que la misma memoria de código físico se puede asignar donde sea necesario en muchos procesos diferentes. Dado que las bibliotecas compartidas y las DLL se usan con tanta frecuencia, esta es una gran mejora.

Por lo tanto, los espacios de direcciones más grandes son agradables, para x86_64 la gran victoria es el mejor conjunto de instrucciones. El conjunto de instrucciones de los procesadores de Intel de 32 bits que no son de Intel no se remontan a la década de 1970 y son más modernos (es decir, sin gritos de mejora), por lo que hicieron pocos cambios a 64 bits.

32 bits o 64 bits define cuánto binario puede procesar el procesador en un ciclo de CPU. Ahora, ¿qué es este ciclo de CPU? Es exactamente una pequeña estructura de datos que la CPU carga en la memoria para realizar cálculos aritméticos.

Lo explicaré de una manera mucho mejor. supongamos que tiene dos espacios en blanco, y se le permite poner solo un dígito en un espacio en blanco. además, suponga que desea hacer un cálculo de 23 + 5 … Ahora, de manera muy simple, carga 23 en los dos primeros espacios en blanco y 05 en otros dos espacios en blanco, ahora usa cálculos matemáticos simples para resolverlo y vuelve a poner la respuesta en dos espacios en blanco, es decir, 28. Esto muestra Si tenemos un límite de 2 espacios en blanco, aún podemos hacer un cálculo aritmético de 1 dígito numérico simplemente poniendo cero. Así es como realmente la CPU hace los cálculos. (es decir, movzx y movsx) Pero no puede hacer una aritmética de números que necesite más de 2 espacios en blanco.

Del mismo modo, un procesador de 32 bits puede procesar instrucciones de 16 y 32 bits, pero no puede procesar 64 bits.

Los sistemas operativos están diseñados (debería usar el kernel de Word) para el arco x86 (32 bits) y x64 (64 bits). no significa que el kernel de 32 bits no pueda ejecutarse en un procesador de 64 bits. Exactamente puede y teóricamente posible también, pero ese no es un punto de vista muy útil y rentable. Ejecutar Kernel de 32 bits en un procesador de 64 bits es un desperdicio de memoria (literalmente, el desperdicio de esos espacios en blanco) y, de manera más específica, también estamos perdiendo mucha memoria, y es por eso que solo los núcleos de 64 bits están especialmente diseñados para el procesador de 64 bits.
También se pueden utilizar emulaciones o virtualizaciones adicionales para ejecutar un programa de 64 bits en un procesador de 32 bits. Pero eso reducirá la velocidad de ejecución, ¿por qué?
bueno, supongamos de nuevo que dos preguntas en blanco. ahora cambiemos la pregunta. tenemos que hacer una suma aritmética de 235 + 5. ¡Ah! ¿Ahora cómo hacer esto? bien simple supongamos 6 espacios en blanco.
0 2 3 5: En los primeros 4 espacios en blanco
0 5: en otros 2 espacios en blanco
Ahora, lo que el procesador hace exactamente es sumar 35 + 05, es decir, 40 y luego presionar el indicador de acarreo, en este caso no tenemos acarreo para empujar. Ahora el procesador llega a 02 + carry, es decir, 2 por lo tanto, el resultado es 240. A medida que tomó más ciclos de CPU. por lo tanto, ralentizará el procesamiento. Una cosa más que estos cálculos necesitan la ayuda de la emulación porque el procesador todavía no puede hacer dicho cálculo, por lo que el emulador le dice que haga esto por partes (igual que lo que hemos hecho anteriormente).

Por favor ignore el error gramatical 😉

En general, cuando aumenta la cantidad de bits tiene algunos beneficios. Más bits significa que se puede procesar una mayor cantidad de datos en el mismo intervalo de tiempo. También significa que un sistema puede direccionar un mayor número de ubicaciones en la memoria física.

Entonces, al menos en teoría, todo el sistema se está acelerando, haciendo cálculos más rápido. Pero, en la práctica, también depende de que el software comience a procesarse. Es posible que los softwares mal codificados no utilicen todo lo que proporciona la CPU de 64 bits.

Un sistema de 32 bits puede acceder a 2 ** 32 (4,294,967,296) direcciones de memoria. En términos prácticos, una computadora de 32 bits está limitada a acceder a 4,294,967,296 bytes (4 GB) de RAM. El procesador de 64 bits puede acceder a 2 ** 64 direcciones de memoria. Esto no es el doble que un procesador de 32 bits, sino 2 ** 32 (4,294,967,296) veces más. Esto significa que una máquina de 64 bits podría acceder teóricamente a 18,446,744,073,709,551,616 direcciones de memoria o más de 18 mil millones de GB de RAM.

Encontrará muchas respuestas similares en línea, pero el siguiente artículo me pareció muy útil.

32 bits y 64 bits explicados

Saludos,

Shreeram

Por el contrario con la noción tradicional, los sistemas de 64 bits también pueden tener sus propias desventajas:

Por ejemplo, las CPU con un bus de direcciones de 64 bits (así como de datos) tienen un peor rendimiento de I-cache y D-cache en general que sus contrapartes de 32 bits. Esto se debe al hecho de que una RAM estática que está alineada con los requisitos de un mapa de memoria de 64 bits sería extremadamente difícil para los proveedores de meter el mismo dado de silicio junto con las otras unidades de la CPU, ya que el requisito de tamaño de el caché crece exponencialmente a medida que aumenta el ancho del bus de direcciones. Por lo tanto, los proveedores de CPU deben estar contentos con una cantidad moderada de caché para sus CPU de 64 bits, independientemente de la arquitectura.

Además, si una aplicación que se ejecuta en un sistema de 64 bits no depende en gran medida de las operaciones de enteros de 64 bits, entonces la aceleración sería insignificante en comparación con que se ejecute en una versión de 32 bits del mismo sistema.

More Interesting

¿Sería posible que alguien dentro de 50 años descargue archivos de una computadora a partir de 2017 y los convierta a un formato viable para una computadora de esa época? Suponiendo que la computadora funciona correctamente y tiene una fuente de alimentación.

¿La inteligencia artificial es fácil para una persona que no es de TI?

¿Cuáles son las aplicaciones de la informática afectiva en los negocios electrónicos?

¿Cuál será la próxima gran cosa después de 'big data' en tecnología financiera?

¿Los problemas NP-hard que no están en NP necesitan un nuevo nombre?

¿Las computadoras de alto rendimiento usan unidades híbridas (SSHD)?

¿Cuál es una buena idea de aprendizaje automático simple pero pasada por alto para LinkedIn?

¿Qué se necesita para crear una aplicación web de servicio como Care.com?

¿Cuál es la ventaja del modelo basado en reglas en comparación con el modelo basado en aprendizaje automático?

Mapas: ¿Dónde podemos encontrar la lista de todos los pueblos de la India con su longitud y latitud?

Cómo determinar la cantidad de FLOP que mi computadora es capaz de

Mientras instalaba Mavericks OS X en mi PC con Windows 7 usando una máquina virtual, arrojó un error que decía 'Mac OS X no es compatible con la traducción binaria. Para ejecutar Mac OS X, necesita un host en el que VMware Player sea compatible con Intel VT-x o AMD-V '. ¿Cómo puedo arreglar esto?

¿Cuál es la diferencia entre una combinación 'perfecta' y una combinación 'estable'?

¿Qué es un subgrafo predecesor?

¿Qué es el hack funtenna?