2013年8月19日月曜日

armアセンブラ、掛け算命令MLS

http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0204gj/Cihihggj.html

MUL{S}{cond} Rd, Rm, Rs
MLA{S}{cond} Rd, Rm, Rs, Rn
MLS{cond} Rd, Rm, Rs, Rn



MUL 命令は Rm と Rs の値を乗算し、演算結果の下位 32 ビットを Rd に返します。
MLA 命令は Rm と Rs の値を乗算し、Rn の値を加算して、演算結果の下位 32 ビットを Rd に返します。
MLS 命令は Rm と Rs の値を乗算し、その結果を Rn の値から減算して、最終的な演算結果の下位 32 ビットを Rd に返します。



#include <stdio.h>

main(){
   char s[10]="%d\n";
   int i1=2;
   int i2=3;
   int i3=4;
   int i4=5;
   int ii;
   
   s[0]='%';
   asm("   ldr r4,[r7,#0]");  r4←i1=2
   asm("   ldr r5,[r7,#4]");  r5←i2=3
   asm("   ldr r6,[r7,#8]");  r6←i3=4
   asm("   ldr r8,[r7,#12]");  r8←i4=5

   asm("   mls r4,r5,r6,r8");  掛け算 r4←r8-r5xr6=5-3x4=5-12=-7

   asm("   add r0,r7,#16");  printf(s,r1);
   asm("   mov r1,r4");
   asm("   bl printf");
}


akira@dynabookAZ:~/arm1308$ gcc -o 130819C 130819C.c -lm
akira@dynabookAZ:~/arm1308$ ./130819C
-7
akira@dynabookAZ:~/arm1308$ 




0 件のコメント:

コメントを投稿