algorithm assembly x86-16

algorithm - Ensamblador pasa problema



meta tags seo 2018 (1)

Lo que puedes hacer es comenzar con la suposición de que un salto corto será suficiente. Si la suposición se vuelve inválida cuando descubres la distancia de salto (o cuando cambia), expandes tu salto corto a un salto cercano. Después de esta expansión, debe ajustar los desplazamientos de las etiquetas que siguen al salto expandido (por la longitud de la instrucción de salto cercano menos la duración de la instrucción de salto corto). Este ajuste puede hacer que otros saltos cortos sean insuficientes y también tendrán que cambiarse a saltos cercanos. Entonces, en realidad puede haber varias iteraciones, más de 2.

Al implementar esto, debe evitar mover el código en la memoria al expandir las instrucciones de salto. Severamente ralentizará el ensamblaje. Tampoco debe volver a analizar el código fuente del ensamblado.

También puede calcular previamente algún tipo de tabla de interdependencia entre saltos y etiquetas, de modo que puede omitir las etiquetas y las instrucciones de salto no afectadas por una instrucción de salto expandido.

Otra cosa en que pensar es que su salto corto tiene una distancia hacia adelante de 127 bytes y que cuando las siguientes instrucciones ascienden a más de 127 bytes y la etiqueta del objetivo aún no se encuentra, puede cambiar el salto a un salto cercano en ese momento. Tenga en cuenta que en cualquier momento puede tener hasta 64 saltos cortos adelante que pueden llegar a ser cercanos de esta manera.

Tengo un problema con mi ensamblador 8086 que estoy escribiendo. El problema es con los pases de ensamblador.

Durante el pase 1, calcula la posición relativa al segmento para cada etiqueta.

Ahora para hacer esto, el tamaño de cada instrucción debe calcularse y agregarse al desplazamiento.

Algunas instrucciones en el 8086 deberían ser más pequeñas si la posición de la etiqueta está dentro de un rango. Por ejemplo, "jmp _label" elegiría un salto corto si fuera posible y si no fuera así, un salto cercano.

Ahora el problema está en el pase 1, la etiqueta aún no se ha alcanzado, por lo tanto, no puede determinar el tamaño de la instrucción, ya que la "etiqueta corta jmp" es más pequeña que la instrucción "jmp near _label".

Entonces, ¿cómo puedo decidir si el clima "jmp _label" se convierte en "jmp short _label" o no?

Tres pases también pueden ser un problema, ya que necesitamos saber el tamaño de cada instrucción antes de la instrucción actual para incluso compensar.

Gracias