2014-10-24 2 views
2

나는 그것을 보았고 아무것도 잘 설명하지 못했다. 그것은 rlwimi가 그것과 동등하게 사용될 수 있다고 말하지만, 나는 그 지시도 모른다. 거기 그것으로단서 insrwi에 관하여

코드 :

andi.  r0, r6, 3  # while(r6 != 3) 
bdnzf  eq, loc_90014730 # if(CTR != 0) loc_90014730(); 
insrwi r4, r4, 8,16 # ???? 
srwi.  r0, r5, 4  # r0 = r5 >> 4; 
insrwi r4, r4, 16,0 

(R4 == 0)

가 나는 잠시 동안이 명령에 붙어 있었어요. 제발, 제게 결과를주지 마시고 제발 자세한 설명을 해주세요.

답변

3

나는 완전히 자신에게 설명하는 rlwimi와 함께 몇 가지 실험을 할 필요가 있다고 생각하지만, 여기에 내가 도움이 것입니다. inslwi 및 insrwi에 대한 좀 더 자세한 정보를 제공합니다 rlwimi의 파워 PC 프로그래밍 매뉴얼의 1 권에서 프로그래밍 주석이

:

rlwimi는 n 비트 필드를 삽입 할 수 있습니다

위치 b에서 시작하여 SH = 32-b, MB = b 및 ME = (b + n) -1을 설정하여 레지스터 RS의 하위 32 비트를 의 왼쪽 정렬로 RAL로 왼쪽 정렬합니다. SH = 32- (b + n)을 설정하여 레지스터 RS의 하위 32 비트에서 오른쪽 정렬 된 n 비트 필드를 비트 위치 b에서 시작하는 RAL에 삽입 할 수 있습니다 MB = b이고, ME = (b + n) -1이다.

또한 insrwi와 inslwi의 결과를 비교하는 데 도움이됩니다. 다음은 rlwimi 절차를 통해 추적하는 두 가지 예입니다. 여기서 r4 = 0x12345678입니다.

insrwi의 R4, r4,8,16가 rlwimi R4는 동일하다

  1. 회전이 8 개 비트를 남겨하고 그 위치에서 원래 R4의 마지막 8 개 비트를두고 나타날

    r4,8,16,23 일치하는 생성 된 마스크 : 0x12347878
: 생성 된 마스크의 통제하에, 0x0000FF00
  • 삽입 마지막 8 비트, R4에서 오른쪽으로 정렬했다 그 8 비트했다 : 0x34567812
  • 마스크를 생성

    그러면 insrwi는 비트 32에서 시작하여 오른쪽에서 n 비트를 취해 비트 b에서 시작하여 대상 레지스터에 삽입합니다.

    inslwi의 R4, r4,8,16가 rlwimi R4는 동일하다

    1. 회전은 16 비트를 좌측과 그 위치에서 원래 R4의 제 8 개 비트를두고 나타날

      r4,16,16,23 일치하는 생성 된 마스크 : 0x12341278
    : 생성 된 마스크의 제어하에 0x0000FF00
  • 삽입 제 8 비트, R4에서 좌측 정렬 된 이들 8 비트 같다 : 0x56781234
  • 마스크 생성

    그래서 inslwi는 왼쪽에서 n 비트 (비트 0에서 시작)를 취해 비트 b에서 시작하여 대상 레지스터에 삽입합니다.

  • 0

    PowerISA 2.07 [1]에서는 inslwi가 rlwimi의 확장 된 니모닉이며 이와 동등한 rlwimi 명령과 그 관련 방법을 설명합니다. 아마도 PowerISA에는 원하는 세부 수준이 있습니다. :)

    [1] https://www.power.org/documentation/power-isa-version-2-07/

    (또는 구글, PDF)