Códigos de operación y comportamiento no documentado del 8086

Avatar de Usuario
Jinks
Mensajes: 1314
Registrado: 09 Oct 2013 16:47
Agradecido : 60 veces
Agradecimiento recibido: 123 veces
Contactar:

Códigos de operación y comportamiento no documentado del 8086

Mensajepor Jinks » 09 Ene 2018 17:27

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í.
Adjuntos
Parte I.zip
(113.52 KiB) Descargado 32 veces

zxpope
Mensajes: 16
Registrado: 02 Ene 2018 02:25
Agradecimiento recibido: 2 veces

Re: Códigos de operación y comportamiento no documentado del 8086

Mensajepor zxpope » 09 Ene 2018 21:54

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.

:-)

Avatar de Usuario
Jinks
Mensajes: 1314
Registrado: 09 Oct 2013 16:47
Agradecido : 60 veces
Agradecimiento recibido: 123 veces
Contactar:

Re: Códigos de operación y comportamiento no documentado del 8086

Mensajepor Jinks » 09 Ene 2018 22:41

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é?

zxpope
Mensajes: 16
Registrado: 02 Ene 2018 02:25
Agradecimiento recibido: 2 veces

Re: Códigos de operación y comportamiento no documentado del 8086

Mensajepor zxpope » 10 Ene 2018 11:25

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!

Avatar de Usuario
Jinks
Mensajes: 1314
Registrado: 09 Oct 2013 16:47
Agradecido : 60 veces
Agradecimiento recibido: 123 veces
Contactar:

Re: Códigos de operación y comportamiento no documentado del 8086

Mensajepor Jinks » 10 Ene 2018 13:53

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.

Avatar de Usuario
mapache
Mensajes: 32
Registrado: 11 Dic 2017 13:40
Agradecido : 1 vez
Agradecimiento recibido: 5 veces

Re: Códigos de operación y comportamiento no documentado del 8086

Mensajepor mapache » 11 Ene 2018 12:08

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

Avatar de Usuario
Jinks
Mensajes: 1314
Registrado: 09 Oct 2013 16:47
Agradecido : 60 veces
Agradecimiento recibido: 123 veces
Contactar:

Re: Códigos de operación y comportamiento no documentado del 8086

Mensajepor Jinks » 11 Ene 2018 13:29

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é.

tranx
Mensajes: 150
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

Mensajepor tranx » 11 Ene 2018 22:57

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: No hay usuarios registrados visitando el Foro y 1 invitado