X86-64

[miniatura|[AMD Opteron, a primeira CPU en introducir as extensións x86-64 en abril de 2003]]
dereita|miniatura|O conxunto de cinco volumes do ''Architecture Programmer's Manual x86-64'', tal e como foi publicado e distribuído por AMD en 2002
**x86-64** (tamén coñecido como **x64**, **x86_64**, **AMD64**, ou **Intel 64**) é unha extensión de 64 bits do conxunto de instrucións x86. Foi anunciado en 1999 e dispoñible na familia AMD Opteron no 2003. Presenta dous novos modos operativos: o modo de 64 bits e modo de compatibilidade, xunto cun novo mecanismo de paxinado en catro-niveis.

No modo de 64 bits, x86-64 soporta bastante máis cantidade de memoria virtual e de memoria física en comparación cos seus predecesores de 32 bits, permitindo que os programas utilicen máis memoria para o almacenamento de datos. A arquitectura expande o número de rexistros de propósito xeral de 8 a 16, todos de propósito plenamente xeral, e amplían a súa anchura a 64 bits.

A aritmética de punto flotante é compatible a través de instrucións SSE2 obrigatorias en modo de 64 bits. Aínda que os rexistros FPU e MMX x87 aínda aínda están dispoñibles, son xeralmente substituídos por un conxunto de dezaseis rexistros vectoriais de 128 bits (rexistros de XMM). Cada un destes rexistros vectoriais poden almacenar un ou dous números de punto flotante de doble precisión, ata catro números de punto flotante de precisión simple ou varios formatos enteiros.

En modo de 64 bits, as instrucións son modificadas para soportar operandos e modos de direccionamento de 64 bits.

A arquitectura x86-64 define un modo de compatibilidade que permite que as aplicacións de usuario de 16 e de 32 bits se executen sen ser modificadas xunto coas aplicacións de 64 bits, sempre que o sistema operativo de 64 bits as soporte. Dado que os conxuntos de instrucións x86-32 completos seguen implementados no hardware sen necesidade de emulación, estes executábeis máis antigos poden executarse con pouca ou ningunha penalización de rendemento, mentres que as aplicacións máis novas ou modificadas poden aproveitarse das novas características do deseño do procesador para lograr melloras de rendemento. Ademais, os procesadores compatibles con x86-64 seguen acendéndose en modo real para manter a retrocompatibilidade con versións anteriores do procesador 8086 orixinal, como ocorreu cos procesadores x86 desde a introdución do modo protexido co 80286.

A especificación orixinal, creada por AMD e publicada en 2000, foi implementada por AMD, Intel, e VIA. A microarquitectura AMD K8, nos procesadores Opteron e Athlon 64, foi a primeira en aplicala. Esta foi a primeira aportación á arquitectura x86 deseñada por unha compañía que non fora Intel. Intel viuse obrigada a seguir o exemplo e presentou unha familia NetBurst modificada, que era compatible por software coas especificacións de AMD. VIA Technologies introduciu x86-64 na súa arquitectura VIA Isaiah co VIA Nano.

A arquitectura x86-64 foi rapidamente adoptada por ordenadores de sobremesa e portátiles personais e por servidores, os cales eran xeralmente configurados para 16 GiB (gibibytes) de memoria ou máis. Reemplazou eficazmente a descontinuada arquitectura Itanium (anteriormente IA-64), a cal pretendía, orixinalmente, substituír a arquitectura x86. x86-64 e Itanium non son compatibles no nivel do conxunto de instrucións nativo e os sistemas operativos e as aplicacións compiladas para unha arquitectura non se poden executar na outra de forma nativa.

## AMD64 
miniatura|Logo de AMD64

### Historia 
AMD64 (tamén referida por AMD na súa literatura e documentación como "tecnoloxía AMD de 64 bits" e "arquitectura AMD x86-64") foi creado como unha alternativa radicalmente diferente á arquitectura IA-64 deseñada por Intel e Hewlett-Packard, que era  incompatible con versións anteriores do IA-32, a versión de 32 bits da arquitectura x86. AMD anunciou AMD64 orixinalmente en 1999, cunha especificación completa dispoñible en agosto do 2000. Como AMD nunca foi convidada a contribuír á arquitectura IA-64 e calquera tipo de licenza parecía improbable, AMD situou dende o principio a arquitectura AMD64 como unha forma evolutiva de engadir capacidades de computación de 64 bits á arquitectura x86 existente, ao mesmo tempo que soportaba o código x86 de 32 bits herdado, en oposición ao enfoque de Intel de crear unha arquitectura de 64 bits completamente nova e incompatible con x86 con IA-64.

O primeiro procesador baseado en AMD64, o Opteron, foi lanzado en abril do 2003.

### Implementacións 
Os procesadores de AMD que implementan a arquitectura AMD64 inclúen Opteron, Athlon 64, Athlon 64 X2, Athlon 64 FX, Athlon II (seguido de "X2", "X3", ou "X4" para indicar o número de núcleos e os modelos XLT), Turion 64, Turion 64 X2, Sempron (modelos "Palermo" E6 stepping e todos os modelos "Manila"), Phenom (seguido de "X3" ou "X4" para indicar o número de núcleos), Phenom II (seguido de "X2", "X3", "X4" ou "X6" para indicar o número de núcleos), FX, Fusion/APU e Ryzen/Epyc.

### Características da arquitectura 
A característica principal que define AMD64 é a dispoñibilidade de rexistros de propósito xeral de 64 bits 64 (por exemplo, ), aritmética de enteiros e operacións lóxicas de 64 bits, e enderezos virtuais de 64 bits. Os deseñadores tomaron a oportunidade de facer tamén outras melloras.

Os cambios notábeis nas extensións de 64 bits inclúen:

#### Capacidade de enteiros de 64-bit 
: Todos os rexistros de propósito xeral (GPR) expandíronse de 32 bits a 64 bits, e todas as operacións aritméticas e lóxicas, as operacións de memoria a rexistro e de rexistro a memoria, etc., poden operar directamente en enteiros de 64 bits. As insercións e extraccións na pila teñen un tamaño predeterminado de 8 bytes, e os punteiros ocupan 8 bytes.
:

