Jump to content

Arrays: Difference between revisions

5,415 bytes added ,  4 years ago
add task to ARM64 assembly Raspberry Pi
No edit summary
(add task to ARM64 assembly Raspberry Pi)
Line 178:
[1,"one", 2, "two"]
</lang>
=={{header|AArch64 Assembly}}==
{{works with|as|Raspberry Pi 3B version Buster 64 bits}}
<lang AArch64 Assembly>
/* ARM assembly AARCH64 Raspberry PI 3B */
/* program areaString64.s */
/*******************************************/
/* Constantes file */
/*******************************************/
/* for this file see task include a file in language AArch64 assembly*/
.include "../includeConstantesARM64.inc"
/*******************************************/
/* Initialized data */
/*******************************************/
.data
szMessStringsch: .ascii "The string is at item : @ \n"
szCarriageReturn: .asciz "\n"
szMessStringNfound: .asciz "The string is not found in this area.\n"
/* areas strings */
szString1: .asciz "Apples"
szString2: .asciz "Oranges"
szString3: .asciz "Pommes"
szString4: .asciz "Raisins"
szString5: .asciz "Abricots"
/* pointer items area 1*/
tablesPoi1:
pt1_1: .quad szString1
pt1_2: .quad szString2
pt1_3: .quad szString3
pt1_4: .quad szString4
ptVoid_1: .quad 0
ptVoid_2: .quad 0
ptVoid_3: .quad 0
ptVoid_4: .quad 0
ptVoid_5: .quad 0
szStringSch: .asciz "Raisins"
szStringSch1: .asciz "Ananas"
/*******************************************/
/* UnInitialized data */
/*******************************************/
.bss
sZoneConv: .skip 30
/*******************************************/
/* code section */
/*******************************************/
.text
.global main
main: // entry of program
// add string 5 to area
ldr x1,qAdrtablesPoi1 // begin pointer area 1
mov x0,0 // counter
1: // search first void pointer
ldr x2,[x1,x0,lsl 3] // read string pointer address item x0 (4 bytes by pointer)
cmp x2,0 // is null ?
cinc x0,x0,ne // no increment counter
bne 1b // and loop
// store pointer string 5 in area at position x0
ldr x2,qAdrszString5 // address string 5
str x2,[x1,x0,lsl 3] // store address
// display string at item 3
mov x2,2 // pointers begin in position 0
ldr x1,qAdrtablesPoi1 // begin pointer area 1
ldr x0,[x1,x2,lsl 3]
bl affichageMess
ldr x0,qAdrszCarriageReturn
bl affichageMess
 
// search string in area
ldr x1,qAdrszStringSch
//ldr x1,qAdrszStringSch1 // uncomment for other search : not found !!
ldr x2,qAdrtablesPoi1 // begin pointer area 1
mov x3,0
2: // search
ldr x0,[x2,x3,lsl 3] // read string pointer address item x0 (4 bytes by pointer)
cbz x0,3f // is null ? end search
bl comparString
cmp x0,0 // string = ?
cinc x3,x3,ne // no increment counter
bne 2b // and loop
mov x0,x3 // position item string
ldr x1,qAdrsZoneConv // conversion decimal
bl conversion10S
ldr x0,qAdrszMessStringsch
ldr x1,qAdrsZoneConv
bl strInsertAtCharInc // insert result at @ character
bl affichageMess
b 100f
3: // end search string not found
ldr x0,qAdrszMessStringNfound
bl affichageMess
100: // standard end of the program
mov x0, 0 // return code
mov x8,EXIT // request to exit program
svc 0 // perform the system call
qAdrtablesPoi1: .quad tablesPoi1
qAdrszMessStringsch: .quad szMessStringsch
qAdrszString5: .quad szString5
qAdrszStringSch: .quad szStringSch
qAdrszStringSch1: .quad szStringSch1
qAdrsZoneConv: .quad sZoneConv
qAdrszMessStringNfound: .quad szMessStringNfound
qAdrszCarriageReturn: .quad szCarriageReturn
/************************************/
/* Strings comparaison */
/************************************/
/* x0 et x1 contains strings addresses */
/* x0 return 0 if equal */
/* return -1 if string x0 < string x1 */
/* return 1 if string x0 > string x1 */
comparString:
stp x2,lr,[sp,-16]! // save registers
stp x3,x4,[sp,-16]! // save registers
mov x2,#0 // indice
1:
ldrb w3,[x0,x2] // one byte string 1
ldrb w4,[x1,x2] // one byte string 2
cmp w3,w4
blt 2f // less
bgt 3f // greather
cmp w3,#0 // 0 final
beq 4f // equal and end
add x2,x2,#1 //
b 1b // else loop
2:
mov x0,#-1 // less
b 100f
3:
mov x0,#1 // greather
b 100f
4:
mov x0,#0 // equal
b 100f
100:
ldp x3,x4,[sp],16 // restaur 2 registers
ldp x2,lr,[sp],16 // restaur 2 registers
ret // return to address lr x30
/********************************************************/
/* File Include fonctions */
/********************************************************/
/* for this file see task include a file in language AArch64 assembly */
.include "../includeARM64.inc"
</lang>
=={{header|ABAP}}==
There are no real arrays in ABAP but a construct called internal tables.
Cookies help us deliver our services. By using our services, you agree to our use of cookies.