Anonymous user
Sort stability: Difference between revisions
change sort insertion to merge sort to aarch64 assembly raspberry pi
(add task to aarch64 assembly raspberry pi) |
(change sort insertion to merge sort to aarch64 assembly raspberry pi) |
||
Line 33:
<lang AArch64 Assembly>
/* ARM assembly AARCH64 Raspberry PI 3B */
/* program
/* use merge sort and pointer table */
/* but use a extra table of pointer for the merge */
/*******************************************/
/* Constantes file */
Line 72 ⟶ 74:
.align 4
TableCities:
.quad szUK
.quad szFR
.quad szUS
.quad szUK
.quad szUS
.quad szUS
/* pointers table */
ptrTableCities: .quad e1
.
.quad e3
.quad e4
.quad e5
.quad e6
.equ NBELEMENTS, (. - ptrTableCities) / 8
/*********************************/
/* UnInitialized data */
Line 93 ⟶ 100:
.bss
sZoneConv: .skip 24
/*********************************/
/* code section */
Line 100 ⟶ 107:
.global main
main: // entry of program
ldr x0,
bl displayTable
ldr x0,qAdrszMessSortName
bl affichageMess
ldr x0,
mov x1,0 // not use in routine
mov x2,NBELEMENTS -
mov x3,#city_name // sort by city name
mov x4,#'A' // alphanumeric
ldr x5,
bl
ldr x0,
bl displayTable
Line 119 ⟶ 126:
bl affichageMess
ldr x0,
mov x1,0 // not use in routine
mov x2,NBELEMENTS -
mov x3,#city_country // sort by city country
mov x4,#'A' // alphanumeric
ldr x5,
bl
ldr x0,
bl displayTable
Line 139 ⟶ 146:
qAdrTableCities: .quad TableCities
qAdrszMessSortName: .quad szMessSortName
qAdrptrTableExtraSort: .quad ptrTableExtraSort
qAdrszMessSortCountry: .quad szMessSortCountry
/******************************************************************/
/* merge sort
/******************************************************************/
/* x0 contains the address of table */
/* x1 contains the index of first element
/* x2 contains the number of element */
/* x3 contains the offset of area sort */
/* x4 contains the type of area sort N numeric A alpha */
/* x5 contains address extra area */
mergeSort:
stp
stp x4,x5,[sp,-16]!
stp x6,x7,[sp,-16]!
stp x8,x9,[sp,-16]!
stp x10,x11,[sp,-16]!
mov
mov
mov
ble 100f
add x9,x2,x1
lsr x9,x9,1 // number of element of each subset
mov x2,x9
bl mergeSort
add x1,x1,1
mov
bl
add x10,x9,1
1:
sub x1,x10,1
sub x8,x10,1
ldr x2,[x0,x1,lsl 3]
str x2,[x5,x8,lsl 3]
sub x10,x10,1
cmp x10,x6
bgt 1b
mov x10,x9
2:
add x1,x10,1
add x8,x7,x9
sub x8,x8,x10
ldr x2,[x0,x1,lsl 3]
str x2,[x5,x8,lsl 3]
add x10,x10,1
cmp x10,x7
blt 2b
mov x10,x6 //k
mov x1,x6 // i
mov x2,x7 // j
3:
mov x0,x5 // table address x1 = i x2 = j x3 = area sort offeset
bl comparArea
cmp x0,0
blt 4f
cmp x1,x9
b 5f
4:
mov x0,x5
ldr x6,[x5,x1, lsl 3]
str x6,[x11,x10, lsl 3]
add x1,x1,1
b 6f
5:
mov x0,x5
ldr x6,[x5,x2, lsl 3]
str x6,[x11,x10, lsl 3]
sub x2,x2,1
6:
add x10,x10,1
cmp x10,x7
ble 3b
mov x0,x11
100:
ldp x10,x11,[sp],16
ldp x8,x9,[sp],16
ldp x6,x7,[sp],16
ldp x4,x5,[sp],16
ldp
/******************************************************************/
/* comparison sort area */
Line 217 ⟶ 248:
stp x6,x7,[sp,-16]! // save registers
stp x8,x9,[sp,-16]! // save registers
ldr
beq 1f
cmp x6,x7 //
blt 10f
bgt 11f
b 12f
1: // else
mov x8,#0
2:
ldrb w9,[x6,x8] // byte string 1
ldrb
cmp w9,
bgt 11f
blt 10f
Line 242 ⟶ 270:
cmp w9,#0 // end string 1
beq 12f // end comparaison
add x8,x8,#1 // else add 1
b 2b // and loop
Line 254 ⟶ 282:
mov x0,0
100:
ldp x8,x9,[sp],16 // restaur 2 registers
ldp x6,x7,[sp],16 // restaur 2 registers
ldp x4,x5,[sp],16 // restaur 2 registers
ldp x2,x3,[sp],16 // restaur 2 registers
Line 297 ⟶ 300:
mov x2,x0 // table address
mov x3,0
1: // loop display table
ldr x6,[x2,x4] // load pointer
ldr x1,[
ldr x0,qAdrsMessResult
bl strInsertAtCharInc // put name in message
ldr x1,[x6,city_country] // and put country in the message
bl strInsertAtCharInc // insert result at @ character
bl affichageMess // display message
add x3,x3,1
cmp x3,#NBELEMENTS
ldr x0,qAdrszCarriageReturn
bl affichageMess
Line 325:
/* for this file see task include a file in language AArch64 assembly */
.include "../includeARM64.inc"
</lang>
<pre>
|