Pi: Difference between revisions
Content added Content deleted
m (Add SML) |
VincentARM (talk | contribs) (Add task to arm assembly raspberry pi) |
||
Line 381: | Line 381: | ||
<pre> |
<pre> |
||
3141592653589793238462643383279502 |
3141592653589793238462643383279502 |
||
</pre> |
|||
=={{header|ARM Assembly}}== |
|||
{{works with|as|Raspberry Pi <br> or android 32 bits with application Termux}} |
|||
<syntaxhighlight lang ARM Assembly> |
|||
/* ARM assembly Raspberry PI */ |
|||
/* program calculPi.s Spigot algorithm */ |
|||
/* conversion to Pascal */ |
|||
/************************************/ |
|||
/* Constantes */ |
|||
/************************************/ |
|||
/* for this file see task include a file in language ARM assembly*/ |
|||
.include "../constantes.inc" |
|||
.equ NBVAL, 3000 |
|||
.equ LEN, 10 * NBVAL / 3 @ 10000 |
|||
//.include "../ficmacros32.inc" @ for debugging developper |
|||
/************************************/ |
|||
/* Initialized data */ |
|||
/************************************/ |
|||
.data |
|||
szCarriageReturn: .asciz "\n" |
|||
szMessStart: .asciz "Program 32 bits start.\n" |
|||
szVal9: .asciz "9" |
|||
szVal0: .asciz "0" |
|||
.align 2 |
|||
/************************************/ |
|||
/* UnInitialized data */ |
|||
/************************************/ |
|||
.bss |
|||
sZoneConv: .skip 24 |
|||
ibuffer: .skip 4 * (LEN+1) |
|||
/************************************/ |
|||
/* code section */ |
|||
/************************************/ |
|||
.text |
|||
.global main |
|||
main: @ entry of program |
|||
ldr r0,iAdrszMessStart |
|||
bl affichageMess |
|||
ldr r12,iN |
|||
ldr r10,iLen |
|||
mov r1,#0 |
|||
ldr r8,iAdribuffer |
|||
mov r2,#2 |
|||
1: @ init start array loop |
|||
str r2,[r8,r1, lsl #2] @ store 2 |
|||
add r1,#1 |
|||
cmp r1,r10 |
|||
blt 1b |
|||
mov r9,#0 @ nine |
|||
mov r7,#0 @ predigit |
|||
mov r6,#0 @ j |
|||
2: @ begin loop 1 |
|||
mov r5,#0 @ q |
|||
sub r4,r10,#1 @ i |
|||
3: @ loop 2 |
|||
ldr r0,[r8,r4, lsl #2] @ load value |
|||
mov r1,#10 |
|||
mul r0,r1,r0 @ val * 10 |
|||
mul r1,r5,r4 @ q *i |
|||
add r0,r1 |
|||
lsl r1,r4,#1 @ divisor =i *2 |
|||
sub r1,#1 @ - 1 |
|||
bl division |
|||
str r3,[r8,r4, lsl #2] @ modulo 2i-1 |
|||
mov r5,r2 @ q |
|||
subs r4,#1 @ decremente i |
|||
bgt 3b @ end loop 2 |
|||
mov r0,r5 |
|||
mov r1,#10 |
|||
bl division |
|||
str r3,[r8,#4] @ poste 0 = q mod 10 |
|||
mov r5,r2 @ q = q/10 |
|||
cmp r5,#9 |
|||
beq 7f |
|||
cmp r5,#10 |
|||
beq 5f |
|||
mov r0,r7 |
|||
bl afficherPredigit |
|||
mov r7,r5 @ predigit=q |
|||
cmp r9,#0 @ nine |
|||
beq 8f |
|||
mov r1,#1 @ else |
|||
4: |
|||
cmp r1,r9 |
|||
bgt 41f |
|||
ldr r0,iAdrszVal9 |
|||
bl affichageMess |
|||
add r1,#1 |
|||
b 4b |
|||
41: |
|||
mov r9,#0 @ raz nine |
|||
b 8f |
|||
5: @ q = 10 |
|||
add r0,r7,#1 |
|||
bl afficherPredigit |
|||
mov r7,#0 @ predigit=0 |
|||
mov r1,#1 |
|||
6: |
|||
cmp r1,r9 |
|||
bgt 61f |
|||
ldr r0,iAdrszVal0 |
|||
bl affichageMess |
|||
add r1,#1 |
|||
b 6b |
|||
61: |
|||
mov r9,#0 @ raz nine |
|||
b 8f |
|||
7: |
|||
add r9,#1 |
|||
8: |
|||
add r6,#1 |
|||
cmp r6,r12 |
|||
ble 2b @ end loop 1 ? |
|||
mov r0,r7 |
|||
bl afficherPredigit |
|||
100: @ standard end of the program |
|||
mov r0, #0 @ return code |
|||
mov r7, #EXIT @ request to exit program |
|||
svc 0 @ perform the system call |
|||
iAdrsZoneConv: .int sZoneConv |
|||
iAdrszCarriageReturn: .int szCarriageReturn |
|||
iAdrszMessStart: .int szMessStart |
|||
iAdribuffer: .int ibuffer |
|||
iN: .int NBVAL |
|||
iLen: .int LEN |
|||
iAdrszVal9: .int szVal9 |
|||
iAdrszVal0: .int szVal0 |
|||
/******************************************************************/ |
|||
/* Display predigit */ |
|||
/******************************************************************/ |
|||
/* r0 contains decimale */ |
|||
afficherPredigit: |
|||
push {r4,lr} @ save registers |
|||
mov r4,r0 |
|||
ldr r1,iAdrsZoneConv |
|||
bl conversion10 @ decimal conversion |
|||
mov r2,#0 |
|||
strb r2,[r1,r0] |
|||
ldr r0,iAdrsZoneConv |
|||
bl affichageMess |
|||
100: |
|||
pop {r4,pc} @ restaur registers |
|||
/***************************************************/ |
|||
/* ROUTINES INCLUDE */ |
|||
/***************************************************/ |
|||
/* for this file see task include a file in language ARM assembly*/ |
|||
.include "../affichage.inc" |
|||
</syntaxhighlight> |
|||
{{Out}} |
|||
<pre> |
|||
Program 32 bits start. |
|||
03141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067982148086513282306647093844609550582231725359408128481117450284102701938521105559644622948954930381964428810975665933446128475648233786783165271201909145648566923460348610454326648213393607260249141273724587006606315588174881520920962829254091715364367892590360011330530548820466521384146951941511609433057270365759591953092186117381932611793105118548074462379962749567351885752724891227938183011949129833673362440656643086021394946395224737190702179860943702770539217176293176752384674818467669405132000568127145263560827785771342757789609173637178721468440901224953430146549585371050792279689258923542019956112129021960864034418159813629774771309960518707211349999998372978049951059731732816096318595024459455346908302642522308253344685035261931188171010003137838752886587533208381420617177669147303598253490428755468731159562863882353787593751957781857780532171226806613001927876611195909216420198938095257201065485863278865936153381827968230301952035301852968995773622599413891249721775283479131515574857242454150695950829533116861727855889075098381754637464939319255060400927701671139009848824012858361603563707660104710181942955596198946767837449448255379774726847104047534646208046684259069491293313677028989152104752162056966024058038150193511253382430035587640247496473263914199272604269922796782354781636009341721641219924586315030286182974555706749838505494588586926995690927210797509302955321165344987202755960236480665499119881834797753566369807426542527862551818417574672890977772793800081647060016145249192173217214772350141441973568548161361157352552133475741849468438523323907394143334547762416862518983569485562099219222184272550254256887671790494601653466804988627232791786085784383827967976681454100953883786360950680064225125205117392984896084128488626945604241965285022210661186306744278622039194945047123713786960956364371917287467764657573962413890865832645995813390478027590099465764078951269468398352595709825822620522489407726719478268482601476990902640136394437455305068203496252451749399651431429809190659250937221696461515709858387410597885959772975498930161753928468138268683868942774155991855925245953959431049972524680845987273644695848653836736222626099124608051243884390451244136549762780797715691435997700129616089441694868555848406353422072225828488648158456028506016842739452267467678895252138522549954666727823986456596116354886230577456498035593634568174324112515076069479451096596094025228879710893145669136867228748940560101503308617928680920874760917824938589009714909675985261365549781893129784821682998948722658804857564014270477555132379641451523746234364542858444795265867821051141354735739523113427166102135969536231442952484937187110145765403590279934403742007310578539062198387447808478489683321445713868751943506430218453191048481005370614680674919278191197939952061419663428754440643745123718192179998391015919561814675142691239748940907186494231961 |
|||
</pre> |
</pre> |
||