El modo de armado y el modo de pulgar hacen que el bit 0 de la PC

1

Los modos ARM y Pulgar están alineados con la palabra y alineados con la mitad de las palabras. Entiendo que esto significa que si está en el modo ARM, el inicio de las direcciones debe ser divisible por 32, y si está en el modo Pulgar, tiene que ser divisible por 16. Pero, ¿cómo se relaciona esto con el bit 0 de la PC que nunca se utilizó para nada? (El instructor dijo que debido a eso utilizaron el bit 0 de PC para mostrar si está en modo pulgar o ARM ya que no se estaba usando para nada más, pero antes de eso estoy confundido acerca de la relación entre la alineación y el bit 0 de PC)

    
pregunta stumped

2 respuestas

3

La instrucción bx copia el bit 0 en el bit de estado T , por lo que selecciona entre ARM y el modo Pulgar en la rama.

Entonces, para saltar al código ARM en la dirección 0:

mov r0, 0
bx r0

Para saltar al código del pulgar en la dirección 0:

mov r0, 1
bx r0

Para saltar al código del pulgar en la dirección 2:

mov r0, 3
bx r0

El código ARM no puede existir en la dirección 2, porque eso violaría la restricción de alineación. Ni el código ARM ni el código Thumb pueden comenzar en direcciones impares, por lo que el LSB de la dirección siempre es cero, y el bit se reutiliza para seleccionar el nuevo modo en la instrucción bx .

Para permitir un fácil retorno de las subrutinas, el bit 0 del registro lr refleja el estado del pulgar antes de la llamada a la función después de una instrucción blx . Entonces:

    mov r0, #2f
    blx r0
1:
    b 1b

    .thumb
2:
    bx lr

cargará la dirección de la etiqueta 2 con el bit 0 establecido (como la etiqueta hace referencia al código Thumb) en r0 , luego blx carga la dirección de la etiqueta l con el bit 0 claro ( porque se refiere al código ARM) en lr y salta a la instrucción bx lr , que usa el lr para regresar al ciclo sin fin en el modo ARM.

    
respondido por el Simon Richter
1
  

Entiendo que esto significa que si está en el modo ARM, el inicio de las direcciones debe ser divisible entre 32, y si está en el modo Pulgar, tiene que ser divisible entre 16.

No; esto significa que en el modo ARM, las instrucciones deben comenzar en una dirección divisible por 4 o divisible por 2 en el modo Pulgar.

Los números que son divisibles por 4 también son divisibles por 2.

Los números que son divisibles por 2 son pares; siempre tienen su bit bajo (bit 0) establecido en 0.

    
respondido por el duskwuff

Lea otras preguntas en las etiquetas