Sort disjoint sublist: Difference between revisions

add task to arm assembly raspberry pi
(add RPL)
(add task to arm assembly raspberry pi)
Line 526:
{{output}}
<syntaxhighlight lang="applescript">{7, 0, 5, 4, 3, 2, 1, 6}</syntaxhighlight>
=={{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 sublistSort.s */
 
/************************************/
/* Constantes */
/************************************/
/* for constantes see task include a file in arm assembly */
.include "../constantes.inc"
/*********************************/
/* Initialized data */
/*********************************/
.data
szMessStart: .asciz "Program 32 bits start.\n"
sMessResult: .ascii "Value : "
sMessValeur: .fill 11, 1, ' ' @ size => 11
szCarriageReturn: .asciz "\n"
.align 4
ArrayNumber: .int 7, 6, 5, 4, 3, 2, 1, 0
.equ NBELEMENTS, (. - ArrayNumber) / 4
ArrayIndex: .int 6,1,7
.equ NBELEMINDEX, (. - ArrayIndex) / 4
/*********************************/
/* UnInitialized data */
/*********************************/
.bss
ArrayExtract: .skip 4 * NBELEMINDEX
/*********************************/
/* code section */
/*********************************/
.text
.global main
main:
ldr r0,iAdrszMessStart
bl affichageMess
ldr r4,iAdrArrayNumber @ number array address
ldr r5,iAdrArrayIndex @ index array address
ldr r6,iAdrArrayExtract @ extract array address
mov r3,#0 @ index
1:
ldr r0,[r5,r3,lsl #2] @ load index
ldr r1,[r4,r0,lsl #2] @ load value of index
str r1,[r6,r3,lsl #2] @ store value in array extract
add r3,r3,#1 @ increment index
cmp r3,#NBELEMINDEX @ end array index ?
blt 1b @ no -> loop
 
mov r0,r5 @ index array address
mov r1,#0 @ first element
mov r2,#NBELEMINDEX @ array size
bl insertionSort
mov r0,r6 @ extract array address
mov r1,#0 @ first element
mov r2,#NBELEMINDEX @ array size
bl insertionSort
 
mov r3,#0 @ init index
2:
ldr r0,[r6,r3,lsl #2] @ load value of array extract
ldr r1,[r5,r3,lsl #2] @ load index
str r0,[r4,r1,lsl #2] @ store value in number array in index place
add r3,r3,#1 @ increment indice
cmp r3,#NBELEMINDEX
blt 2b
 
mov r0,r4 @ number array address
bl displayArray
100: @ standard end of the program
mov r0, #0 @ return code
mov r7, #EXIT @ request to exit program
svc #0 @ perform the system call
iAdrsMessValeur: .int sMessValeur
iAdrszMessStart: .int szMessStart
iAdrszCarriageReturn: .int szCarriageReturn
iAdrsMessResult: .int sMessResult
iAdrArrayNumber: .int ArrayNumber
iAdrArrayIndex: .int ArrayIndex
iAdrArrayExtract: .int ArrayExtract
/******************************************************************/
/* insertion sort */
/******************************************************************/
/* r0 contains the address of table */
/* r1 contains the first element */
/* r2 contains the number of element */
insertionSort:
push {r2-r6,lr} @ save registers
add r3,r1,#1 @ start index i
1: @ start loop
ldr r4,[r0,r3,lsl #2] @ load value A[i]
sub r5,r3,#1 @ index j
2:
ldr r6,[r0,r5,lsl #2] @ load value A[j]
cmp r6,r4 @ compare value
ble 3f
add r5,#1 @ increment index j
str r6,[r0,r5,lsl #2] @ store value A[j+1]
subs r5,#2 @ j = j - 1
bge 2b @ loop if j >= 0
3:
add r5,#1 @ increment index j
str r4,[r0,r5,lsl #2] @ store value A[i] in A[j+1]
add r3,#1 @ increment index i
cmp r3,r2 @ end ?
blt 1b @ no -> loop
 
100:
pop {r2-r6,pc}
 
/******************************************************************/
/* Display table elements */
/******************************************************************/
/* r0 contains the address of table */
displayArray:
push {r0-r3,lr} @ save registers
mov r2,r0 @ table address
mov r3,#0
1: @ loop display table
ldr r0,[r2,r3,lsl #2]
ldr r1,iAdrsMessValeur @ display value
bl conversion10 @ call function
ldr r0,iAdrsMessResult
bl affichageMess @ display message
add r3,#1
cmp r3,#NBELEMENTS
blt 1b
ldr r0,iAdrszCarriageReturn
bl affichageMess
100:
pop {r0-r3,lr}
bx lr
 
/***************************************************/
/* ROUTINES INCLUDE */
/***************************************************/
/* for this file see task include a file in language ARM assembly*/
.include "../affichage.inc"
</syntaxhighlight>
{{Out}}
<pre>
Program 32 bits start.
Value : 7
Value : 0
Value : 5
Value : 4
Value : 3
Value : 2
Value : 1
Value : 6
</pre>
=={{header|Arturo}}==
 
79

edits