2009-11-17 4 views
1

DA 주소 지정 모드에 대해 두 가지 질문이 있습니다. 예를 들면 :는ARM DA (Decrement After) 주소 지정 모드의 첫 번째 주소는 어느 것입니까?

STMDA R0!, {R1-R7} 

시작 주소가 그 R0 될 것이다 ARM 아키텍처 참조 문서 및 END_ADDRESS에있어서, R0-24이다 R0 - (7 * 4) + 4 것이다.

그래서 :

  1. R1의 값은 R0-24 또는 R0에 저장 될 것인가?
  2. R0-24R1이 저장되어있는 경우 후속 저장은 메모리 상단 (R0-24에서 R0)으로 증가합니다.

답변

0

의사 코드의 일부는 다음과 같다 :

주소 = START_ADDRESS 위한 I = 0 register_list [I] == 1 개 다음 메모리 [어드레스, 4] 리 주소 = 어드레스 +를 = 경우 15 행 4

STM의 성장 방법은 데이터를 저장할 때 어드레싱 모드와 아무런 관련이없는 것 같습니다. 항상 하위 주소에서 상위 주소로 데이터를 저장합니다. 주소 지정 모드는만 R0을 기준으로 시작 주소를 결정합니까?

4

ARM 다중 저장 및로드를 사용할 때 레지스터 값은 항상 메모리에서 오름차순으로로드/저장됩니다. 따라서 내림차순 다중 저장소를 사용하면 레지스터가 메모리에 거꾸로 쓰여집니다. R0 - 16에서 R0 - 12

  • 가게 R3에서 R0 - 8
  • 가게 R4에서 R0 - 4
  • 가게 R5에서 R0
  • 가게 R6에서

    • 저장 R7 : 귀하의 STMDA 명령 효과적으로 다음 단계로 나누기 에서 R0 - 24
    • 빼기 (28)에서 R0 - 20
    • 저장 R1에서 363,210
    • 저장 R2 (때문에 쓰기 되돌림 의 - !). 그래서

  • , 당신의 질문에 대답하기 :

    1. R1의 값은 R0 - 24에 저장됩니다. (. - ! - 자, 내가하지 그 후, 명령을 실행 당신은 쓰기 저장을 사용하기 전에 R0의 값을 의미하므로 명령 후, R0 28가에서 차감 한 것입니다.)

    2. R1이 저장됩니다 R0 - 24이지만, 위에서 설명한대로 R1은 값을 메모리에 저장 한 마지막 레지스터입니다. R7이 먼저 저장되고 이후의 상점은 메모리에서 아래쪽으로 늘어납니다.

    나는이 대답을 뒷받침하는 문서를 모르겠다. 또한, 내가 마지막으로 ARM 코드를 작성한 이후로 꽤 오래되었습니다. 그러나 ARM이 내림차순 다중 저장소에 레지스터를 저장하는 방법에 대해 궁금합니다. 나는 이것을 알아 내기 위해 짧은 프로그램을 작성하여 이것을 알아 냈다.아암 아암 ARM 아키텍처 참조 설명서

    +0

    +1 절대적으로 맞습니다. 이 동작은 ARM 아키텍처 참조 설명서에 설명되어 있습니다. –

    +0

    감사합니다. 글쎄, 나는 start_address가 다소 애매하기 때문에 R0-24를 정의한다고 생각합니다. 이 start_address는 저장된 첫 번째 주소 대신 메모리의 최소 주소 일뿐입니다. – wenlujon

    +0

    명령어 연산을 설명하는 의사 코드는 매우 명확하며 Pourquoi의 설명과 일치합니다. –

    0

    검색하기 ...

    형성된 제 주소는이며에 지정된 레지스터의베이스 레지스터의 값을 뺀 네 번 수가 플러스 4. 후속 주소 인 이전 주소를 4 씩 증가 시켜서 형성됩니다. 에 지정된 각 레지스터에 대해 하나의 주소가 생성됩니다.