2013年8月19日月曜日

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

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("   mul r4,r5,r6");  掛け算 r4←r5xr6=3x4=12

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


akira@dynabookAZ:~/arm1308$ gcc -o 130819A 130819A.c -lm
akira@dynabookAZ:~/arm1308$ ./130819A
12
akira@dynabookAZ:~/arm1308$ 


0 件のコメント:

コメントを投稿