RosettaCodeData/Task/Machine-code/ARM-Assembly/machine-code.arm

99 lines
3.0 KiB
Plaintext

/* ARM assembly Raspberry PI */
/* program Machine code */
/* 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 */
/*******************************************/
/* Constantes */
/*******************************************/
.include "../constantes.inc"
/*******************************************/
/* macros */
/*******************************************/
//.include "../../ficmacros32.inc" @ for developper debugging
/*********************************/
/* Initialized data */
/*********************************/
.data
szMessDebutPgm: .asciz "Program 32 bits start. \n"
szCarriageReturn: .asciz "\n"
szMessFinOK: .asciz "Program normal end. \n"
@ code machine ARM 32 bits
.align 4
bCodeArm: .byte 0x02,0x40,0x2D,0xE9 @ push {r1,lr}
.byte 0x01,0x00,0x80,0xE0 @ add r0,r1
.byte 0x02,0x80,0xBD,0xE8 @ pop {r1,pc}
/*********************************/
/* UnInitialized data */
/*********************************/
.bss
sAreaConv: .skip 24
.align 4
/*********************************/
/* code section */
/*********************************/
.text
.global main
main:
ldr r0,iAdrszMessDebutPgm
bl affichageMess @ start message
mov r0,#5
mov r1,#10
bl addition @ call function
ldr r1,iAdrsAreaConv @ decimal conversion
bl conversion10
ldr r0,iAdrsAreaConv @ display result
bl affichageMess
ldr r0,iAdrszCarriageReturn
bl affichageMess
ldr r2,iAdrbCodeArm @ code machine arm address
mov r0,#10
mov r1,#20
blx r2 @ call code machine
ldr r1,iAdrsAreaConv @ decimal conversion
bl conversion10
ldr r0,iAdrsAreaConv @ display result
bl affichageMess
ldr r0,iAdrszCarriageReturn
bl affichageMess
ldr r0,iAdrszMessFinOK
bl affichageMess
100:
mov r7,#EXIT @ program end
svc #0 @ system call
iAdrszMessDebutPgm: .int szMessDebutPgm
iAdrszMessFinOK: .int szMessFinOK
iAdrszCarriageReturn: .int szCarriageReturn
iAdrsAreaConv: .int sAreaConv
iAdrbCodeArm: .int bCodeArm
/******************************************************************/
/* add two registers */
/******************************************************************/
/* r0 contains value 1 */
/* r1 contains value 2 */
addition:
push {r1,lr} @ save registers
add r0,r1
100:
pop {r1,pc}
/***************************************************/
/* ROUTINES INCLUDE */
/***************************************************/
.include "../affichage.inc"