Pseudo-random numbers/Middle-square method: Difference between revisions
Content added Content deleted
(add task to arm assemble raspberry pi) |
(add task to aarch64 assembly raspberry pi) |
||
Line 31: | Line 31: | ||
* Show your output here, on this page. |
* Show your output here, on this page. |
||
=={{header|AArch64 Assembly}}== |
|||
{{works with|as|Raspberry Pi 3B version Buster 64 bits <br> or android 64 bits with application Termux }} |
|||
<lang AArch64 Assembly> |
|||
/* ARM assembly AARCH64 Raspberry PI 3B */ |
|||
/* program pRandom64.s */ |
|||
/*******************************************/ |
|||
/* Constantes file */ |
|||
/*******************************************/ |
|||
/* for this file see task include a file in language AArch64 assembly*/ |
|||
.include "../includeConstantesARM64.inc" |
|||
/*********************************/ |
|||
/* Initialized data */ |
|||
/*********************************/ |
|||
.data |
|||
sMessResult: .asciz " @ \n" |
|||
szCarriageReturn: .asciz "\n" |
|||
qSeed: .quad 675248 |
|||
/*********************************/ |
|||
/* UnInitialized data */ |
|||
/*********************************/ |
|||
.bss |
|||
sZoneConv: .skip 24 |
|||
/*********************************/ |
|||
/* code section */ |
|||
/*********************************/ |
|||
.text |
|||
.global main |
|||
main: // entry of program |
|||
ldr x0,qAdrqSeed |
|||
ldr x3,[x0] |
|||
mov x2,#5 |
|||
1: |
|||
mov x0,x3 |
|||
bl computePseudo |
|||
mov x3,x0 |
|||
ldr x1,qAdrsZoneConv |
|||
bl conversion10 // call décimal conversion |
|||
ldr x0,qAdrsMessResult |
|||
ldr x1,qAdrsZoneConv // insert conversion in message |
|||
bl strInsertAtCharInc |
|||
bl affichageMess // display message |
|||
subs x2,x2,#1 |
|||
bgt 1b |
|||
100: // standard end of the program |
|||
mov x0, #0 // return code |
|||
mov x8, #EXIT // request to exit program |
|||
svc #0 // perform the system call |
|||
qAdrszCarriageReturn: .quad szCarriageReturn |
|||
qAdrsMessResult: .quad sMessResult |
|||
qAdrsZoneConv: .quad sZoneConv |
|||
qAdrqSeed: .quad qSeed |
|||
/***************************************************/ |
|||
/* compute pseudo random number */ |
|||
/***************************************************/ |
|||
/* x0 contains the number */ |
|||
computePseudo: |
|||
stp x1,lr,[sp,-16]! // save registers |
|||
stp x2,x3,[sp,-16]! // save registers |
|||
mov x2,x0 |
|||
mul x0,x2,x2 |
|||
ldr x2,qdiv |
|||
udiv x1,x0,x2 |
|||
ldr x2,qdiv2 |
|||
udiv x0,x1,x2 |
|||
msub x0,x2,x0,x1 |
|||
ldp x2,x3,[sp],16 // restaur 2 registers |
|||
ldp x1,lr,[sp],16 // restaur 2 registers |
|||
ret // return to address lr x30 |
|||
qdiv: .quad 1000 |
|||
qdiv2: .quad 1000000 |
|||
/********************************************************/ |
|||
/* File Include fonctions */ |
|||
/********************************************************/ |
|||
/* for this file see task include a file in language AArch64 assembly */ |
|||
.include "../includeARM64.inc" |
|||
</lang> |
|||
<pre> |
|||
~/.../rosetta/asm1 $ pRandom64 |
|||
959861 |
|||
333139 |
|||
981593 |
|||
524817 |
|||
432883 |
|||
</pre> |
|||
=={{header|Ada}}== |
=={{header|Ada}}== |
||
<lang Ada>with Ada.Text_IO; use Ada.Text_IO; |
<lang Ada>with Ada.Text_IO; use Ada.Text_IO; |