Articulo de referencia

Instrucciones para la manipulación de bits

Las instrucciones de manipulación de bits son instrucciones que realizan operaciones de manipulación de bits en hardware, en lugar de requerir varias instrucciones para dichas o...

Las instrucciones de manipulación de bits son instrucciones que realizan operaciones de manipulación de bits en hardware, en lugar de requerir varias instrucciones para dichas operaciones, como se ilustra con ejemplos en software . [ 1 ] Varias arquitecturas líderes e históricas cuentan con instrucciones de manipulación de bits, entre ellas ARM , WDC 65C02 , TX-2 y Power ISA . [ 2 ]

La manipulación de bits se suele dividir en subconjuntos, ya que la implementación de instrucciones individuales en hardware puede resultar costosa cuando la aplicación de destino no lo justifica. Por el contrario, si existe una justificación, el rendimiento puede verse afectado si se excluye la instrucción. Realizar un análisis de coste-beneficio es una tarea compleja: uno de los esfuerzos más exhaustivos en manipulación de bits fue una colaboración liderada por Clare Wolfe, que proporcionó justificaciones, casos de uso, código C, demostraciones y Verilog para cada instrucción RISC-V propuesta. [ 3 ] [ 4 ]

Entre los ejemplos prácticos más concretos se incluye la manipulación de bits GPIO mediante controladores integrados de bajo coste como el WDC 65C02 , el 8051 y el Atmel PIC . A la baja frecuencia de reloj de estas CPU, si no se dispusiera de la manipulación de bits (establecer, borrar o comprobar), estas CPU de bajo coste no serían lo suficientemente rápidas para la aplicación prevista.

Manipulación de bits de hardware

Todas las arquitecturas que se muestran a continuación cuentan con subconjuntos y grupos de instrucciones donde la manipulación de bits se realiza mediante hardware. En la lista se puede observar que los DSP y los microcontroladores integrados disponen, como mínimo, de instrucciones para probar, establecer y borrar bits; sin embargo, existen instrucciones mucho más completas, como el conteo de ceros iniciales , el conteo de bits , la aritmética de campos de Galois , el decimal codificado en binario , la multiplicación y transposición de matrices de bits, la permutación de bytes, la permutación de bits (incluida la inversión de bits) , instrucciones criptográficas especializadas y muchas más.

Intel y AMD (x86)

  • El conjunto de instrucciones básicas x86 contiene:
    • BSRBit Scan Reverse: devuelve el índice del bit más alto establecido en la entrada, efectivamente cuenta hacia atrás los ceros iniciales, no está definido para 0.
    • BSFEscaneo de bits hacia adelante: devuelve el índice del bit más bajo activado en la entrada, cuenta efectivamente los ceros finales, pero no está definido para 0.
  • SSE4 y las extensiones del conjunto de instrucciones BMI contienen instrucciones para:
    • Contar los ceros iniciales -lzcnt
    • Contar los ceros finales -tzcnt
    • Recuento de población -popcnt
    • Extracción de bits/depósito de bits - pext/pdep
    • Prueba de bits: ptestdados vptestdos datos de entrada, se realiza una ANDoperación AND y otra ANDNoperación ANDN entre ellos, y se activan los bits ZF y CF EFLAGS según si los resultados de AND y ANDN, respectivamente, son 0. Esto permite comprobar si todos los bits enmascarados son cero, si todos están activados o si se produce una combinación de ambos.
  • La extensión ternaria AVX-512 incluye una instrucción lógica ternaria a nivel de bits , vpternlog. También cabe destacar una instrucción de detección de conflictos,VPCONFLICTD
  • También está presente en el subconjunto AVX/ AVX-512 GFNI la transformación afín de matriz de bits y su inversa: es efectivamente una multiplicación de matriz de bits de 8x8 en el campo de Galois GF(2^8). [ 5 ]GF2P8AFFINEQB
  • AVX-512 BITALG, además de la versión AVX-512 de la instrucción de manipulación de bits existente, también agregó VPSHUFBITQMBuna instrucción de reordenamiento a nivel de bits, que toma bits de una fuente usando índices en la segunda fuente.
  • Una guía de tecnología GNFI de Intel sobre la extensión GNFI AVX/AVX512 también enumera numerosos usos, incluyendo la manipulación de bits paralela byte a byte para establecer/borrar/invertir, extensión de signo de 5 bits y señala que el potencial es mucho mayor. [ 6 ]
  • Códigos de operación BCD de Intel

