2011-10-09 3 views
1

학교용으로 ARM 시뮬레이터 작성 중입니다. ARM ARM (http://www.eecs.umich.edu/~prabal/teaching/eecs373-f11/readings/ARMv7-M_ARM.pdf)에서 분기 오프셋에 대한 두 번째 및 세 번째 최상위 비트를 I1 = NOT(J1 EOR S);I2 = NOT(J2 EOR S); (ARM ARM Pg 239)으로 계산합니다. 왜 이런 식으로하는지 아는 사람이 있습니까? 웬일인지 그것이 나를 일으키는 원인이되고있는 것처럼 보인다.B 명령어 인코딩

+0

인코딩을 보여주는 몇 가지 예제 디스 어셈블리가 있습니까? –

답변

2

이것은 조금은 수수께끼 같지만 I1과 I2 비트를 유효한 명령어 인코딩으로 매핑하는 기법 인 것으로 보입니다.

Thumb 분기 명령어는 16 비트 하위 명령어 쌍으로 인코딩됩니다. 각 16 비트 하위 명령어는 고유 한 명령어 인코딩을 필요로합니다.

'S'비트는 부호 비트이므로 T3 인코딩과 T4 인코딩을 첫 번째 16 비트 하위 명령어와 구분할 방법이 없음을 알 수 있습니다.

두 번째 하위 명령어 비트 12에서는 인코딩 T3와 T4를 구별합니다. 그러나 I1과 I2를 직접 사용하면 기존 지침과 충돌하기 때문에 분기의 범위를 결정하는 네 가지 인코딩 중 하나에 포함됩니다.