2013年12月22日日曜日

32bitの素因数分解のアセンブラプログラム(dynabook AZ)

akira@dynabookAZ:~/arm1312$ ./d003
Favorite Number: 2147483626
2147483626=2*19*37*1527371
2147483627=47*53*862097
2147483628=2*2*3*3*59652323
2147483629=Kake Over
2147483630=2*5*6553*32771
2147483631=3*137*263*19867
2147483632=2*2*2*2*7*73*262657
2147483633=5843*367531
2147483634=2*3*12097*29587
2147483635=5*11*337*115861
2147483636=2*2*536870909
2147483637=3*3*3*13*6118187
2147483638=2*2969*361651
2147483639=7*17*18046081
2147483640=2*2*2*3*5*29*43*113*127
2147483641=2699*795659
akira@dynabookAZ:~/arm1312$ g d003
akira@dynabookAZ:~/arm1312$ ./d003
Favorite Number: 2147483627
2147483627=47*53*862097
2147483628=2*2*3*3*59652323
2147483629=Kake Over
2147483630=2*5*6553*32771
2147483631=3*137*263*19867
2147483632=2*2*2*2*7*73*262657
2147483633=5843*367531
2147483634=2*3*12097*29587
2147483635=5*11*337*115861
2147483636=2*2*536870909
2147483637=3*3*3*13*6118187
2147483638=2*2969*361651
2147483639=7*17*18046081
2147483640=2*2*2*3*5*29*43*113*127
2147483641=2699*795659
2147483642=2*23*46684427
akira@dynabookAZ:~/arm1312$ ./d003
Favorite Number: 2147483640
2147483640=2*2*2*3*5*29*43*113*127
2147483641=2699*795659
2147483642=2*23*46684427
2147483643=3*715827881
2147483644=2*2*233*1103*2089
2147483645=5*19*22605091
2147483646=2*3*3*7*11*31*151*331
Number Over
akira@dynabookAZ:~/arm1312$ ./d003
Favorite Number: 6
6=2*3
7=7
8=2*2*2
9=3*3
10=2*5
11=11
12=2*2*3
13=13
14=2*7
15=3*5
16=2*2*2*2
17=17
18=2*3*3
19=19
20=2*2*5
21=3*7
akira@dynabookAZ:~/arm1312$ cat d003.c
#include <stdio.h>

main(){
   long a,b,c,m,s,i,e,f,g;
   char s1[20]="%s";
   char s2[20]="Favorite Number: ";
   char s3[20]="%ld\n";
   char s4[20]="%ld*";
   char s5[20]="%ld=";
   char s6[20]="%ld";
   char s7[20]="Kake Over\n";
   char s8[20]="Number Over\n";
   char s9[20]="test1\n";
   char s10[20]="test2\n";
/*
   a=1;
   b=2;
   c=3;
   m=4;
   s=5;
   i=6;
   e=7;
   f=8;
   g=9;
*//*
   s1[0]='%';
   s2[0]='F';

   s3[0]='%';
   s4[0]='F';
   s5[0]='%';
   s6[0]='F';
   s7[0]='%';
   s8[0]='F';
   s9[0]='%';
   s10[0]='F';
*/
   __asm__(

   "add r0,r7,#4\n"
   "add r1,r7,#24\n"
   "bl printf\n"

   "add r0,r7,#104\n"
   "mov r1,r7\n"
   "bl __isoc99_scanf\n"
   "ldr r9,[r7,#0]\n"

   "movw r3,#65519\n"
   "movt r3,32767\n"
   "cmp r9,r3\n"
   "ble T2\n"

   "movw r8,#65534\n"
   "movt r8,32767\n"
   "b T3\n"

   "T2:\n"

   "add r8,r9,#15\n"

   "T3:\n"

   "mov r6,r9\n"
   "b T4\n"

   "T14:\n"

   "mov r5,r6\n"
   "add r0,r7,#84\n"
   "mov r1,r5\n"
   "bl printf\n"

   "movs r4,#2\n"
   "b T5\n"

   "T11:\n"

   "mul r2,r4,r4\n"
   "cmp r2,r5\n"
   "ble T6\n"

   "add r0,r7,#44\n"
   "mov r1,r5\n"
   "bl printf\n"
   "b T7\n"

   "T6:\n"

   "mov r0,r5\n"
   "mov r1,r4\n"
   "bl __aeabi_idivmod\n"

   "cmp r1,#0\n"
   "bne T8\n"

   "mov r0,r5\n"
   "mov r1,r4\n"
   "bl __aeabi_idiv\n"

   "mov r5,r0\n"
   "add r0,r7,#64\n"
   "mov r1,r4\n"
   "bl printf\n"

   "movs r4,#2\n"
   "b T5\n"

   "T8:\n"

   "cmp r4,#2\n"
   "bne T9\n"

   "adds r4,r4,#1\n"
   "b T10\n"

   "T9:\n"

   "adds r4,r4,#2\n"

   "T10:\n"

  "movs r3,#0\n"
  "movw r3,#46339\n"
   "cmp r4,r3\n"
   "ble T5\n"

   "add r0,r7,#4\n"
   "add r1,r7,#124\n"
   "bl printf\n"
   "b T7\n"

   "T5:\n"

   "cmp r4,r5\n"
   "ble T11\n"

   "T7:\n"

   "movw r3,#65533\n"
   "movt r3,32767\n"
   "cmp r6,r3\n"
   "ble T12\n"

   "add r0,r7,#4\n"
   "add r1,r7,#144\n"
   "bl printf\n"
   "b T16\n"

   "T12:\n"

   "adds r6,r6,#1\n"

   "T4:\n"

   "cmp r6,r8\n"
   "ble T14\n"

   "T16:\n"
   );

}

akira@dynabookAZ:~/arm1312$

0 件のコメント:

コメントを投稿