Power ISA

Power ISA tiene una amplia gama de instrucciones de manipulación de bits, [ 7 ] debido en gran parte a su historia y relación con los mainframes de IBM y la arquitectura z :

  • Cuenta los ceros iniciales y finales, y las versiones enmascaradas de los mismos. [ 8 ] Hay una mezcla de popcount [ 8 ] paridad [ 9 ] e instrucciones de estilo SWAR , pero no un conjunto completo de cada una: popcntbes SWAR de nivel de byte de 8x8 bits, pero no hay 4x16 bits, popcnthsin embargo, hay 2x32 bits popcntwy escalar de 64 bits popcntd. Del mismo modo, prtywes SWAR de media palabra de 4x16 bits, pero no hayprtyb
  • Extracción pextdy depósito de bits enmascarados pdepd: estos bits se depositan y distribuyen en su lugar según una máscara, en lugar de la técnica más habitual de desplazamiento y longitud. [ 10 ] Una instrucción de centrifugación inusual que mueve los bits enmascarados a la izquierda y los bits no enmascarados a la derecha, conservando su orden relativo en ambos casos. La mayoría de las ISA tendrían un operando que expresa el número de bits secuenciales a extraer, más la longitud: cfugedcombina estos en una máscara de bits de propósito general. [ 10 ]
  • Transposición de 8x8 bits vgbbd[ 11 ] que trata una cantidad de 64 bits como una matriz 2D de 8x8 y realiza una operación de transposición de matriz. Por lo tanto, cada bit 0 de cada byte se convierte en el primer byte, cada bit 1 de cada byte se convierte en el segundo, y así sucesivamente.
  • una instrucción de indexación extraña pero muy útil, ( bpermd) [ 12 ] que permite seleccionar hasta ocho bits individuales de una fuente de 64 bits, tratando cada byte de un segundo registro de 64 bits como índices de bits en el primero.
  • Instrucción lógica ternaria bit a bit de 8 bits xxeval[ 13 ] similar a AVX-512
  • Instrucciones estratégicas para acelerar el empaquetado de BCD [ 14 ]
  • Power v3.1 también introdujo una serie de instrucciones adicionales para la manipulación de bits, incluyendo el intercambio del orden de los bytes dentro de medias palabras, palabras y el registro completo de 64 bits.

Supercomputadoras Cray

Cray patentó BMM (multiplicación de matriz de bits) en 1990, que podía manejar operandos de hasta 64x64 bits. [ 15 ] El equivalente más cercano en la actualidad es la instrucción de transformación afín GF(2) de 8x8 del AVX512.

IBM System/360 a través de la arquitectura z/Architecture

Sistema IBM/360

El IBM System/360 dispone de instrucciones RR, RX y SI para operaciones AND bit a bit, OR exclusivo, desplazamiento aritmético y lógico RS [ a ] , una prueba SI bajo máscara [ b ] y una prueba atómica RX y una instrucción de configuración. Estas instrucciones y sus extensiones siguen estando disponibles a través de z/Architecture.

Sistema IBM/370

Hacia el final del ciclo de vida del S/370 , IBM convirtió la operación de mover caracteres inversos, que anteriormente era una instrucción RPQ, en una instrucción estándar.

Operaciones vectoriales de IBM S/370, S/370-XA, ESA/370 y ESA/390

