142 lines
4.5 KiB
Plaintext
142 lines
4.5 KiB
Plaintext
/* ARM assembly Raspberry PI */
|
|
/* program crehtml.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 MAXILINE, 5
|
|
.equ MAXIRANDOMNUMBER, 3
|
|
|
|
|
|
/*********************************/
|
|
/* Initialized data */
|
|
/*********************************/
|
|
.data
|
|
szMessDebutPgm: .asciz "Program start. \n"
|
|
szRetourLigne: .asciz "\n"
|
|
szMessFinOK: .asciz "Program normal end. \n"
|
|
szMessErreur: .asciz "Error !!!\n"
|
|
|
|
szarrayheader: .asciz "<html><table> \n"
|
|
szarrayend: .asciz "</table></html>\n"
|
|
szLine1: .asciz "<tr><th></th><th>X</th><th>Y</th><th>Z</th></tr>\n"
|
|
szDebLine: .asciz "<TR><TD align=\042right\042>"
|
|
szEndLine: .asciz "</TD></TR>\n"
|
|
szEndCol: .asciz "</TD><TD align=\042right\042>"
|
|
.align 4
|
|
iGraine: .int 1234567 @ seed for number random
|
|
/*********************************/
|
|
/* UnInitialized data */
|
|
/*********************************/
|
|
.bss
|
|
sZoneConv: .skip 24
|
|
.align 4
|
|
|
|
/*********************************/
|
|
/* code section */
|
|
/*********************************/
|
|
.text
|
|
.global main
|
|
main:
|
|
ldr r0,iAdrszMessDebutPgm
|
|
bl affichageMess @ start message
|
|
ldr r0,iAdrszarrayheader
|
|
bl affichageMess
|
|
ldr r0,iAdrszLine1
|
|
bl affichageMess
|
|
mov r4,#1 @ line counter
|
|
1: @ begin line loop
|
|
ldr r0,iAdrszDebLine
|
|
bl affichageMess
|
|
mov r0,r4 @ convert line to décimal
|
|
ldr r1,iAdrsZoneConv
|
|
bl conversion10
|
|
mov r2,#0 @ add final zero
|
|
strb r2,[r1,r0]
|
|
ldr r0,iAdrsZoneConv @ and display N° line
|
|
bl affichageMess
|
|
ldr r0,iAdrszEndCol
|
|
bl affichageMess
|
|
mov r5,#0 @ random number counter
|
|
2:
|
|
mov r0,#10000 @ limit random number
|
|
bl genereraleas @ call random
|
|
ldr r1,iAdrsZoneConv @ conversion to décimal
|
|
bl conversion10
|
|
mov r2,#0 @ add final zero
|
|
strb r2,[r1,r0]
|
|
ldr r0,iAdrsZoneConv @ and display random number
|
|
bl affichageMess
|
|
ldr r0,iAdrszEndCol
|
|
bl affichageMess
|
|
add r5,r5,#1 @ increment counter
|
|
cmp r5,#MAXIRANDOMNUMBER @ and loop
|
|
blt 2b
|
|
ldr r0,iAdrszEndLine
|
|
bl affichageMess
|
|
add r4,r4,#1 @ increment line counter
|
|
cmp r4,#MAXILINE @ and loop
|
|
blt 1b
|
|
ldr r0,iAdrszarrayend
|
|
bl affichageMess
|
|
|
|
ldr r0,iAdrszMessFinOK
|
|
bl affichageMess
|
|
b 100f
|
|
99:
|
|
ldr r0,iAdrszMessErreur @ error
|
|
bl affichageMess
|
|
mov r0, #1 @ return code error
|
|
b 100f
|
|
100:
|
|
mov r7,#EXIT @ program end
|
|
svc #0 @ system call
|
|
iAdrszMessDebutPgm: .int szMessDebutPgm
|
|
iAdrszMessFinOK: .int szMessFinOK
|
|
iAdrszMessErreur: .int szMessErreur
|
|
iAdrsZoneConv: .int sZoneConv
|
|
iAdrszarrayheader: .int szarrayheader
|
|
iAdrszLine1: .int szLine1
|
|
iAdrszDebLine: .int szDebLine
|
|
iAdrszEndCol: .int szEndCol
|
|
iAdrszEndLine: .int szEndLine
|
|
iAdrszarrayend: .int szarrayend
|
|
/***************************************************/
|
|
/* Generation random number */
|
|
/***************************************************/
|
|
/* r0 contains limit */
|
|
genereraleas:
|
|
push {r1-r4,lr} @ save registers
|
|
ldr r4,iAdriGraine
|
|
ldr r2,[r4]
|
|
ldr r3,iNbDep1
|
|
mul r2,r3,r2
|
|
ldr r3,iNbDep1
|
|
add r2,r2,r3
|
|
str r2,[r4] @ maj de la graine pour l appel suivant
|
|
cmp r0,#0
|
|
beq 100f
|
|
mov r1,r0 @ divisor
|
|
mov r0,r2 @ dividende
|
|
bl division
|
|
mov r0,r3 @ résult = remainder
|
|
|
|
100: @ end function
|
|
pop {r1-r4,pc} @ restaur registers
|
|
iAdriGraine: .int iGraine
|
|
iNbDep1: .int 0x343FD
|
|
iNbDep2: .int 0x269EC3
|
|
|
|
/***************************************************/
|
|
/* ROUTINES INCLUDE */
|
|
/***************************************************/
|
|
.include "../affichage.inc"
|