Data update
This commit is contained in:
parent
4bb20c9b71
commit
cbaf4c4b64
12390 changed files with 318560 additions and 27248 deletions
120
Task/String-prepend/ARM-Assembly/string-prepend.arm
Normal file
120
Task/String-prepend/ARM-Assembly/string-prepend.arm
Normal file
|
|
@ -0,0 +1,120 @@
|
|||
/* ARM assembly Raspberry PI */
|
||||
/* program preend.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 */
|
||||
|
||||
/*******************************************/
|
||||
/* Constantes */
|
||||
/*******************************************/
|
||||
.include "../constantes.inc"
|
||||
.equ NBCARLIBEL, 45
|
||||
.equ BUFFERSIZE, 100
|
||||
/*******************************************/
|
||||
/* Macros */
|
||||
/*******************************************/
|
||||
//.include "../../ficmacros32.inc" @ for developer debugging
|
||||
|
||||
/*******************************************/
|
||||
/* Initialized data */
|
||||
/*******************************************/
|
||||
.data
|
||||
szMessDebutPgm: .asciz "Program 32 bits start. \n"
|
||||
szCarriageReturn: .asciz "\n"
|
||||
szMessFinOK: .asciz "Program normal end. \n"
|
||||
szMessString: .asciz "British Museum.\n"
|
||||
szStringStart: .asciz "The rosetta stone is at "
|
||||
szMessErrSize: .asciz "Buffer error size too small.\n"
|
||||
|
||||
/*******************************************/
|
||||
/* UnInitialized data */
|
||||
/*******************************************/
|
||||
.bss
|
||||
sBuffer: .skip BUFFERSIZE
|
||||
.align 4
|
||||
|
||||
/*******************************************/
|
||||
/* code section */
|
||||
/*******************************************/
|
||||
.text
|
||||
.global main
|
||||
main:
|
||||
ldr r0,iAdrszMessDebutPgm
|
||||
bl affichageMess
|
||||
|
||||
ldr r0,iAdrszMessString
|
||||
ldr r1,iAdrszStringStart
|
||||
ldr r2,iAdrsBuffer
|
||||
mov r3,#BUFFERSIZE
|
||||
bl prepend // preend string1 to string2
|
||||
cmp r0,#-1
|
||||
beq 100f
|
||||
ldr r0,iAdrszMessString
|
||||
bl affichageMess
|
||||
|
||||
ldr r0,iAdrsBuffer
|
||||
bl affichageMess
|
||||
|
||||
ldr r0,iAdrszMessFinOK
|
||||
bl affichageMess
|
||||
|
||||
100: @ standard end of the program
|
||||
mov r0, #0 @ return code
|
||||
mov r7, #EXIT @ request to exit program
|
||||
svc 0 @ perform system call
|
||||
iAdrszMessDebutPgm: .int szMessDebutPgm
|
||||
iAdrszMessFinOK: .int szMessFinOK
|
||||
iAdrszCarriageReturn: .int szCarriageReturn
|
||||
iAdrszMessString: .int szMessString
|
||||
iAdrszStringStart: .int szStringStart
|
||||
iAdrsBuffer: .int sBuffer
|
||||
|
||||
/**************************************************/
|
||||
/* preend two strings */
|
||||
/**************************************************/
|
||||
/* r0 contains the address of the string1 */
|
||||
/* r1 contains the address of the string2 */
|
||||
/* r2 contains buffer */
|
||||
/* r3 contains buffer size */
|
||||
prepend:
|
||||
push {r4-r6,fp,lr}
|
||||
mov r4,#0 // counter byte string 2
|
||||
mov r5,#0 // result byte counter
|
||||
1: // copy string 2 in result area
|
||||
ldrb r6,[r1,r4]
|
||||
cmp r6,#0
|
||||
beq 2f
|
||||
strb r6,[r2,r5]
|
||||
add r4,r4,#1 // increment indice
|
||||
add r5,r5,#1 // increment indice
|
||||
cmp r5,r3
|
||||
bge 99f // error size
|
||||
|
||||
b 1b // and loop
|
||||
2:
|
||||
mov r4,#0 // counter byte string1
|
||||
3:
|
||||
ldrb r6,[r0,r4]
|
||||
strb r6,[r2,r5]
|
||||
cmp r6,#0
|
||||
beq 4f
|
||||
add r4,r4,#1 // increment indice
|
||||
add r5,r5,#1 // increment indice
|
||||
cmp r5,r3
|
||||
bge 99f // error size
|
||||
b 3b // and loop
|
||||
4:
|
||||
mov r0,r5
|
||||
b 100f
|
||||
99:
|
||||
ldr r0,iAdrszMessErrSize
|
||||
bl affichageMess
|
||||
mov r0,#-1 // error
|
||||
100:
|
||||
pop {r4-r6,fp,pc}
|
||||
iAdrszMessErrSize: .int szMessErrSize
|
||||
/***************************************************/
|
||||
/* ROUTINES INCLUDE */
|
||||
/***************************************************/
|
||||
.include "../affichage.inc"
|
||||
Loading…
Add table
Add a link
Reference in a new issue