Pi: Difference between revisions

Content added Content deleted
m (Add SML)
(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>