Include a file: Difference between revisions

Content added Content deleted
(Modify task arm assembly)
Line 552: Line 552:
.equ CREATE, 0x8 @ Linux Syscal create file
.equ CREATE, 0x8 @ Linux Syscal create file
.equ CLOSE, 0x6 @ Linux Syscal close file
.equ CLOSE, 0x6 @ Linux Syscal close file

.equ HEAPSIZE, 100000
.equ CHARPOS, '@' @ character insertion
.equ CHARPOS, '@' @ character insertion


Line 563: Line 565:
sDeci: .space 15,' '
sDeci: .space 15,' '
.asciz "\n"
.asciz "\n"
ptzZoneHeap: .int zZoneHeap
/*************************************************/
.bss
.align 4
zZoneHeap: .skip HEAPSIZE
zEndZoneHeap:
.text
.text
/******************************************************************/
/******************************************************************/
Line 808: Line 816:
pop {r4, lr}
pop {r4, lr}
bx lr
bx lr
/***************************************************/
/* reserve heap area */
/***************************************************/
// r0 contains size in byte to reserve */
// r0 returne begin address of area */
reserverPlace: @ INFO: reserverPlace
push {r1,r2,r3,lr} @ save des registres
mov r1,r0
tst r1,#0b11 @ size multiple of 4 ?
beq 1f @ yes
and r1,#0xFFFFFFFC @ else align to 4 superior
add r1,#4
1:
ldr r2,iAdrptzZoneHeap
ldr r0,[r2]
add r1,r1,r0 @ size too large ?
ldr r3,iAdrzEndZoneHeap
cmp r1,r3
blt 2f @ no it is ok
adr r0,szMessErrTas @ yes -> error
bl affichageMess
mov r0,#-1
b 100f
2:
str r1,[r2] @ store new pointer
100: @ fin standard de la fonction
pop {r1,r2,r3,lr} @ restaur des registres
bx lr @ retour de la fonction en utilisant lr
iAdrptzZoneHeap: .int ptzZoneHeap
iAdrzEndZoneHeap: .int zEndZoneHeap
szMessErrTas: .asciz "Error : heap not large !!!\n"
.align 4
/***************************************************/
/* liberer place sur le tas */
/***************************************************/
// r0 contains begin address area
libererPlace: @ INFO: libererPlace
push {r1,lr} @ save des registres
ldr r1,iAdrzZoneHeap
cmp r0,r1
blt 99f
ldr r1,iAdrzEndZoneHeap
cmp r0,r1
bge 99f
ldr r1,iAdrptzZoneHeap
str r0,[r1]
b 100f
99:
adr r0,szMessErrTas1
bl affichageMess
mov r0,#-1
100:
pop {r1,lr} @ restaur registers
bx lr
iAdrzZoneHeap: .int zZoneHeap
szMessErrTas1: .asciz "Error : address < or > heap addresses !!!\n"
.align 4
/******************************************************************/
/******************************************************************/
/* insert string at character insertion */
/* insert string at character insertion */
Line 834: Line 899:
add r3,r3,#1 // +1 for final zero
add r3,r3,#1 // +1 for final zero
mov r6,r0 // save address string 1
mov r6,r0 // save address string 1
mov r0,r3
mov r0,#0 // allocation place heap
bl reserverPlace
mov r7,#BRK // call system 'brk'
svc #0
mov r5,r0 // save address heap for output string
mov r5,r0 // save address heap for output string
add r0,r0,r3 // reservation place r3 length
mov r7,#BRK // call system 'brk'
svc #0
cmp r0,#-1 // allocation error
cmp r0,#-1 // allocation error
beq 99f
beq 99f