32bit 명령어는 32bit 상수값을 포함할 수 없다?

rain의 이미지

"ARM 명령어는 32비트의 크기이기 때문에 ARM 명령어가 32비트의 상수값을 포함할 수 없다는 것은 분명한 사실이다."
라는 말은 도데체 이유가 머죠? ㅡㅡa 전 당연하게 이해가 않되서....

cinsk의 이미지

ARM과 같은 RISC 머신의 특징상, (100%는 아니지만) 대개 instruction의 길이가 32-bit, 16-bit 등으로 고정되어 있습니다. 따라서 32bit instruction을 쓸 경우, instruction에 직접 들어가는 값 (보통 imm 또는 immediate라고 표현합니다.)은 opcode가 차지하는 영역 나머지 부분만 쓸 수 있습니다. 즉,

<-------- 32 bit ---------->
|| opcode |       imm     ||

인 셈이므로, imm은 32-bit보다 작습니다. 그렇다고 "ARM에서 처리하는 수치는 모두 32-bit보다 작으냐?" 그건 아닙니다. imm 형태로 instruction에 들어갈 수 있는 수치만 제한있는 것입니다. 따라서 load/store 등의 명령으로 처리하는 수치는 해당되지 않습니다.

--
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://www.cinsk.org/cfaqs/