새내기 ARM 어셈블러 질문. 내 첫 번째 팔 어셈블러 프로그램을 쓰고 있는데이 C 코드를 코딩하려고합니다.멀티 피치 후 암 어셈블러 오른쪽 시프트?
int x = somevalue1 << 12; // s19.12
int y = somevalue2 << 12; // s19.12
int a = somevalue3 << 12; // s19.12
int b = somevalue4 << 12; // s19.12
int c = somevalue4 << 12; // s19.12
long long acc = (long long) a * b;
acc += (long long) x * y;
int res = (acc >> 24);
acc += (long long) c * a;
저는 첫 번째 부분을 코딩하고 r10, r11 레지스터에서 합계를 계산했습니다.
@ r6 =a, r4 = b, r0 = x,r2 =y, r3=c
smull r10, r11, r6, r4 @acc = a * b
smlal r10, r11, r0, r2 @acc += x * y
이제 I은 24 비트에 의해 "긴 긴"이동 오른쪽으로 위로 R10 및 R11 레지스터에서 "입술"의 값을 추출 할 필요가있다. 어떻게해야합니까?
고마워요,
마지막 문장에서 정정하십시오. C의 정수 승격 규칙은 이진 연산자의 피연산자를 결코 좁히지 않습니다. '(acc >> 24)'에''acc'에 맞게''long long''으로 확장됩니다. –
@Mike Seymour. 결정된. – jbarlow