#### Rexistros adicionais 
: Ademais de aumentar o tamaño dos rexistros de propósito xeral, o número de rexistros de propósito xeral nomeados aumenta en oito (por exemplo , , , , , , , ) eb x86 a 16 (por exemplo , , , , , , , , , , , , , , , ). Polo tanto, é posible manter máis variables locais nos rexistros en lugar de na pila e permitir que os rexistros conteñan constantes ás que se accede con frecuencia; os argumentos para subrutinas pequenas e rápidas tamén se poden pasar nos rexistros en maior medida.
: Aínda así, AMD64 ten menos rexistros que a maioría de  conxuntos de instrucións RISC (por exemplo Power ISA ten 32 GPR; os ARM de 64 bits, o RISC-V I, o SPARC, o Alpha, o MIPS, e o PA-RISC teñen 31) ou máquinas de tipo VLIW como o IA-64 (que ten 128). Non obstante, unha implementación de AMD64 pode ter moitos máis rexistros internos que o número de rexistros arquitectónicos expostos polo conxunto de instrucións (renombrado de rexistros) (Por exemplo, os núcleos AMD Zen teñen 168 rexistros internos físicos de coma flotante de 64 bits e 160 rexistros internos físicos de coma flotante de 128 bits.)

#### Rexistros XMM (SSE) adicionais 
: Do mesmo xeito, o número de rexistros XMM de 128 bits (usados para instrucións SIMD de transmisión) tamén se incrementou de 8 a 16.
: A pila de rexistros FPU x87 tradicional non está incluída na extensión do tamaño do ficheiro de rexistros no modo de 64 bits, en comparación cos rexistros XMM usados ​​por SSE2, que si se ampliaron. A pila de rexistros x87 non é un simple ficheiro de rexistros, aínda que permite o acceso directo a rexistros individuais mediante operacións de intercambio de baixo custo.

#### Espazo de enderezos virtuais máis grande 
: A arquitectura AMD64 define un formato de enderezos virtuais de 64 bits, dos cales os 48 bits de orde inferior úsanse nas implementacións actuais.
: Isto significa que se pode operar con ficheiros moi grandes mapeando todo o ficheiro no espazo de enderezos do proceso (o que adoita ser moito máis rápido que traballar con chamadas de lectura/escritura de ficheiros), en lugar de ter que mapear rexións do ficheiro dentro e fóra do espazo de enderezos.

#### Maior espazo de enderezos físicos 
: A implementación orixinal da arquitectura AMD64 implementaba enderezos físicos de 40 bits e, polo tanto, podía direccionar ata 1 TiB (240 bytes) de RAM. e, polo tanto, poden direccionar ata 256 TiBs (248 bytes) de RAM. A arquitectura permite estender isto a 52 bits no futuro (limitado polo formato de entrada da táboa de páxinas); ou 4 GiB de RAM sen o modo PAE. As instrucións SSE3 e os conxuntos de instrucións posteriores de Streaming SIMD Extensions non son características estándar da arquitectura.

#### Bit de non execución 
: O bit de non execución ou bit NX (bit 63 of the page table entry) permite que o sistema operativo especifique que páxinas do espazo de enderezos virtuais poden conter código executable e cales non. AUn intento de executar código dunha páxina etiquetada como "sen execución" resultará nunha violación de acceso á memoria, similar a un intento de escribir nunha páxina de só lectura. Isto debería dificultar que o código malicioso tome o control do sistema mediante ataques de "sobrecarga do búfer" ou "búfer non comprobado". Unha característica similar está dispoñible nos procesadores x86 desde o 80286 como atributo dos descritores de segmento; non obstante, isto só funciona nun segmento enteiro á vez.
: O direccionamento segmentado  considerouse durante moito tempo un modo de operación obsoleto e todos os sistemas operativos de PC actuais o ignoran, configurando todos os segmentos nun enderezo base de cero e (na súa implementación de 32 bits) un tamaño de 4 GiB. AMD foi o primeiro provedor da familia x86 en implementar a non execución no modo de direccionamento lineal. A funcionalidade tamén está dispoñible no modo herdado en procesadores AMD64 e en procesadores Intel x86 recentes cando se usa PAE.

#### Eliminación de funcionalidades antigas 
: Algunhas funcionalidades de "programación do sistema" da arquitectura x86 non se usaban ou usábanse moi pouco nos sistemas operativos modernos e non están dispoñibles en AMD64 en modo longo (64 bits e compatibilidade) ou existen só de forma limitada. Estas inclúen o direccionamento segmentado (aínda que os segmentos FS e GS se conservan de forma vestixial para o seu uso como punteiros extrabase ás estruturas do sistema operativo), O deseño de "enderezo canónico" garante que cada implementación compatible con AMD64 teña, en efecto, dúas metades de memoria: a metade inferior comeza en 00000000'00000000 e "crece cara arriba" a medida que hai máis bits de enderezo virtual dispoñibles, mentres que a metade superior se "acopla" á parte superior do espazo de enderezos e crece cara abaixo. Ademais, aplicar a "forma canónica" dos enderezos comprobando os bits de enderezo non utilizados impide o seu uso polo sistema operativo en punteiros etiquetados como bandeiras, marcadores de privilexios, etc., xa que tal uso podería volverse problemático cando a arquitectura se estende para implementar máis bits de enderezo virtual.

As primeiras versións de Windows para x64 nin sequera usaban os 256 TiB completos; foron restrinxidos a tan só 8 TiB de espazo de usuario e 8 TiB de espazo de kernel. Outras extensións poden permitir un espazo de enderezos virtual completo de 64 bits e memoria física con descritores de táboa de páxinas de 12 bits e desprazamentos de memoria de 16 ou de 21 bits para tamaños de asignación de páxinas de 64 KiB e 2 MiB; a entrada da táboa de páxinas ampliaríase a 128 bits para admitir indicadores de hardware adicionais para o tamaño da páxina e o tamaño do espazo de enderezos virtual.

#### Límites do sistema operativo 
O sistema operativo tamén pode limitar o espazo de enderezos virtuais. Os detalles, se procede, danse na sección "compatibilidade e características do sistema operativo".

### Detalles do espazo de enderezos físicos 
Os procesadores AMD64 actuais admiten un espazo de enderezos físicos de ata 248 bytes de RAM, ou 256 TiB.  O sistema operativo pode impoñer límites adicionais á cantidade de RAM que se pode usar ou admitir. Os detalles sobre este punto ofrécense na sección "Compatibilidade e características do sistema operativo" deste artigo. 

### Modos operativos 
A arquitectura ten dous modos principais de operación: modo longo e modo herdado.

