Opcodes inválidos

0

¿Qué sucede cuando un microprocesador como el 8085 obtiene un código de operación no válido, es decir, no forma parte de su conjunto de instrucciones, de la memoria e intenta descodificarlo y ejecutarlo? Encontré, en algún foro, que los códigos de operación no válidos se tratan como NOP, pero eso no es bueno ya que no informa al programador de que hay un problema. ¿Es esto realmente lo que sucede o se activa alguna interrupción (TRAP?)? ¿Qué pasaría si los códigos de operación inválidos de alguna manera llegasen a un procesador moderno? ¿Qué tan diferente es el comportamiento, con respecto a un 8085?

Lo pregunto porque estoy construyendo un entrenador 8085 que requerirá que los estudiantes ingresen códigos de operación en hexadecimal directamente en la RAM desde donde serán ejecutados, así que me gustaría saber qué pasaría si ingresan el código incorrecto . Además, ¿qué tan probable es que el código de operación incorrecto arruine el resto del programa? Gracias.

    
pregunta TisteAndii

3 respuestas

5

Con algo como un procesador 8085, el resultado es probablemente un "comportamiento indefinido". Esos dispositivos de la década de 1970 tenían una lógica limitada disponible para la decodificación de instrucciones, y diseñaron los códigos de operación para requerir un esfuerzo de decodificación mínimo. Por ejemplo, tal vez cada código de operación que tenía un '1' en el cuarto bit resultaría en una actualización del acumulador.

Estos dispositivos no informaron al programador de nada porque no pudieron ahorrar recursos para detectar un código de operación incorrecto. Tampoco se comportaría necesariamente como un NOP, porque los campos del código de operación podrían pasar a través de la lógica de decodificación y producir algún comportamiento que cambiara el estado del procesador.

Sería tarea del programador o el compilador no generar códigos de operación no válidos, lo que no es realmente muy difícil cuando se piensa en ello. Un compilador no producirá ningún código de operación que no haya sido programado para producir.

Parece probable que los procesadores más nuevos, con muchos más recursos, puedan ahorrar algunos para detectar códigos de operación no válidos y producir un comportamiento definido, pero no estoy lo suficientemente familiar como para comentar sobre eso.

    
respondido por el The Photon
4

Los códigos de operación no válidos probablemente se interpretarían como algo y harían algo en lugar de actuar como NOP o causar trampas de "instrucción ilegal", cualquiera de los cuales requeriría recursos de hardware adicionales para decodificar y anular o capturar.

Lo que ese algo es, para el 8085, no tengo idea.

Sin embargo, comparte muchas instrucciones con el Z80 contemporáneo (ligeramente anterior), ya que ambos eran diseños derivados del Intel 8080.

Para el Z80, era bastante conocido (extraoficialmente, como una leyenda urbana) que había instrucciones adicionales e incluso registros adicionales, accesibles a través de los códigos de operación no documentados.

Esto fue hipotetizado por personas que inspeccionaron los patrones de bits de las instrucciones documentadas e indocumentadas, básicamente adivinando qué hicieron los orificios y probando estas hipótesis en lenguaje ensamblador (o más probablemente, binario en bruto).

No conozco la historia completa, pero sospecho que estas instrucciones y registros fueron diseñados, pero se encontró que no eran lo suficientemente confiables en todas las variaciones del proceso, el voltaje de suministro y la temperatura, y que las instrucciones revisadas se escribieron fuera de las especificaciones. , en lugar de retrasar el lanzamiento del producto. Y dado el éxito del Z80, esa fue probablemente la opción inteligente.

Todavía hay (no oficial) documentación disponible para las instrucciones faltantes del Z80 ...

Lamentablemente, nunca he escuchado historias similares sobre el 8085 ...

(Anecdóticamente, hubo un código de operación no válido para el 6809 que podría destruirlo, dado el HCF mnemónico altamente no oficial, para Halt and Catch Fire )

    
respondido por el Brian Drummond
1

Respondiendo a

  

¿Qué pasaría si los códigos de operación no válidos de alguna manera llegasen a un moderno   ¿procesador? ¿Qué tan diferente es el comportamiento, con respecto a un 8085?

Los procesadores más modernos que 8085, como un ARM, detectan varias condiciones no válidas y atrapan a través de vectores específicos de captura / interrupción.

ARM detecta y atrapa los códigos de operación no válidos, y también captura los códigos de operación válidos del coprocesador cuando falta el coprocesador. Esto permite emular el coprocesador en el software.

IIRC, los ARM son más sofisticados que el simple reconocimiento de códigos de operación no válidos. Específicamente, hay códigos de operación válidos donde algunos números de registro, que son válidos en otras operaciones, no son válidos. Tendré que buscar ejemplos si los necesita (me desperté para tomar una bebida y visitar el baño :).

Además, muchos de los primeros procesadores RISC no podrían tener instrucciones o algunos tipos de datos alineados en los límites de las direcciones de bytes impares, y podrían interceptarse si una dirección tiene el bit inferior establecido.

    
respondido por el gbulmer

Lea otras preguntas en las etiquetas