Este tema no es exclusivo de la arquitectura PC, sino del 8086, vaya en la máquina que vaya, pero es el mejor sitio que he encontrado para ponerlo.
Hace años estuve haciendo una investigación sobre las instrucciones no documentadas del 8086, que son unas cuantas y vi que no estaban explicadas en ningún sitio, así que me puse intentar descifrarlas y lo conseguí. No sé si todo o casi todo, porque ahora lo que estoy descifrando son todas las notas que escribí y como hay bastante material y lo voy a publicar por partes, ahora mismo no me queda claro si me dejé algo o no (creo que algo sí que me dejé).
El caso es que aunque las pruebas con el 8086 las hice yo, lo hice un poco en colaboración con el propietario de la web OS/2 Museum, así que ahora que me he puesto a ordenarlo, juntarlo y pasarlo a limpio en inglés, le pasé la primera parte a él y hace unos días se publicó allí una versión con algunas cosas recolocadas, con un párrafo añadido (me ha debido de leer el cerebro, porque es algo que yo iba a incluir pero al final se me olvidó hacerlo). El texto está algo editado porque mi inglés y/o mis explicaciones no debían de convencerle. Y también está americanizado (ha cambiado "Behaviour" por "Behavior"... el sabrá). Bueno, pues hoy he tenido tiempo para traducirlo a español (sí, el original lo hice en inglés) y lo subo aquí.
Para las siguientes partes haré lo mismo: La versión inglesa a OS/2 Museum y la española a RetroWiki. Iré indicándolo en este hilo, pero en lugar de poner más adjuntos iré actualizando el de este mensaje, para que al final quede una única versión completa. Bueno, si veo que el tema le interesa a alguien, si no lo dejamos así.
Códigos de operación y comportamiento no documentado del 8086
- Jinks
- Mensajes: 2701
- Registrado: 09 Oct 2013 16:47
- Agradecido : 348 veces
- Agradecimiento recibido: 478 veces
- Contactar:
Códigos de operación y comportamiento no documentado del 8086
- Adjuntos
-
- Parte I.zip
- (113.52 KiB) Descargado 126 veces
-
- Mensajes: 324
- Registrado: 02 Ene 2018 02:25
- Agradecido : 125 veces
- Agradecimiento recibido: 155 veces
Re: Códigos de operación y comportamiento no documentado del 8086
Muy interesante tu trabajo.
El comportamiento no documentado, ¿podría ser fruto de optimizaciones lógicas?
Viendo la correspondencia entre los resultados observados y
el codigo hexadecimal de esas operaciones, y usando las tablas de Karnaugh
https://es.wikipedia.org/wiki/Mapa_de_Karnaugh
quizás se pueda deducir el origen.
El comportamiento no documentado, ¿podría ser fruto de optimizaciones lógicas?
Viendo la correspondencia entre los resultados observados y
el codigo hexadecimal de esas operaciones, y usando las tablas de Karnaugh
https://es.wikipedia.org/wiki/Mapa_de_Karnaugh
quizás se pueda deducir el origen.
- Jinks
- Mensajes: 2701
- Registrado: 09 Oct 2013 16:47
- Agradecido : 348 veces
- Agradecimiento recibido: 478 veces
- Contactar:
Re: Códigos de operación y comportamiento no documentado del 8086
Hombre, está claro que todas las instrucciones indocumentadas que son equivalentes a una instrucción documentada, se diferencian de ella en un único bit del opcode o del segundo byte. Creo que eso es más o menos lo mismo que lo que quieres decir de los mapas de Karnaugh. Y eso es parte de lo que dice el párrafo añadido en el artículo de OS/2 Museum.
Pero yo me inclino más a que es por vaguería que por optimización. Si decodifico sólo 7 bits en lugar de 8, voy a saltar al mismo punto del microcódigo para 2 opcodes, pero puesto que uno de ellos (el indocumentedo) no lo debe usar nadie, puedo suponer que el opcode leído es el documentado. Si a alguien le da por usar el opcode indocumentado, pues el resultado será el mismo.
Optimización implicaría una mejora, por ejemplo en rendimiento. Pero un 8086, por muy arcaico que sea, tiene un decodificador que por mirar el ocatvo bit no debería perder un ciclo más.
En cualquier caso, tampoco son muchas las instrucciones que son equivalentes a una documentada. Son las que así se indica en este primer PDF y otras 3. Todas las demás no lo son, así que no comparten todo el microcódigo de otra instrucción, aunque lo que ejecutan deberían ser partes del microcódigo de otras instrucciones (una o varias). Una instrucción no documentada que hace algo que (de manera parcial o total) no haga una instrucción documentada, es indicativo de que se ha programado así conscientemente. En ese caso sí que sería muy interesante saber por qué se hizo y luego no se documentó. En el caso de LOADALL, que sirve para saltarse todas las protecciones en los 286 y 386, está claro, pero en el caso de SALC, ¿por qué?
Pero yo me inclino más a que es por vaguería que por optimización. Si decodifico sólo 7 bits en lugar de 8, voy a saltar al mismo punto del microcódigo para 2 opcodes, pero puesto que uno de ellos (el indocumentedo) no lo debe usar nadie, puedo suponer que el opcode leído es el documentado. Si a alguien le da por usar el opcode indocumentado, pues el resultado será el mismo.
Optimización implicaría una mejora, por ejemplo en rendimiento. Pero un 8086, por muy arcaico que sea, tiene un decodificador que por mirar el ocatvo bit no debería perder un ciclo más.
En cualquier caso, tampoco son muchas las instrucciones que son equivalentes a una documentada. Son las que así se indica en este primer PDF y otras 3. Todas las demás no lo son, así que no comparten todo el microcódigo de otra instrucción, aunque lo que ejecutan deberían ser partes del microcódigo de otras instrucciones (una o varias). Una instrucción no documentada que hace algo que (de manera parcial o total) no haga una instrucción documentada, es indicativo de que se ha programado así conscientemente. En ese caso sí que sería muy interesante saber por qué se hizo y luego no se documentó. En el caso de LOADALL, que sirve para saltarse todas las protecciones en los 286 y 386, está claro, pero en el caso de SALC, ¿por qué?
-
- Mensajes: 324
- Registrado: 02 Ene 2018 02:25
- Agradecido : 125 veces
- Agradecimiento recibido: 155 veces
Re: Códigos de operación y comportamiento no documentado del 8086
hola jinks,
perdona, ya no recuerdo nada del asm del 8086
en general, al simplificar la lógica del decodificador,
se ahorra area de silicio, y por tanto se ahorra dinero
y se reduce el tiempo de propagación de la señal,
con lo que se puede subir la frecuencia de reloj, y por tanto, se puede hacer pagar el chip mas caro.
en modos no definidos, entiendo que es posible comportamientos erraticos.
para aclarar estos detalles, hay gente que los domingos, despues de comer, se entretiene en hacer ingenieria inversa a partir de fotos
del silicio, deduciendo la estructura lógica del chip a partir de los transistores MOS
el 6502
http://visual6502.org/JSSim/index.html
el 8086 no ha sido investigado
http://visual6502.org/images/pages/Inte ... shots.html
suerte y animo con las investigaciones!
perdona, ya no recuerdo nada del asm del 8086
en general, al simplificar la lógica del decodificador,
se ahorra area de silicio, y por tanto se ahorra dinero
y se reduce el tiempo de propagación de la señal,
con lo que se puede subir la frecuencia de reloj, y por tanto, se puede hacer pagar el chip mas caro.
en modos no definidos, entiendo que es posible comportamientos erraticos.
para aclarar estos detalles, hay gente que los domingos, despues de comer, se entretiene en hacer ingenieria inversa a partir de fotos
del silicio, deduciendo la estructura lógica del chip a partir de los transistores MOS
el 6502
http://visual6502.org/JSSim/index.html
el 8086 no ha sido investigado
http://visual6502.org/images/pages/Inte ... shots.html
suerte y animo con las investigaciones!
- Jinks
- Mensajes: 2701
- Registrado: 09 Oct 2013 16:47
- Agradecido : 348 veces
- Agradecimiento recibido: 478 veces
- Contactar:
Re: Códigos de operación y comportamiento no documentado del 8086
zxpope escribió:para aclarar estos detalles, hay gente que los domingos, despues de comer, se entretiene en hacer ingenieria inversa a partir de fotos
del silicio, deduciendo la estructura lógica del chip a partir de los transistores MOS
Eso daría una información más precisa y completa que la que puedo dar yo habiendo hecho pruebas de "caja negra". Se podría incluso inferir los ciclos de reloj por instrucción, cosa a la que yo no he podido llegar. Así como verificar los ciclos que vienen en los manuales, que sospecho que algunos son incorrectos.
Re: Códigos de operación y comportamiento no documentado del 8086
Quizás te interese este programa, es un fuzzer para auditar y buscar instrucciones no documentadas y bugs en microprocesadores x86:
https://github.com/xoreaxeaxeax/sandsifter
https://github.com/xoreaxeaxeax/sandsifter
- Jinks
- Mensajes: 2701
- Registrado: 09 Oct 2013 16:47
- Agradecido : 348 veces
- Agradecimiento recibido: 478 veces
- Contactar:
Re: Códigos de operación y comportamiento no documentado del 8086
Interesante, pero creo que ese tipo de programas no funcionan en el 8086. De hecho la documentación habla de los Pentium como "procesadores mucho más viejos".
No he mirado el código, pero la única forma que se me ocurre de descubrir instrucciones no documentadas de manera sistemática implicaría el uso de la interrupción de instrucción no definida y/o del modo virtual, que en la arquitectura x86 no se implementaron hasta el 286 y 386, respectivamente. El 8086 no tiene nada de eso.
De todas formas el trabajo lo terminé hace años, lo únco que me falta es completar el documento final con las notas que tomé.
No he mirado el código, pero la única forma que se me ocurre de descubrir instrucciones no documentadas de manera sistemática implicaría el uso de la interrupción de instrucción no definida y/o del modo virtual, que en la arquitectura x86 no se implementaron hasta el 286 y 386, respectivamente. El 8086 no tiene nada de eso.
De todas formas el trabajo lo terminé hace años, lo únco que me falta es completar el documento final con las notas que tomé.
-
- Mensajes: 155
- Registrado: 10 Mar 2016 17:59
- Ubicación: Retrofornia
- Agradecimiento recibido: 14 veces
Re: Códigos de operación y comportamiento no documentado del 8086
Muy buen trabajo amigo, me parece muy interesante, estuve muy metido en el tema de programacion ASM
Volver a “PC & Compatibles X86”
¿Quién está conectado?
Usuarios navegando por este Foro: Perro y 7 invitados