miniatura|400x400px|Diagrama de estados dos modos operativos x86-64

#### Modo longo 
O modo longo é o modo de funcionamento principal previsto da arquitectura; é unha combinación do modo nativo de 64 bits do procesador e un modo de compatibilidade combinado de 32 bits e 16 bits. É usado polos sistemas operativos de 64 bits. Nun sistema operativo de 64 bits, os programas de 64 bits execútanse en modo de 64 bits, e as aplicacións en modo protexido de 32 bits e 16 bits (que non precisan usar nin o modo real nin o modo virtual 8086 para executarse en ningún momento) execútanse en modo de compatibilidade. Os programas en modo real e os programas que usan o modo virtual 8086 nalgún momento non se poden executar en modo longo a menos que eses modos sexan emulados por software. (polo río Yamhill no val de Willamette de Oregón). Despois de varios anos negando a súa existencia, Intel anunciou na IDF (Intel Developer Forum) de febreiro de 2004 que o proxecto estaba realmente en marcha. O presidente de Intel daquela época, Craig Barrett, admitiu que este era un dos seus segredos peor gardados.

O nome de Intel para este conxunto de instrucións cambiou varias veces. O nome utilizado na IDF era *CT* (presumibelmente para *Clackamas* *Technology*, outro nome en clave dun río de Oregón); En cuestión de semanas comezaron a referirse a el como IA-32e (para as extensións IA-32) e en marzo de 2004 deron a coñecer o nome "oficial" EM64T (Extended Memory 64 Technology). A finais de 2006, Intel comezou a usar o nome Intel 64 para a súa implementación, en paralelo ao uso que facía AMD do nome AMD64.

O primeiro procesador en implementar Intel 64 foi o procesador multisocket Xeon co código en clave *Nocona*, en xuño de 2004. En contraste, os chips Prescott iniciais (febreiro de 2004) non habilitaban esta característica. Posteriormente, Intel comezou a vender Pentium 4 compatibles con Intel 64 usando a revisión E0 do núcleo Prescott, que se venderon no mercado OEM como Pentium 4, modelo F. A revisión E0 tamén engade eXecute Disable (XD) (o nome de Intel para o bit NX) a Intel 64, a Intel 64, e foi incluído no entón actual Xeon, co nome en clave *Irwindale*. O lanzamento oficial de Intel do Intel 64 (co nome EM64T naquel momento) nos procesadores de escritorio convencionais foi o Prescott-2M con paso N0. 

O primeiro procesador móbil de Intel que implementaba Intel 64 é a versión Merom do procesador Core 2 procesador, o cal foi lanzado o 27 de xullo de 2006. Ningunha das CPU portátiles anteriores de Intel (Core Duo, Pentium M, Celeron M, Móbil Pentium 4) implementaba Intel 64.

### Implementacións 
Os procesadores de Intel que implementan a arquitectura Intel64 inclúen os Pentium 4 da serie F/5x1, 506 e 516, os modelos Celeron D 3x1, 3x6, 355, 347, 352, 360, e 365 e todos os Celeron posteriores, todos os modelos de Xeon desde "Nocona", todos os modelos de procesadores Pentium Dueal-Core desde o "Merom-2M", os Atom 230, 330, D410, D425, D510, D525, N450, N455, N470, N475, N550, N570, N2600 e N2800, todas as versións dos procesadores Pentium D, Pentium Extreme Edition, Core 2, Core i9, Core i7, Core i5, e Core i3, e os procesadores Xeon Phi da serie 7200.

### X86S 
X86S foi unha simplificación de x86-64 proposta por primeira vez por Intel en maio de 2023. A nova arquitectura eliminaría a compatibilidade con sistemas operativos de 16 e 32 bits, aínda que os programas de 32 bits seguirían executándose nun sistema operativo de 64 bits. Unha CPU compatible xa non tería o modo herdado, e arrancaría directamente no modo longo de 64 bits. Habería un xeito de cambiar á paxinación de 5 niveis sen pasar polo modo non paxinado. 

Algunhas características específicas eliminadas incluían:

* Portas de segmentación
* Anel 0 de 32 bits
** VT-x xa non emulará esta funcionalidade

* Aneis 1 e 2
* Acceso ao porto de E/S do anel 3 (`IN/OUT`); ver E/S mapeada por portos
* Porto de E/S de cadea (`INS/OUTS`)
* Modo real (incluíndo o modo real enorme), modo protexido de 16 bits, VM86
* Modo de direccionamento de 16 bits
** VT-x xa non proporcionará modo sen restricións
* Compatibilidade con 8259; o único APIC compatible sería X2APIC
* Algúns bits de modo do sistema operativo non utilizados
* IPI de inicio (SIPI) de 16 e 32 bits

O borrador da especificación recibiu varias actualizacións, chegando á versión 1.2 en xuño de 2024. Finalmente foi abandonada en decembro de 2024, tras a formación do Grupo Asesor do Ecosistema x86 do Ecosistema x86 por parte de Intel e AMD.

### Extensións de rendemento avanzadas 
Advanced Performance Extensions é unha proposta de Intel de 2023 para novas instrucións e 16 rexistros adicionais de propósito xeral.

## Implementación x86-64 de VIA 
Tecnoloxías de VIA presentou a súa primeira implementación da arquitectura x86-64 en 2008 despois de cinco anos de desenvolvemento por parte da súa división de CPU, Centaur Tecnology. Co nome en clave "Isaiah", a arquitectura de 64 bits foi presentada o 24 de xaneiro de 2008, e lanzada o 29 de maio baixo a marca VIA Nano.

O procesador admite unha serie de extensións x86 específicas de VIA deseñadas para aumentar a eficiencia en dispositivos de baixo consumo. Espérase que a arquitectura Isaiah sexa o dobre de rápida en rendemento con enteiros e catro veces máis rápida en rendemento con números de coma flotante que o VIA Esther da xeración anterior a unha velocidade de reloxo equivalente. Tamén se espera que o consumo de enerxía estea á par das CPU VIA da xeración anterior, cunha potencia de deseño térmico que oscila desde os 5 W e os 25 W. Ao ser un deseño completamente novo, a arquitectura Isaiah foi construída con soporte para características como o conxunto de instrucións x86-64 e a virtualización x86, que non estaban dispoñibles nos seus predecesores (a liña VIA C7) mantendo as súas extensións de cifrado.