El IBM 3090 introdujo una funcionalidad vectorial opcional [ 16 ] en los conjuntos de instrucciones System/370-XA y Enterprise Systems Architecture/370 . Además de las operaciones aritméticas y lógicas vectoriales de enteros y coma flotante sobre múltiples valores enteros y coma flotante, introdujo operaciones de manipulación de bits vectoriales como el conteo de ceros inicialesvczvm y el conteo de poblaciónvcovm . [ 17 ]

ESA/390

Hacia el final del ciclo de vida de ESA/390 , IBM introdujo algunas instrucciones de z/Architecture en ESA/390. Estas incluían las instrucciones de rotación lógica simple a la izquierda, carga invertida y almacenamiento invertido.

z/Arquitectura escalar

z/Architecture heredó todas las instrucciones de manipulación de bits de sus predecesores y añadió versiones de desplazamiento de 64 bits ( grande ) y largas (20 bits) de algunas de ellas.

  • La función de extensión de instrucciones generales [ 18 ] añade
    • GIRA Y SELECCIONA LOS BITS [ 19 ]
    • GIRA Y LUEGO SELECCIONA LOS BITS EXCLUSIVOS O SELECCIONADOS [ 20 ]
    • GIRA Y LUEGO INSERTA LOS BITS SELECCIONADOS [ 20 ]
    • GIRA Y LUEGO O SELECCIONA LOS BITS [ 20 ]
  • Instalación de palabras altas [ 21 ] añade
    • GIRA Y LUEGO INSERTA LOS BITS SELECCIONADOS EN ALTO [ 22 ]
    • GIRA Y LUEGO INSERTA LOS BITS SELECCIONADOS Bajo [ 22 ]
  • Instalación de acceso interbloqueado 1 [ 23 ] añade
    • CARGAR Y Y (LAN, LANG) [ 24 ]
    • CARGA Y EXCLUSIVO O (LAX, LAXG) [ 25 ]
    • CARGA Y O (LAO, LAOG) (LAX, LAXG) [ 26 ]
  • La función de extensiones de instrucciones misceláneas 1 [ 27 ] agrega
    • GIRA Y LUEGO INSERTA LOS BITS SELECCIONADOS (RISBGN) [ 28 ]
  • La función de extensiones de instrucciones misceláneas 3 añade
    • Y CON COMPLEMENTOS (NCRK, NCGRK)
    • MOVER DE DERECHA A IZQUIERDA
    • NAND (NNRK, NNGRK)
    • NO EXCLUSIVO O (NXRK, NXGRK)
    • NOR (NORK, NOGRK)
    • O CON COMPLEMENTO (OCRK, OCGRK)
    • SELECCIONAR (SELR, SELGR)
    • SELECCIONAR ALTO (SELFHR)
  • La función de extensiones de instrucciones misceláneas 4 [ 29 ] agrega
    • DEPÓSITO DE BIT (BDEPG) [ 30 ]
    • EXTRACTO DE BITS (BEXTG) [ 31 ]
    • CONTAR LOS CEROS INICIALES (CLZG)
    • CONTAR LOS CEROS FINALES (CTZG)

Operaciones vectoriales de z/Arquitectura

z/Architecture no admite la función vectorial anterior. [ 32 ] Sin embargo, a partir de la 11.ª edición de los Principios de funcionamiento de z/Architecture: [ 33 ] admite las siguientes instrucciones:

DEC PDP-10

Los DEC PDP-6 y PDP-10 tenían operaciones lógicas que cubrían el conjunto completo de funciones booleanas de tabla de búsqueda de hardware (LUT2) de 2 operandos [ 41 ] (en lugar de las funciones de 3 operandos que tienen AVX512 y Power ISA).

Los modelos posteriores del PDP-10 tenían instrucciones para convertir entre BCD empaquetado y binario. [ 42 ]

