Por ejemplo, el acumulador se llama EAX
y, mientras que el puntero de instrucción se llama IP
. También sé que hay bytes llamados CL
y DH
. Sé que debe haber una convención para todos los nombres, pero ¿qué es?¿Por qué se nombran los registros x86 tal como son?
Respuesta
La C y la D son números/tipos y H para alto y L para partes bajas del registro más alto. http://en.wikipedia.org/wiki/X86
Wikipedia lo explica muy bien.
Más de la Wikipedia:
- AX/EAX/RAX: acumulador
- BX/EBX/RBX: base de
- CX/ECX/RCX: contador
- DX/EDX/RDX : datos de/en general
* EAX - Accumulator Register
* EBX - Base Register
* ECX - Counter Register
* EDX - Data Register
* ESI - Source Index
* EDI - Destination Index
* EBP - Base Pointer
* ESP - Stack Pointer
Es historia. El x86 vino del 8086, que vino del 8080, que vino del 8008, que vino del 4004. Había registros de 16 bits AX, BX, etc. y para el 80386 se "ampliaron" a 32 bits.
Agregado: Por cierto, el Motorola 68K tenía registros de 32 bits desde el principio, por lo que era mucho más fácil de programar durante las primeras décadas. Trabajé en proyectos en los que se eligió Intel por motivos comerciales, no técnicos.
El ISN historia 't continuo - el 8080 tiene diferentes nombres de registro, y esos nombres entraron con el 8086. Sin embargo, vale la pena destacar la arquitectura CISC aquí, con registros de propósito especial, tanto en las variantes 8086 como 8080 - RISC llegó más tarde, con su' todos los registros tienen el mismo enfoque (ayudados por tener 32 bits por instrucción en lugar de intentar codificar la mayoría de las instrucciones en 8 bits). – ijw
@ijw - pero hay/hay traductores de 8080 a 8086, y hay un mapeo. El registro A de 8080 se convirtió en AL, el par de registros B 8080, C se convirtió en CH, CL. El par de registros 8080 D, E se convirtió en DH, DL. El par de registros 8080 H, L se convirtió en BH, BL. 8086 incluye instrucciones de LAHF y SAHF que ayudan con la traducción de 8080 a 8086. 8086 registros agregados como SI (índice de origen), DI (índice de destino) y BP (puntero de base que por defecto se registra en el segmento SS). – rcgldr
Los procesadores antiguos tienen acumuladores llamados A, B, etc. (ordenados alfabéticamente). Cuando se desarrollaron acumuladores de 16 y 32 bits, los ingenieros agregaron una X (extendida). Así que todo se trata de historia, ya que el lenguaje C se llama así porque se desarrolló a partir del lenguaje B (laboratorios Bell).
La convención es solo interna, para mantenerse al día con los nombres con los que ya están familiarizados.
En realidad, los registros no están en orden alfabético. El orden real es A, C, D, B –
Algunas buenas respuestas aquí: x86 assembly registers — Why do they work the way they do?
- 1. ¿Por qué se nombra la utilidad `nm` como tal?
- 2. Haskell: ¿Por qué `par` se definió tal como era?
- 3. ¿Por qué la estructura GUID se declara tal como es?
- 4. Listas definidas como ¿Tal vez en Haskell? Por qué no?
- 5. ¿Qué compiladores x86 C++ son multiproceso por sí mismo?
- 6. ¿Por qué un .NET EXE, compilado como x86, se ejecuta como x64?
- 7. ¿Por qué Python está ordenando mi diccionario como tal?
- 8. PHP: ¿Por qué algunas personas nombran funciones con '_' al principio?
- 9. ¿Cómo se nombran dinámicamente los objetos en Java?
- 10. ¿Qué son los registros de llamadas y de llamadas guardadas?
- 11. ¿Por qué hay solo cuatro registros?
- 12. ¿Por qué son importantes los árboles binarios?
- 13. ¿Por qué no se implementan los mapas C++ como intentos?
- 14. ¿Por qué los registros de la CPU son rápidos de acceder?
- 15. ¿Por qué se 'implementa' como 'como'?
- 16. ¿Por qué los iframes son tan lentos?
- 17. ¿por qué necesitamos zone_highmem en x86?
- 18. ¿Cómo se comparten los registros entre subprocesos?
- 19. ¿Por qué los vectores son tan superficiales?
- 20. Scala: ¿Por qué los actores son livianos?
- 21. ¿Por qué los objetos Joda son inmutables?
- 22. ¿Por qué los globales son malos?
- 23. por qué los marcos son malos
- 24. Por qué los puntos son lentos
- 25. ¿Qué son las cookies firmadas y por qué son útiles?
- 26. ¿Qué registros se restauran después de una llamada a función x86 en c?
- 27. ¿Por qué es x86 little endian?
- 28. ¿Qué significan los corchetes en x86 asm?
- 29. ¿Por qué los EJB son seguros y los servlets no?
- 30. ¿Por qué los registros de Delphi no tienen herencia?
Para más historia y explicación: http://www.swansontec.com/sregisters.html – rmmh
@ Daniel, se ha perdido el ESI, EDI, EBP, etc. – Pacerier