## Niveis da microarquitectura 
En 2020, a través dunha colaboración entre AMD, Intel, Red Hat, e SUSE, tres niveis de microarquitectura (ou niveis de características) enriba da liña base x86-64 foron definidas: x86-64-v2, x86-64-v3 e x86-64-v4. Estes niveis definen características específicas ás que os programadores poden dirixirse para proporcionar optimizacións en tempo de compilación. 

As características expostas por cada nivel son as seguintes:

Os niveis de funcionalidades da microarquitectura x86-64 tamén se poden atopar como AMD64-v1, AMD64-v2 .. ou AMD64_v1 .. en configuracións onde se usa a nomenclatura "AMD64". Estes úsanse como sinónimos da nomenclatura x86-64-vX e, polo tanto, son funcionalmente idénticos. Algúns exemplos disto inclúen a documentación da linguaxe Go e a distribución Fedora Linux. 

Todos os niveis inclúen as funcionalidades que se atopan nos niveis anteriores. As extensións do conxunto de instrucións que non se ocupan da computación de propósito xeral, incluíndo AES-NI e RDRAND, están excluídas dos requisitos de nivel.

Na maioría das distribucións Linux x86-64 recentes, todos os niveis de funcionalidades x86-64 compatibles cunha CPU pódense verificar usando o comando: `/lib64/ld-linux-x86-64.so.2 --help` (dispoñible desde glibc 2.33). O resultado será visible ao final da saída do comando:
```output
Subdirectories of glibc-hwcaps directories, in priority order:
  x86-64-v4
  x86-64-v3 (supported, searched)
  x86-64-v2 (supported, searched)
```
Aquí a CPU non admite o nivel de funcionalidade x86-64-v4, pero x86-64-v3 e x86-64-v2 si, o que significa que esta CPU non admite AVX512 requirido no nivel v4.

## Diferenzas entre AMD64 e Intel 64 
Aínda que son case idénticos, existen algunhas diferenzas entre os dous conxuntos de instrucións na semántica dalgunhas instrucións (ou situacións) de máquina que se usan raramente, que se empregan principalmente para a programación de sistemas. A menos que se indique o contrario a través da configuración `-march` os compiladores xeralmente producen executables (é dicir, código máquina) que evitan calquera diferenza, polo menos para programas de aplicación comúns. Polo tanto, isto é de interese principalmente para os desenvolvedores de compiladores, sistemas operativos e similares, que deben xestionar instrucións de sistema individuais e especiais.

### Implementacións recentes 
* Intel 64 só permite `SYSCALL/SYSRET` en modo de 64 bits (non en modo de compatibilidade), e permite `SYSENTER/SYSEXIT` en ambos os modos. AMD64 carece de `SYSENTER/SYSEXIT` en ambos submodos do modo longo. 
* Ao volver a un enderezo non canónico usando `SYSRET`, os procesadores AMD64 executan o xestor de fallos de protección xeral no nivel de privilexio 3, mentres que nos procesadores Intel 64 execútase no nivel de privilexio 0.
* A instrución `SYSRET` cargará un conxunto de valores fixos na parte oculta do rexistro de segmento `SS` (enderezo base, límite, atributos) en Intel 64, pero deixará a parte oculta de `SS` sen cambios en AMD64.
* En Intel 64, a instrución `SYSRET` establece incondicionalmente o nivel de privilexio (RPL) do rexistro de segmento `SS` en 3 (xa que a instrución provoca un retorno ao nivel de privilexio 3). En AMD64, o RPL establécese nos bits correspondentes no STAR MSR (rexistro específico do modelo), é dicir, os bits 49 e 48.
* AMD64 require un formato de actualización de microcódigo e MSR de control diferentes, mentres que Intel 64 implementa a actualización do microcódigo sen cambios desde os seus procesadores de só 32 bits.
* Intel 64 carece dalgúns MSR que se consideran arquitectónicos en AMD64. Estes inclúen `SYSCFG`, `TOP_MEM` e `TOP_MEM2`.
* Intel 64 carece da capacidade de gardar e restaurar unha versión reducida (e, polo tanto, máis rápida) do estado de coma flotante (que implica as instrucións `FXSAVE` e `FXRSTOR`).
* No modo de 64 bits, as ramas próximas co prefixo 66H (anulación do tamaño do operando) compórtanse de forma diferente. Intel 64 ignora este prefixo: a instrución ten un desprazamento estendido de signo de 32 bits e o punteiro da instrución non está truncado. AMD64 usa un campo de desprazamento de 16 bits na instrución e borra os 48 bits superiores do punteiro da instrución.
* En Intel 64 mais non en AMD64, o prefixo `REX`.`W` pódese utilizar coas instrucións do punteiro afastado (`LFS`, `LGS`, `LSS`, `JMP FAR`, `CALL FAR`) para aumentar o tamaño do seu argumento de punteiro afastado a 80 bits (desprazamento de 64 bits + segmento de 16 bits).
* Cando se executa a instrución `MOVSXD` cun operando de orixe de memoria e un tamaño de operando de 16 bits, accederase ao operando de memoria cunha lectura de 16 bits en Intel 64, pero cunha lectura de 32 bits en AMD64.
* Cando se usa a instrución `PUSH` cun rexistro de segmento  e un tamaño de operando de 32 bits en modo herdado/compatibilidade, AMD64 estenderá o rexistro a cero de 2 a 4 bytes e enviará ese valor de 4 bytes á pila. Intel 64 tamén decrementará o punteiro da pila en 4, pero só escribirá 2 bytes, deixando un oco de 2 bytes sen escribir.
* Cando se usa a instrución `POP` cun rexistro de segmento e un tamaño de operando de 32 ou 64 bits, AMD64 realizará unha lectura de memoria da pila tan ancha como o tamaño do operando, mentres que Intel 64 realizará unha lectura de memoria de 16 bits (pero igualmente incrementará o punteiro da pila segundo o tamaño do operando.)
* As instrucións `FCOMI`/`FCOMIP`/`FUCOMI`/`FUCOMIP` (comparacións de punto flotante x87) borrarán os bits OF, SF e AF de EFLAGS en Intel 64, pero deixarán estes bits de sinalización sen modificar en AMD64.
* Para as instrucións `VMASKMOVPS`/`VMASKMOVPD`/`VPMASKMOVD`/`VPMASKMOVQ` (movemento á/desde memoria con máscara AVX/AVX2), Intel 64 garante arquitectonicamente que as instrucións non causarán fallos de memoria (por exemplo, fallos de páxina e fallos de segmentación) para ningún carril con máscara de cero, mentres que AMD64 non ofrece tal garantía.
* Se a instrución RDRAND non consegue obter un número aleatorio (como indica EFLAGS.CF=0), Intel garante arquitectonicamente que o rexistro destino estará configurado en 0, porén AMD64 non o fai.
* Para as instrucións `VPINSRD` e `VPEXTRD` (inserción/extracción de carril vectorial AVX) fóra do modo de 64 bits, AMD64 require que as instrucións estean codificadas con VEX.W=0, mentres que Intel 64 tamén acepta codificacións con VEX.W=1.  (No modo de 64 bits, tanto AMD64 como Intel 64 requiren VEX.W=0).
* Cando a comprobación de aliñamento está activada (EFLAGS.AC=1), as instrucións AVX con operandos de memoria de 128 bits ou 256 bits desalineados e as instrucións SSE4.2 `PCMP*STR*` con operandos de memoria de 128 bits desalineados causarán excepcións #AC (comprobación de aliñamento) en AMD64 pero non en Intel 64.
* O código de operación `0F 0D /r` co campo Mod do byte ModR/M posto a `11b` é un NOP reservado en Intel 64, pero causará #UD (excepción de código de operación non válido) en AMD64.
* As garantías de ordenación proporcionadas por algunhas instrucións de ordenación de memoria como `LFENCE` e `MFENCE` difiren entre Intel 64 e AMD64:
** `LFENCE` serializa por despacho (o que permite que se use como unha valla de especulación) en Intel 64, pero non está asegurada arquitectonicamente a serialización por despacho en AMD64.
** `MFENCE` é unha instrución de serialización completa (incluíndo a serialización de busca de instrucións) en AMD64 pero non en Intel 64. 
** As instrucións `MOV` a CR8 e `INVPCID` serializan en AMD64 pero non en Intel 64. 
** A instrución `LMSW` serializa en Intel 64 pero non en AMD64. 
** `WRMSR` ao ICR (Rexistro de Comandos de Interrupción; MSR `830h`) x2APIC úsase habitualmente para producir un IPI (interrupción entre procesadores): nas CPU Intel 64 tal IPI pódese reordenar antes dun almacén de memoria máis antigo, pero non nas AMD64. 
** Nos procesadores AMD64 recentes (Zen 4 e posteriores), o `WRMSR` para os MSR `FS_BASE`, `GS_BASE` e `KernelGSBase` non se serializa. Nos procesadores Intel 64, así como nos procesadores AMD64 máis antigos, o `WRMSR` para estes MSR se serializa.