También están presentes las inusuales instrucciones de carga y almacenamiento de bytes (de longitud variable en bits) que utilizan punteros de bytes para operandos de memoria: en la terminología moderna, estas son inserción y extracción de campos de bits. Además de una dirección de palabra, se especifican la longitud de bits (S) y el desplazamiento de bits (P) del byte desde el que se carga o en el que se almacena. Estas instrucciones pueden especificar un tamaño de byte de 0 a 36, ​​pero un byte no puede abarcar un límite de palabra. [ 43 ] Las instrucciones de manipulación de cadenas, [ 44 ] conversión BCD/binario, [ 45 ] y edición de cadenas [ 46 ] en modelos posteriores utilizan punteros de bytes y tienen las mismas restricciones.

Serie GE-600

La serie GE-600 y sus sucesoras contaban con conversión de Gray a binario; sin dicha instrucción, la conversión desde código Gray requiere varios pasos. La conversión de binario a Gray es sencilla x^(x>>1)y no justifica una instrucción específica. La codificación Gray tiene importantes aplicaciones prácticas .

BRAZO

RISC-V

En las extensiones estándar, RISC-V cuenta con operaciones escalares a nivel de bits, incluyendo desplazamiento y desplazamiento aritmético, pero no con rotación. Estas omisiones se compensan con extensiones adicionales.

  • Las extensiones RISC-V Zb* contienen un número significativo de instrucciones de manipulación de bits. [ 50 ] Los cuatro grupos se dividen en categorías útiles (el subconjunto de enteros tiene min/max, rotate y popcount, por ejemplo), y tienen justificaciones muy bien documentadas para su inclusión y las mejoras que aportan. [ 51 ]
  • La extensión vectorial RISC-V (RVV) tiene instrucciones que califican como manipulación de bits a nivel de hardware, pero en máscaras vectoriales en lugar de registros escalares, como suele ser el caso. Por ejemplo, está disponible un Popcount de máscara vectorial. [ 52 ] RVV también tiene operaciones bit a bit por elemento . [ 53 ]

microcontroladores integrados

Intel

  • El 8086 tiene TEST, así como operaciones bit a bit [ 54 ]
  • El 8051 tiene instrucciones para borrar e invertir bits, y un porcentaje considerable de sus instrucciones son de manipulación de bits. SETB[ 55 ] También incluye el complemento OR y el complemento AND, presentes en RISC-V Zb*. [ 56 ]CLRCPL

Zilog Z80

MOS 6502

  • El WDC 65C02 añadió manipulación de bits : prueba y establecimiento (TSB) y prueba y reinicio (TRB) en bits individuales.
  • Rockwell añadió extensiones similares (RMB, SMB, BBR y BBS) a la serie R65C00 [ 58 ].

Microchips PIC

Otros

  • Los DSP de Texas Instruments , como la serie TMS320C6000 , tienen instrucciones para establecer, borrar, invertir, probar, extraer e insertar bits (o campos de bits). [ 59 ]
  • El TX-2 de 1958 tenía predicación de "salto de bit" , así como establecer, borrar, invertir y permutar bits, y desplazamiento y otras operaciones bit a bit . [ 60 ] [ 61 ]
  • SuperH cuenta con manipulación de bits basada en memoria integral, incluyendo complemento AND y complemento OR, pero también tiene instrucciones estándar de prueba/establecimiento/borrado basadas en registros y una instrucción inusual que reemplaza el bit N (en el rango de 0 a 7) y copia el bit reemplazado en el registro de prueba. [ 62 ]
  • El Signetics 8X300 es un microprocesador presentado en 1976. Normalmente, el procesador manipula bytes de datos de 8 bits, pero las unidades de máscara y rotación permiten manipular bits individuales o múltiples, lo que lo convierte en un procesador de longitud de datos variable.
  • La arquitectura DEC PDP-11 de 1970 admite la comprobación, configuración y borrado de bits tanto en palabras como en bytes . El WD16, muy similar , solo admite las formas de palabra de estas instrucciones más . El WD16 también admite indicadores direccionados por byte más rápidos con sus instrucciones y (complemento). El PDP-11 carece de la instrucción.BITBISBICBITBBISBBICBBISBTSTBSETBCLRBCOMBSETB
  • El Motorola 68000 admite la comprobación y manipulación de bits en registros de memoria o de datos. El bit puede ser un valor inmediato o un valor en un registro de datos. Las instrucciones son: BSET(establecer a 1), BCLR(borrar a 0), BCHG(invertir) y BTST(sin cambios). Todas estas instrucciones primero comprueban el bit de destino y, si este es 0, establecen el bit CCR Z.

