99 lines
3.0 KiB
Plaintext
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"
|