### Implementacións máis antigas 
* Os procesadores AMD64 anteriores á revisión F (que se distingue polo cambio de memoria DDR a DDR2  e os novos sockets AM2, F e S1)  de 2006 carecían da instrución `CMPXCHG16B`, que é unha extensión da instrución `CMPXCHG8B` presente na maioría dos procesadores posteriores ao 80486. De xeito similar a `CMPXCHG8B`, `CMPXCHG16B` permite  operacións atómicas en octa-palabras (valores de 128 bits). Isto é útil para algoritmos paralelos que utilizan comparación e intercambio en datos maiores que o tamaño dun punteiro, común nos algoritmos sen bloqueo e espera. Sen `CMPXCHG16B`, débense usar solucións alternativas, como unha sección crítica ou enfoques alternativos sen bloqueo. A súa ausencia tamén impide que Windows de 64 bits anterior a Windows 8.1 teña un espazo de enderezos en modo de usuario maior que 8 TiB. A versión de 64 bits de Windows 8.1 require a instrución.
* As primeiras CPU AMD64 e Intel 64 carecían de instrucións `LAHF` e `SAHF` en modo de 64 bits. AMD introduciu estas instrucións (tamén en modo de 64 bits) cos seus procesadores de 90 nm (revisión D), comezando con Athlon 64 en outubro de 2004. Intel introduciu as instrucións en outubro de 2005 coa versión 0F47h ​​e revisións posteriores de NetBurst. A versión de 64 bits de Windows 8.1 require esta funcionalidade. Esta funcionalidade é necesaria para todas as versións de Windows 8.
* As primeiras implementacións de Intel 64 tiñan un enderezamento físico de memoria de 36 bits (64 GiB), mentres que as implementacións orixinais de AMD64 tiñan un enderezamento físico de 40 bits (1 TiB). Intel empregou o enderezo físico de 40 bits por primeira vez en Xeon MP (Potomac), lanzado o 29 de marzo de 2005. A diferenza non é unha diferenza nos ISA visibles polo usuario. En 2007, Opteron, baseado en AMD 10h  foi o primeiro en proporcionar un espazo de enderezos físicos de 48 bits (256 TiB). O enderezo físico de Intel 64 ampliouse a 44 bits (16 TiB) en Nehalem-EX en 2010 e a 46 bits (64 TiB) en Sandy Bridge E en 2011. Cos procesadores Xeon Scalable de terceira xeración de Ice Lake, Intel aumentou o enderezo virtual a 57 bits (128 PiB) e o físico a 52 bits (4 PiB) en 2021, o que fixo necesaria unha paxinación de 5 niveis. Ao ano seguinte, AMD64 engadiu o mesmo na cuarta xeración de EPYC (Genoa). As CPU que non son de servidor conservan espazos de enderezos máis pequenos durante máis tempo.
* En todos os procesadores AMD64, as instrucións `BSF` e `BSR`, cando se lles dá un valor de orixe de 0, deixan o seu rexistro de destino sen modificar. Na maioría dos casos pasa igual nos procesadores Intel 64, agás nalgunhas CPU Intel 64 máis antigas, nas que executar estas instrucións cun tamaño de operando de 32 bits borrará os 32 bits superiores do seu rexistro de destino, mesmo cun valor de orixe de 0 (cos 32 bits inferiores sen cambios).
* Os procesadores AMD64 desde Opteron Rev. E e Athlon 64 Rev. D  reintroduciron soporte limitado para a segmentación, a través do bit Long Mode Segment Limit Enable (LMSLE), para facilitar a virtualización de invitados de 64 bits. O soporte LMLSE eliminouse no procesador Zen 3.
* En todos os procesadores Intel 64, `CLFLUSH` ordénase con respecto a `SFENCE`; este tamén é o caso nos procesadores AMD64 máis novos (Zen 1 e posteriores). Nos procesadores AMD64 máis antigos, impoñer a orde na instrución `CLFLUSH` requiría `MFENCE`.

