0
나는 그래서, C 코드에서, 그것은 ARM 어셈블리에서이 위의 작업을 수행하는 방법이ARM 어셈블리에서 모듈러스 연산을 수행하는 방법은 무엇입니까?
a = a + b;
c = a % 8;
같은 것 (8) 에 의해 그들을 두 레지스터의 값을 추가하려고하고, 모듈로하고있다.
나는 그래서, C 코드에서, 그것은 ARM 어셈블리에서이 위의 작업을 수행하는 방법이ARM 어셈블리에서 모듈러스 연산을 수행하는 방법은 무엇입니까?
a = a + b;
c = a % 8;
같은 것 (8) 에 의해 그들을 두 레지스터의 값을 추가하려고하고, 모듈로하고있다.
모든 ARM 프로세서에서 나눗셈 또는 모듈로에 대한 직접 명령이있는 것은 아니므로 대부분의 경우 모듈러스 연산에 대한 호출은 예를 들어 함수 호출로 끝납니다. ___modsi3
.
이 특별한 경우, 모듈로를 8로 할 때 값이 음수가 아닌 것으로 가정 할 수있는 경우 % 8
부분을 & 7
으로 지정할 수 있습니다. 이 경우 귀하의 경우를위한 어셈블리는 다음과 같습니다.
add rA, rA, rB
and rC, rA, #7
특정 값에 대해 실패한 경우를 가정 할 때 어떤 경우입니까? 예를 들어 71 mod 15 = 6 test = 11이다. 내가 뭔가를 놓치지 않는 한. – InfinitelyManic
모듈로 8은 7이며, 8은 2의 거듭 제곱이기 때문에 모듈로 15는 완전히 다르기 때문에베이스 2와 연산을 실제로 나누어야합니다. –
@old_timer, 예, 나는 그럴 수도 있다고 생각했습니다. 나는 뺄셈 기반의 mod 함수를 사용했다; 그러나 루프로 인해 mod 함수를 사용할 수있는 div보다 훨씬 느립니다. – InfinitelyManic