/* ARM assembly Raspberry PI or android 32 bits */ /* program oddEven.s */ /* REMARK 1 : this program use routines in a include file see task Include a file language arm assembly for the routine affichageMess conversion10 see at end of this program the instruction include */ /* for constantes see task include a file in arm assembly */ /************************************/ /* Constantes */ /************************************/ .include "../constantes.inc" /*********************************/ /* Initialized data */ /*********************************/ .data sMessResultOdd: .asciz " @ is odd (impair) \n" sMessResultEven: .asciz " @ is even (pair) \n" szCarriageReturn: .asciz "\n" /*********************************/ /* UnInitialized data */ /*********************************/ .bss sZoneConv: .skip 24 /*********************************/ /* code section */ /*********************************/ .text .global main main: @ entry of program mov r0,#5 bl testOddEven mov r0,#12 bl testOddEven mov r0,#2021 bl testOddEven 100: @ standard end of the program mov r0, #0 @ return code mov r7, #EXIT @ request to exit program svc #0 @ perform the system call iAdrszCarriageReturn: .int szCarriageReturn iAdrsMessResultOdd: .int sMessResultOdd iAdrsMessResultEven: .int sMessResultEven iAdrsZoneConv: .int sZoneConv /***************************************************/ /* test if number is odd or even */ /***************************************************/ // r0 contains à number testOddEven: push {r2-r8,lr} @ save registers tst r0,#1 @ test bit 0 to one beq 1f @ if result are all zéro, go to even ldr r1,iAdrsZoneConv @ else display odd message bl conversion10 @ call decimal conversion ldr r0,iAdrsMessResultOdd ldr r1,iAdrsZoneConv @ insert value conversion in message bl strInsertAtCharInc bl affichageMess b 100f 1: ldr r1,iAdrsZoneConv bl conversion10 @ call decimal conversion ldr r0,iAdrsMessResultEven ldr r1,iAdrsZoneConv @ insert conversion in message bl strInsertAtCharInc bl affichageMess 100: pop {r2-r8,lr} @ restaur registers bx lr @ return /***************************************************/ /* ROUTINES INCLUDE */ /***************************************************/ .include "../affichage.inc"