Notas

  1. No hay instrucciones de rotación en S/360 , S/370 o ESA/370 .
  2. La máscara inmediata es de 8 bits.

Véase también

Referencias

Principios de funcionamiento de z/Architecture (PDF) (Primera edición). IBM . Diciembre de 2000. SA22-7832-00 . Consultado el 8 de agosto de 2025 .
Principios de funcionamiento de z/Architecture (PDF) (Undécima edición). IBM . Marzo de 2015. SA22-7832-10 . Consultado el 8 de agosto de 2025 .
Principios de funcionamiento de z/Architecture (PDF) (Decimoquinta edición). IBM . Abril de 2025. SA22-7832-14 . Consultado el 3 de julio de 2025 .
Power ISA™ Versión 3.1 (PDF)  ( ed.v3.1 ). IBM . 1 de mayo de 2020. SA22-7832-14 . Recuperado el 7 de agosto de 2025 .
IBM System/370 Vector Operations (PDF) (Tercera edición). IBM Corporation. Agosto de 1986. SA22-7125-2 . Consultado el 20 de septiembre de 2018 .
DECsystem-10 - DECSYSTEM--20 - Manual de referencia del procesador (PDF) . Digital Equipment Corporation . AA-H391A-TK, AD-4391A-T1 . Consultado el 8 de agosto de 2025 en bitsavers.org.
  1. "Trucos de manipulación de bits" .
  2. "Instrucciones avanzadas para la manipulación de bits: arquitectura, implementación y aplicaciones" . ProQuest .
  3. "GitHub - riscv/Riscv-bitmanip en v0.93" . GitHub .
  4. Claire Wolf, ed. (20 de enero de 2021). "Documento de extensión de manipulación de bits RISC-V Versión 0.94-borrador" (PDF) .
  5. "GF2P8AFFINEQB — Transformación afín de campo de Galois" .
  6. "Guía de tecnología de nuevas instrucciones de campo de Galois (GFNI)" . networkbuilders.intel.com .
  7. ^ potencia3.1 , IBM Power ISA v3.1.
  8. 1 2 power3.1 , pág. 104, Power ISA Libro I Capítulo 3.3.13 Punto fijo.
  9. power3.1 , pág. 103, Power ISA Libro I Capítulo 3.3.13 Punto fijo.
  10. 1 2 power3.1 , pág. 106, Power ISA Libro I Capítulo 3.3.13 Punto fijo.
  11. power3.1 , pág. 445, Power ISA Libro I Capítulo 6.12.1 Instalación vectorial.
  12. power3.1 , pág. 105, Power ISA Libro I Capítulo 3.3.13 Punto fijo.
  13. power3.1 , pág. 967, Power ISA Libro I Capítulo 7. Instalación de extensión vectorial-escalar.
  14. power3.1 , pág. 117, Power ISA Libro I Capítulo 3.3.15 Punto fijo.
  15. "Unidad funcional multiplicativa de matriz de bits vectorial" .
  16. ibm370 , Operaciones vectoriales del sistema IBM System/370.
  17. ibm370 , págs. 3-7–3-8.
  18. z15 , págs .  1-16.
  19. z15 , pág. 7 - 426.
  20. 1 2 3 z15 , pág. 7 - 427.
  21. z15 , págs .  1-17.
  22. 1 2 z15 , págs. 7-430 – , 7–431.
  23. z15 , págs .  1-18.
  24. z15 , págs. 7-306 – , 7–307.
  25. z15 , pág. 7 - 307.
  26. z15 , págs. 7-307 – , 7–308.
  27. z15 , págs .  1-25.
  28. z15 , págs. 7-428 – , 7–430.
  29. z15 , págs .  1-26.
  30. z15 , págs. 7-35 – , 7–36.
  31. z15 , pág. 7 - 36.
  32. z1 , pág. 1 - 1.
  33. z11 , pág. xxviii.
  34. z15 , págs. 22-11–22-12.
  35. z15 , págs. 7-289–7-290.
  36. z15 , págs. 22–26, 7–424.
  37. z15 , págs. 22-37.
  38. z15 , págs . 22-16.
  39. z15 , págs. 8-1–8-14.
  40. z15 , págs. 7-458–7-459.
  41. pdp10 , p. 2 - 38, 2.4 Funciones booleanas.
  42. pdp10 , págs. 2–99.
  43. pdp10 , págs. 2-85–2-89, Manipulación de bytes.
  44. pdp10 , pp. 2-91–2-99, 2.12 Manipulación de cadenas.
  45. pdp10 , pp. 2-98–2-103, 2.13 Conversión decimal.
  46. pdp10 , pp. 2-104–2-112, 2.14 Edición de cadenas.
  47. "Tarjeta de referencia rápida del conjunto de instrucciones ARM" (PDF) . Octubre de 2003.
  48. "Documentación – Desarrollador Arm" .
  49. "Documentación – Desarrollador Arm" .
  50. "Riscv-bitmanip/Bitmanip/Index.adoc en main · riscv/Riscv-bitmanip" . GitHub .
  51. "Riscv-bitmanip/Bitmanip/Overview.adoc en main · riscv/Riscv-bitmanip" . GitHub .
  52. ^ "Riscv-v-spec/V-spec.adoc en master · riscvarchive/Riscv-v-spec" . GitHub .
  53. ^ "Riscv-v-spec/V-spec.adoc en master · riscvarchive/Riscv-v-spec" . GitHub .
  54. "Instrucciones de manipulación de bits en 8086 | Instrucciones lógicas" . 11 de agosto de 2018.
  55. "Instrucciones 8051" (PDF) .
  56. "Instrucciones booleanas (a nivel de bits) en el 8051 para manipulación de bits" . 29 de abril de 2020.
  57. Manual de usuario de la CPU de la familia Z80 (PDF) . Zilog . 2016. UM008011-0816. Archivado (PDF) del original el 26 de diciembre de 2023. Consultado el 5 de enero de 2024 .
  58. "Microcomputadoras de un solo chip Rockwell R6500/11, R6500/12 y R6500/15" . 7 de junio de 1987. Archivado del original el 3 de septiembre de 2023. Consultado el 30 de abril de 2020 .
  59. "Guía del programador TMS320C6000" (PDF) . Texas Instruments . Julio de 2011.
  60. "Documentación TX-2" .
  61. "Capítulo 3 - Código de operación" (PDF) . Manual del usuario TX-2 .
  62. "Resumen del conjunto de instrucciones Renesas SH" .

Lecturas adicionales

  • Hilewitz, Yedidya (2008). Instrucciones avanzadas de manipulación de bits: arquitectura, implementación y aplicaciones (PDF) (tesis doctoral). Universidad de Princeton .
    • Hilewitz, Yedidya; Lee, Ruby B. (noviembre de 2006). Arquitectura avanzada del conjunto de instrucciones para manipulación de bits. Informe técnico CE-L2006-004 . Departamento de Ingeniería Eléctrica de la Universidad de Princeton.
  • Koppelmann, Bastian; Adelt, Peer; Mueller, Wolfgang; Scheytt, Christoph (2019). Extensiones RISC-V para instrucciones de manipulación de bits . 29.º Simposio Internacional sobre Modelado, Optimización y Simulación de Potencia y Sincronización (PATMOS) de 2019. IEEE. págs. 41–48 . doi : 10.1109/PATMOS.2019.8862170 . ISBN  978-1-7281-2103-1.