5. 산술 명령어¶
5.1. 문서 규칙¶
표기법: Rd, Rm, Rn 은 ARM 레지스터 R0-R7을 나타냅니다. immN 은 N비트 폭을 가진 즉시값을 나타냅니다(예: imm8, imm3). carry 는 캐리 조건 플래그를 나타내고, not(carry) 는 그 보수를 나타냅니다. 둘 이상의 레지스터 인수를 갖는 명령어의 경우, 그중 일부가 동일해도 무방합니다. 예를 들어 다음은 R0의 내용을 자기 자신에 더하여 결과를 R0에 넣습니다:
add(r0, r0, r0)
산술 명령어는 명시된 경우를 제외하고 조건 플래그에 영향을 줍니다.
5.2. 덧셈¶
add(Rdn, imm8)
Rdn = Rdn + imm8add(Rd, Rn, imm3)
Rd = Rn + imm3add(Rd, Rn, Rm)
Rd = Rn + Rmadc(Rd, Rn)
Rd = Rd + Rn + carry
5.3. 뺄셈¶
sub(Rdn, imm8)
Rdn = Rdn - imm8sub(Rd, Rn, imm3)
Rd = Rn - imm3sub(Rd, Rn, Rm)
Rd = Rn - Rmsbc(Rd, Rn)
Rd = Rd - Rn - not(carry)
5.4. 부호 반전¶
neg(Rd, Rn)
Rd = -Rn
5.5. 곱셈과 나눗셈¶
mul(Rd, Rn)
Rd = Rd * Rn
이것은 오버플로가 손실된 32비트 결과를 생성합니다. 결과는 피연산자의 정의에 따라 부호 있는 값 또는 부호 없는 값으로 취급될 수 있습니다.
sdiv(Rd, Rn, Rm)
Rd = Rn / Rmudiv(Rd, Rn, Rm)
Rd = Rn / Rm
이 함수들은 각각 부호 있는 나눗셈과 부호 없는 나눗셈을 수행합니다. 조건 플래그에는 영향을 주지 않습니다.