## Adopción 
miniatura|350x350px|Un gráfico de áreas que mostra a representación de diferentes familias de microprocesadores na lista de clasificación de supercomputadores TOP500, de 1993 a 2020
Nos supercomputadores rexistrados por TOP500, a aparición de extensións de 64 bits para a arquitectura x86 permitiu que os procesadores x86 de 64 bits de AMD e Intel substituísen a maioría das arquitecturas de procesadores RISC utilizadas anteriormente nestes sistemas (incluíndo PA-RISC, SPARC, Alpha e outras), así como o x86 de 32 bits, aínda que a propia Intel intentou inicialmente sen éxito substituír o x86 por unha nova arquitectura de 64 bits incompatible no procesador Itanium.

Dende 2023, un supercomputador baseado en HPE EPYC chamado Frontier ocupa o primeiro posto. O primeiro supercomputador baseado en ARM apareceu na lista en 2018 e, nos últimos anos, os coprocesadores de arquitectura sen CPU (GPGPU) tamén xogaron un papel importante no rendemento. Os coprocesadores Xeon Phi "Knights Corner" de Intel, que implementan un subconxunto de x86-64 con algunhas extensións vectoriais, tamén se usan, xunto cos procesadores x86-64, no supercomputador Tianhe-2.

## Compatibilidade cos sistemas operativos e características 
Os seguintes sistema operativos e versións admiten a arquitectura x86-64 en modo longo.

### BSD 
#### DragonFly BSD 
O traballo preliminar de infraestrutura comezou en febreiro de 2004 para un porto x86-64. O desenvolvemento comezou de novo en xullo de 2007 e continuou durante Google Summer of Code 2008 e SoC 2009. A primeira versión oficial que contiña soporte para x86-64 foi a versión 2.4.

#### FreeBSD 
FreeBSD engadiu soporte para x86-64 por primeira vez baixo o nome "amd64" como unha arquitectura experimental na versión 5.1-RELEASE en xuño de 2003. Incluíuse como arquitectura de distribución estándar a partir da versión 5.2-RELEASE en xaneiro de 2004. Desde entón, FreeBSD designouna como plataforma de nivel 1. A versión 6.0-RELEASE  eliminou algunhas peculiaridades coa execución de executábeis x86 en amd64, e a maioría dos controladores funcionan igual que na arquitectura x86. Actualmente está a traballarse para integrar máis completamente a interface binaria de aplicacións x86 (ABI), do mesmo xeito que funciona actualmente a compatibilidade con ABI de 32 bits de Linux.

#### NetBSD 
O soporte da arquitectura x86-64 comprometeuse por primeira vez á árbore de código fonte de NetBSD o 19 de xuño de 2001. A partir de NetBSD 2.0, lanzado o 9 de decembro de 2004, NetBSD/amd64 é un porto totalmente integrado e compatible. O código de 32 bits aínda é compatible no modo de 64 bits, cunha capa de compatibilidade do núcleo netbsd-32 para chamadas ao sistema de 32 bits. O bit NX úsase para proporcionar unha pila e un montón non executables con granularidade por páxina (a granularidade do segmento úsase en x86 de 32 bits).

#### OpenBSD 
OpenBSD admite AMD64 desde OpenBSD 3.5, lanzado o 1 de maio de 2004. A implementación completa na árbore da compatibilidade con AMD64 conseguiuse antes do lanzamento inicial do hardware porque AMD prestara varias máquinas para o hackathon do proxecto ese ano. Os desenvolvedores de OpenBSD adoptaron a plataforma debido á súa compatibilidade co bit NX, o que permitiu unha implementación sinxela da función W^X.

O código para o porto AMD64 de OpenBSD tamén se executa en procesadores Intel 64, que conteñen un uso clonado das extensións AMD64, pero como Intel omitiu o bit NX da táboa de páxinas nos primeiros procesadores Intel 64, non hai capacidade W^X nesas CPU Intel; os procesadores Intel 64 posteriores engadiron o bit NX co nome "bit XD". O multipricesamento simétrico (SMP) funciona no porto AMD64 de OpenBSD, a partir da versión 3.6 o 1 de novembro de 2004.

### DOS 
É posible entrar no modo longo en DOS sen un extensor de DOS, pero o usuario debe volver ao modo real para chamar as interrupcións da BIOS ou do DOS.

Tamén pode ser posible entrar no modo longo cun extensor de DOS similar a DOS/4GW, pero é máis complexo xa que x86-64 carece de modo virtual 8086. O propio DOS non é consciente diso e non se deberían esperar beneficios a menos que se execute DOS nunha emulación cun backend de controlador de virtualización axeitado, por exemplo: a interface de almacenamento masivo.

### Linux 
Linux foi o primeiro núcleo de sistema operativo en executar a arquitectura x86-64 en modo longo, comezando coa versión 2.4 en 2001 (antes da dispoñibilidade do hardware). Linux tamén ofrece compatibilidade con versións anteriores para executar executábeis de 32 bits. Isto permite que os programas sexan recompilados en modo longo, mantendo o uso de programas de 32 bits. As distribucións actuais de Linux inclúen núcleos e zonas de usuario nativas de x86-64. Algunhas, como Arch Linux, SUSE, Mandriva e Debian, permiten aos usuarios instalar un conxunto de compoñentes e bibliotecas de 32 bits ao instalar desde un medio de distribución de 64 bits, o que permite que a maioría das aplicacións de 32 bits existentes se executen xunto co sistema operativo de 64 bits.

A ABI x32 (Interface Binaria de Aplicacións), introducida en Linux 3.4, permite que os programas compilados para a ABI x32 se executen no modo de 64 bits de x86-64 usando só punteiros e campos de datos de 32 bits. Aínda que isto limita o programa a un espazo de enderezos virtual de 4 GiB, tamén reduce a pegada de memoria do programa e, nalgúns casos, pode permitir que se execute máis rápido. ou ata 128 PiB (virtuais) e 4 PiB (físicos) coa paxinación de 5 niveis habilitada.

