Si quelqu'un pouvait m'aider à trouver la(les) erreur(s) qui font crasher la calculatrice, je lui en serait reconnaissant
Voilà le code en ASM:
- Code: Tout sélectionner
;clears the screen and waits some seconds
main
stmfd sp!, {lr}
mov r0, #0xC0000000
ldr r0, [r0, #0x10]
mov r1, #0b0000000000000000
bl clrscrCX
bl wait
ldmfd sp!, {pc}
wait
mvn r0, #0
mov r0, r0, lsr #3
waitloop
sub r0, r0, #1
cmp r0, #0
bgt waitloop
bx lr
clrscrCX ;base, color
stmfd sp!, {r4-r7,lr}
mov r4, r0;base
mov r5, #1;x
mov r6, #0;y
mov r7, r1;color
xloop
mov r0, r4 ;pointeur
mov r1, r5 ;coord x
mov r2, r6 ;coord y
mov r3, r7 ;couleur
mov r8, #0 ;debut du carre en x
mov r9, #0 ;debut du carre en y
loop
bl setPixelColorCX
add r8, r8, #1 ;augmente le repere en x
add r1, r1, #1 ;augmente x
cmp r8, #29 ;regarde si l'on est arrive a la fin du carre en x
blt loop ;si non, on continue a afficher sur la ligne
mov r1, r5 ;si non, on repart a l'abscisse d'origine
add r9, r9, #1 ;et on augmente le repere d'ordonne
add r2, r2, #1 ;tout en augmentant y
cmp r9, #29 ;on teste si l'on arrive a la fin du carre en y
blt loop ;si non en recommence a afficher sur la ligne suivant
cmp r7, #0 ;changement de couleur si tout le carre precedant et affiche
mvneq r7, #0 ;blanc si noir
movne r7, #0 ;noir si blanc
add r5, r5, #29 ;on augmente le point d'abscisse d'origine de 29 (un carre du damier fait 29*29)
cmp r5, #320 ;on regarde si on a dessine le dernier carre de la ligne
bne xloop ;si non on recommence avec le carre suivant
add r6, r6, #29 ;on augmente le point d'ordonne d'origine de 29
mov r5, #0 ;on met x a 0
cmp r6, #231 ;on teste si on a fini
bne xloop ;si non on recommence
ldmfd sp!, {r4-r7,pc}
setPixelColorCX ;base, x, y, color
add r0, r0, r1, lsl #1
add r0, r0, r2, lsl #9
add r0, r0, r2, lsl #7
strh r3, [r0]
bx lr
Et en plus le code est bien commenté
Merci d'avance