2017-11-13 4 views
1

ARM 어셈블리를 사용하여 레지스터 값을 주소에 저장하려고합니다. 이런 종류의 것을 찾고 있는데ARM 어셈블리를 사용하여 레지스터의 값을 절대 주소에 저장하려면 어떻게합니까?

STR R0, =0x20000000   // store r0 to 0x20000000 

그러나 이것은 잘못된 것입니다. 다음과 같이이 작업을 수행하는

한 가지 방법은

LDR R1, =0x20000000 
STR R0, [R1 + #0] 

입니다하지만 위에서 언급 한 바와 같이, 하나의 레지스터를 사용하여 수행 할 수 있습니다. 그렇게 할 방법이 있습니까?

+2

전체 32 비트 절대 주소를 인코딩하기에 기계 코드에 충분한 공간이 없으므로 아니오입니다. 사용 가능한 무료 스택이 없다면 스택에 레지스터를 저장할 수 있습니다. – Jester

+0

기계 코드 명령어의 크기는 얼마입니까? –

+1

@MuzahirHussain 엄지 손가락 코드 (Cortex M3에서 사용됨)에서 명령어는 2 또는 4 바이트 길이입니다. – fuz

답변

2

하지만 위에서 언급 한 것처럼 하나의 레지스터 만 사용하고 싶습니다.

그렇게 할 수있는 인스 턴션이 없기 때문에 모든 매장 지침에는 하나 이상의 수신 주소가 필요합니다.

이유는 아주 간단합니다 : 32 비트 명령어를 가지고 있음에도 불구하고 opcode에 대해 더 많은 비트가 필요하기 때문에 전체 32 비트 주소를 인코딩하는 데 사용할 수있는 비트가 충분하지 않습니다.

동일한 이유로로드 및 저장 명령어의 optinal 오프셋이 제한됩니다.

관련 문제