/* ARM assembly AARCH64 Raspberry PI 3B */ /* program callfonct.s */ /*******************************************/ /* Constantes file */ /*******************************************/ /* for this file see task include a file in language AArch64 assembly*/ .include "../includeConstantesARM64.inc" /***********************/ /* Initialized data */ /***********************/ .data szMessage: .asciz "Hello. \n" // message szRetourLigne: .asciz "\n" szMessResult: .asciz "Resultat : " // message result /***********************/ /* No Initialized data */ /***********************/ .bss sZoneConv: .skip 100 .text .global main main: ldr x0,=szMessage // adresse of message short program bl affichageMess // call function with 1 parameter (x0) // call function with parameters in register mov x0,#5 mov x1,#10 bl fonction1 // call function with 2 parameters (x0,x1) ldr x1,qAdrsZoneConv // result in x0 bl conversion10S // call function with 2 parameter (x0,x1) ldr x0,=szMessResult bl affichageMess // call function with 1 parameter (x0) ldr x0,qAdrsZoneConv bl affichageMess ldr x0,qAdrszRetourLigne bl affichageMess // call function with parameters on stack mov x0,#5 mov x1,#10 stp x0,x1,[sp,-16]! // store registers on stack bl fonction2 // call function with 2 parameters on the stack // result in x0 ldr x1,qAdrsZoneConv bl conversion10S // call function with 2 parameter (x0,x1) ldr x0,=szMessResult bl affichageMess // call function with 1 parameter (x0) ldr x0,qAdrsZoneConv bl affichageMess ldr x0,qAdrszRetourLigne bl affichageMess // end of program mov x0, #0 // return code mov x8, #EXIT // request to exit program svc 0 // perform the system call qAdrsZoneConv: .quad sZoneConv qAdrszRetourLigne: .quad szRetourLigne /******************************************************************/ /* call function parameter in register */ /******************************************************************/ /* x0 value one */ /* x1 value two */ /* return in x0 */ fonction1: stp x2,lr,[sp,-16]! // save registers mov x2,#20 mul x0,x0,x2 add x0,x0,x1 ldp x2,lr,[sp],16 // restaur 2 registres ret // retour adresse lr x30 /******************************************************************/ /* call function parameter in the stack */ /******************************************************************/ /* return in x0 */ fonction2: stp fp,lr,[sp,-16]! // save registers add fp,sp,#16 // address parameters in the stack stp x1,x2,[sp,-16]! // save others registers ldr x0,[fp] // second paraméter ldr x1,[fp,#8] // first parameter mov x2,#-20 mul x0,x0,x2 add x0,x0,x1 ldp x1,x2,[sp],16 // restaur 2 registres ldp fp,lr,[sp],16 // restaur 2 registres add sp,sp,#16 // very important, for stack aligned ret // retour adresse lr x30 /********************************************************/ /* File Include fonctions */ /********************************************************/ /* for this file see task include a file in language AArch64 assembly */ .include "../includeARM64.inc"