### macOS 
Mac OS X 10.4.7 e versións posteriores de Mac OS X 10.4 executan ferramentas de liña de comandos de 64 bits usando as bibliotecas POSIX e matemáticas en máquinas baseadas en Intel de 64 bits, do mesmo xeito que todas as versións de Mac OS X 10.4 e 10.5 as executan en máquinas PowerPC de 64 bits. Ningunha outra biblioteca ou framework funciona con aplicacións de 64 bits en Mac OS X 10.4. O kernel e todas as extensións do kernel son só de 32 bits.

Mac OS X 10.5 admite aplicacións GUI de 64 bits usando Cocoa, Quartz, OpenGL, e X11 en máquinas baseadas en Intel de 64 bits, así como en máquinas PowerPC de 64 bits. Todas as bibliotecas e frameworks que non son GUI tamén admiten aplicacións de 64 bits nesas plataformas. O kernel e todas as extensións do kernel son só de 32 bits.

Mac OS X 10.6 é a primeira versión de macOS que apoia un 64-mordeu kernel. compatible cun kernel de 64 bits. Non obstante, non todos os ordenadores de 64 bits poden executar o kernel de 64 bits, e non todos os ordenadores de 64 bits que poden executalo o farán por defecto. O kernel de 64 bits, como o de 32 bits, admite aplicacións de 32 bits; ambos os kernels tamén admiten aplicacións de 64 bits. As aplicacións de 32 bits teñen un límite de espazo de enderezos virtual de 4 GiB en calquera dos kernels. O kernel de 64 bits non admite extensións de kernel de 32 bits, e o kernel de 32 bits non admite extensións de kernel de 64 bits.

OS X 10.8 só inclúe o kernel de 64 bits, pero continúa a admitir aplicacións de 32 bits; con todo, non admite extensións de kernel de 32 bits. 

macOS 10.15 inclúe só o kernel de 64 bits e xa non admite aplicacións de 32 bits. Esta eliminación da compatibilidade presentou un problema para Wine (e a versión comercial CrossOver), xa que aínda necesita poder executar aplicacións de Windows de 32 bits. A solución, denominada wine32on64, foi engadir thunks que activan e desactivan a CPU do modo de compatibilidade de 32 bits na aplicación nominalmente de 64 bits.

macOS usa o formato binario universal para empaquetar versións de 32 e 64 bits do código da aplicación e da biblioteca nun único ficheiro; a versión máis axeitada selecciónase automaticamente no momento da carga. En Mac OS X 10.6, o formato binario universal tamén se usa para o kernel e para aquelas extensións do kernel que admiten kernels de 32 e 64 bits.

### Solaris 
Solaris 10 e versións posteriores admiten a arquitectura x86-64.

Para Solaris 10, igual que coa arquitectura SPARC, só hai unha imaxe do sistema operativo, que contén un kernel de 32 bits e un de 64 bits; esta está etiquetada como imaxe de DVD-ROM "x64/x86". O comportamento predeterminado é arrincar un kernel de 64 bits, o que permite executar tanto executables de 64 bits como executables de 32 bits novos ou existentes. Tamén se pode seleccionar manualmente un kernel de 32 bits, nese caso só se executarán executables de 32 bits. O comando `isainfo` pódese usar para determinar se un sistema está a executar un kernel de 64 bits.

Para Solaris 11, só se proporciona o kernel de 64 bits. Non obstante, o kernel de 64 bits admite executables, bibliotecas e chamadas ao sistema de 32 e 64 bits.

### Windows 
As edicións x64 do cliente e servidor de Microsoft Windows (Windows XP Professional x64 Edition e Windows Server 2003 x64 Edition) lanzáronse en marzo de 2005. Internamente, en realidade son a mesma compilación (5.2.3790.1830 SP1), xa que comparten a mesma base de código fonte e os binarios do sistema operativo, polo que mesmo as actualizacións do sistema se lanzan en paquetes unificados, de xeito moi semellante ás edicións de Windows 2000 Professional e Server para x86. Windows Vista, que tamén ten moitas edicións diferentes, lanzouse en xaneiro de 2007. Windows 7 lanzouse en xullo de 2009. Windows Server 2008 R2 só se vendeu en edicións x64 e Itanium; as versións posteriores de Windows Server só ofrecen unha edición x64.

As versións de Windows para x64 anteriores a Windows 8.1 e Windows Server 2012 R2 ofrecen o seguinte: 

* 8 TiB de espazo de enderezos virtuais por proceso, accesible tanto desde o modo de usuario como desde o modo de kernel, denominado espazo de enderezos do modo de usuario. Un programa x64 pode usar todo isto, suxeito aos límites de almacenamento de respaldo no sistema e sempre que estea vinculado coa opción "recoñecemento de enderezos grandes", que está presente por defecto. Isto supón un aumento de 4096 veces con respecto ao espazo de enderezos virtuais predeterminado de 2 GiB en modo de usuario que ofrece Windows de 32 bits.
* 8 TiB de espazo de enderezos virtuais en modo de kernel para o sistema operativo.

En Windows 8.1 e Windows Server 2012 R2, os espazos de enderezos virtuais tanto no modo de usuario como no modo de kernel ampliáronse a 128 TiB. A diferenza do uso da opción de arranque `/3GB` en x86, isto non reduce o espazo de enderezos virtuais en modo kernel dispoñible para o sistema operativo. Polo tanto, as aplicacións de 32 bits poden beneficiarse da súa execución en Windows x64 mesmo se non se recompilan para x86-64.
* Tanto as aplicacións de 32 como as de 64 bits, se non están vinculadas coa opción "recoñecemento de enderezos grandes", están limitadas a 2 GiB de espazo de enderezos virtuais.
* Capacidade para usar ata 128 GiB (Windows XP/Vista), 192 GiB (Windows 7), 512 GiB (Windows 8), 1 TiB (Windows Server 2003), 2 TiB (Windows Server 2008/Windows 10), 4 TiB (Windows Server 2012) ou 24 TiB (Windows Server 2016/2019) de memoria de acceso aleatorio (RAM) física.
* Modelo de datos LLP64: en C/C++, os tipos "int" e "long" teñen 32 bits de ancho, e o "long long" ten 64 bits, mentres que os punteiros e os tipos derivados dos punteiros teñen 64 bits de ancho.
* Os controladores de dispositivos do modo kernel deben ser versións de 64 bits; non hai forma de executar executábeis do modo kernel de 32 bits dentro do sistema operativo de 64 bits. Os controladores de dispositivos do modo usuario poden ser de 32 ou 64 bits.
* As aplicacións de Windows (Win16) e DOS de 16 bits non se executarán en versións x86-64 de Windows debido á eliminación do subsistema de máquina virtual DOS (NTVDM), que dependía da capacidade de usar o modo virtual 8086. Non se pode entrar no modo virtual 8086 mentres se executa en modo longo.
* Implementación completa da función de protección de páxina NX (Sen execución). Isto tamén se implementa en versións recentes de Windows de 32 bits cando se inician en modo PAE.
* En lugar do descritor de segmento FS nas versións x86 da familia Windows NT o descritor de segmento GS úsase para apuntar a dúas estruturas definidas polo sistema operativo: o Bloque de información de fíos (NT_TIB ou *Thread Information Block*) no modo de usuario e a Rexión de control do procesador (KPCR ou *Processor Control Region*) no modo de kernel. Así, por exemplo, no modo de usuario, `GS:0` é o enderezo do primeiro membro do Bloque de información de fíos. Manter esta convención facilitou o porto x86-64, pero obrigou a AMD a manter a función dos segmentos FS e GS en modo longo, aínda que o enderezamento segmentado *per se* non é realmente utilizado por ningún sistema operativo moderno. que tamén son compatibles cos procesadores Intel a partir de Broadwell.)
* Algúns compoñentes como Data Access Objects e Jet Database Engine non se portarán a arquitecturas de 64 bits como x86-64 e IA-64.
* Microsoft Visual Studio pode compilar aplicacións nativas para dirixirse á arquitectura x86-64, que só se pode executar en Microsoft Windows de 64 bits, ou á arquitectura IA-32, que se pode executar como unha aplicación de 32 bits en Microsoft Windows de 32 bits ou Microsoft Windows de 64 bits no modo de emulación WoW64. As aplicacións xestionadas pódense compilar nos modos IA-32, x86-64 ou AnyCPU. O software creado nos dous primeiros modos compórtase como as súas contrapartes de código nativo IA-32 ou x86-64 respectivamente; Non obstante, ao usar o modo AnyCPU, as aplicacións nas versións de 32 bits de Microsoft Windows execútanse como aplicacións de 32 bits, mentres que nas edicións de 64 bits de Microsoft Windows se executan como aplicacións de 64 bits.

## Consolas de videoxogos 
A PlayStation 4 e a Xbox One utilizan procesadores AMD x86-64 baseados na microarquitectura Jaguar. O firmware e os xogos están escritos en código x86-64; non se utiliza código x86 herdado. A PlayStation 5 e Xbox Series X/S usan procesadores AMD x86-64 baseados na microarquitectura Zen 2. Steam Deck usa unha unidade de procesamento acelerada (APU) AMD x86-64 personalizada baseada na microarquitectura Zen 2.

## Convencións de nomenclatura na industria 
Dado que AMD64 e Intel 64 son substancialmente similares, moitos produtos de software e hardware usan un termo neutro do provedor para indicar a súa compatibilidade con ambas implementacións. A designación orixinal de AMD para esta arquitectura de procesador, "x86-64", aínda se usa para este propósito, do mesmo xeito que a variante "x86_64". Outras empresas, como Microsoft e Sun Microsystems/Oracle Corporation, empregan a contracción "x64" no material de mercadotecnia.

O termo IA-64 refírese ao procesador Itanium e non se debe confundir con x86-64, xa que é un conxunto de instrucións completamente diferente.

Moitos sistemas operativos e produtos, especialmente aqueles que introduciron a compatibilidade con x86-64 antes da entrada de Intel no mercado, empregan o termo "AMD64" ou "amd64" para referirse tanto a AMD64 como a Intel 64.

* **amd64**
** A maioría dos sistemas BSD como FreeBSD, MidnightBSD, NetBSD e OpenBSD refírense tanto a AMD64 como a Intel 64 co nome de arquitectura "amd64".
** Algunhas distribucións de Linux como Debian, Ubuntu e Gentoo Linux refírense tanto a AMD64 como a Intel 64 co nome de arquitectura "amd64".
** As versións x64 de Microsoft Windows   usan o alcume AMD64 internamente para designar varios compoñentes que usan ou son compatibles con esta arquitectura. Por exemplo, á variable de ambiente PROCESSOR_ARCHITECTURE asígnaselle o valor "AMD64" en oposición a "x86" nas versións de 32 bits, e o directorio do sistema nun CD-ROM de instalación de Windows x64 Edition chámase "AMD64", en contraste con "i386" nas versións de 32 bits.
** O comando `isalist` de Solaris de Sun identifica tanto os sistemas de 64 bits baseados en AMD64 como os de Intel como "amd64".
** Kit de Desenvolvemento de Java (JDK): o nome "amd64" úsase nos nomes de directorios que conteñen ficheiros x86-64.
* **x86_64**
** O kernel de Linux e a GNU Compiler Collection refírense á arquitectura de 64 bits como "x86_64".
** Algunhas distribucións de Linux, como Fedora, openSUSE, Arch Linux e Gentoo Linux refírense a esta arquitectura de 64 bits como "x86_64".
** Apple macOS refírese á arquitectura de 64 bits como "x86-64" ou "x86_64", como se ve no comando `arch` En 2009, AMD e Intel resolveron varias demandas e desacordos sobre licenzas cruzadas, ampliando os seus acordos de licenza cruzada.

## Notas 
## Véxase tamén 
### Ligazóns externas 
* Guías, manuais e documentos ISA para desenvolvedores de AMD
* x86-64: Ampliación da arquitectura x86 a 64 bits: charla técnica do arquitecto de AMD64 (arquivo de vídeo) e segunda charla polo mesmo relator (arquivo de vídeo)
* Protección antivirus mellorada" de AMD
* Intel axusta EM64T para unha compatibilidade total con AMD64
* Analista: AMD64 con enxeñaría inversa de Intel
* Informe inicial das diferenzas entre Intel IA32e e AMD64
* Portabilidade a sistemas GNU/Linux de 64 bits, por Andreas Jaeger da GCC Summit 2003. Un excelente artigo que explica case todos os aspectos prácticos para unha transición de 32 bits a 64 bits.
* Arquitectura Intel 64
* Rede de software Intel: "64 bits"
* Titoriais de TurboIRC.COM, incluíndo exemplos de como entrar no modo protexido e no modo longo sen procesar desde DOS
* Sete Pasos para Migrar un Programa a un Sistema de 64 bits
* Límites de memoria para versións de Windows