Salut à tous.
Je viens de faire un test en assembleur ARM sur la Raspberry et le premier problème que je rencontre est de trouver le manuel de référence du langage assembleur.
J'ai trouvé assez facilement les premiers instructions, mais j'aimerai connaitre la totalité de ce qui se fait.
Après ce manque, j'ai un problème de faisabilité.
J'aimerai stocker en ram les seize registres car je désire afficher leur contenu à l'écran.
Et donc, je ne sais pas comment faire cette sauvegarde ?!?! C'est ce que je nomme sauvegarder le contexte.
Cela permet lors d'un appel à une "subroutine", de ne pas modifier les registres de l'appelant.
J'ai compris que je dois utiliser "push" et "pop" mais le résultat se trouve dans la pile et je ne sais pas trop comment les récupérer.
Savez-vous comment je dois procéder ?
@+
Me remettre à l'assembleur !
Modérateur : Francois
Me remettre à l'assembleur !
RPI4B/8GB + Argon FanHAt
Rpi3A+, Rpi3B+
RPi 2B + Joy-It I2C Serial 20x4 2004 LCD Module
RPi 2B + PIM273 Unicorn HAT HD 16x16 Leds RGB
RPi0v1.3, RPi0W + LibreElec/Kodi, Rpi0WH + Tuner TV HAT
NodeMCU ESP32
Rpi3A+, Rpi3B+
RPi 2B + Joy-It I2C Serial 20x4 2004 LCD Module
RPi 2B + PIM273 Unicorn HAT HD 16x16 Leds RGB
RPi0v1.3, RPi0W + LibreElec/Kodi, Rpi0WH + Tuner TV HAT
NodeMCU ESP32
-
- Raspinaute
- Messages : 976
- Enregistré le : dim. 28 déc. 2014 15:28
- Localisation : Le long de la côte, au dessus du pays des bigoudennes, aïe
Re: Me remettre à l'assembleur !
Bonsoir Artemus24,
Il y a VincentLeboulou qui semble s'y connaitre sur le forum. Si cela peut t'aider. Tu trouveras peut-être dans son code se qui te manque.
search.php?author_id=4053&sr=posts
https://assembleurarmpi.blogspot.com
Il y a VincentLeboulou qui semble s'y connaitre sur le forum. Si cela peut t'aider. Tu trouveras peut-être dans son code se qui te manque.
search.php?author_id=4053&sr=posts
https://assembleurarmpi.blogspot.com
[Pour bien commencer] Pour les nouveaux acquéreurs de Raspberry Pi (index de liens utiles)
Awesome Raspberry Pi
Awesome Raspberry Pi
Re: Me remettre à l'assembleur !
Salut Dyox.
Si j'ai déposé mon message dans le forum de l'assembleur, c'est pour qu'un habitué puisse m répondre, entre autre M. Vincent Leboulou.
Le second lien, je le connais. Je me sers aussi de ce lien là.
Merci de ta participation.
@+
Si j'ai déposé mon message dans le forum de l'assembleur, c'est pour qu'un habitué puisse m répondre, entre autre M. Vincent Leboulou.
Le second lien, je le connais. Je me sers aussi de ce lien là.
Merci de ta participation.
@+
RPI4B/8GB + Argon FanHAt
Rpi3A+, Rpi3B+
RPi 2B + Joy-It I2C Serial 20x4 2004 LCD Module
RPi 2B + PIM273 Unicorn HAT HD 16x16 Leds RGB
RPi0v1.3, RPi0W + LibreElec/Kodi, Rpi0WH + Tuner TV HAT
NodeMCU ESP32
Rpi3A+, Rpi3B+
RPi 2B + Joy-It I2C Serial 20x4 2004 LCD Module
RPi 2B + PIM273 Unicorn HAT HD 16x16 Leds RGB
RPi0v1.3, RPi0W + LibreElec/Kodi, Rpi0WH + Tuner TV HAT
NodeMCU ESP32
Re: Me remettre à l'assembleur !
Salut à tous.
J'ai trouvé la solution à mon problème.
Je vous communique le source assembleur ARM qui réalise l'affichage des registres de r0 jusqu'à r12.
Il n'est pas nécessaire de visualiser le contenu des registres r13 (sp), r14 (lr) et r15 (pc) qui sont plus destinés au fonctionnement du procsseur.
Mon jeu d'essai consiste à mettre quelque chose dans les registres et voir si j'arrive à les afficher, ce qui est le cas.
Voici le résultat que j'obtiens :
Le registre 14 contient l'adresse de retour de la fonction "reg".
A vrai dire, son affichage ne sert à rien car j'aurai toujours la même valeur.
@+
J'ai trouvé la solution à mon problème.
Je vous communique le source assembleur ARM qui réalise l'affichage des registres de r0 jusqu'à r12.
Code : Tout sélectionner
.section .init
.data
mess: .ascii "Reg : "
digit: .ascii " "
.ascii " "
lf: .ascii "\n"
.text
@ ================= @
@ Subroutine : disp @
@ ================= @
disp: push {lr}
mov r0,#1
mov r7,#4
svc #0
pop {pc}
bx lr
@ ================ @
@ Subroutine : aff @
@ ================ @
aff: push {r0-r2,r4-r12,lr}
ldr r1,=mess
mov r2,#19
bl disp
sub r3,r3,#1
cmp r3,#0
bgt aff1
mov r3,#7 @ line feed
ldr r1,=lf
mov r2,#1
bl disp
aff1: pop {r0-r2,r4-r12,pc}
bx lr
@ ================ @
@ Subroutine : reg @
@ ================ @
reg: push {r0-r12,lr}
@ ---------- @
@ Initialize @
@ ---------- @
mov r0,#0 @ loops number
ldr r1,=mess @ mess address
ldr r2,=digit @ digit address
mov r3,#7 @ line feed
mov r4,#0 @ register number
mov r5,#7 @ register display
@ --------------- @
@ Register Number @
@ --------------- @
reg1: cmp r4,#9
addle r7,r4,#48
addgt r7,r4,#55
strb r7,[r1,#4] @ hexadecimal character
add r4,r4,#1 @ next value
cmp r4,#13
addeq r4,r4,#1
@ -------------- @
@ Register Value @
@ -------------- @
ldr r6,[sp,r0]
reg2: and r7,r6,#15
cmp r7,#9
addle r7,r7,#48
addgt r7,r7,#55
strb r7,[r2,r5] @ hexadecimal character
lsr r6,#4 @ logical right shift
sub r5,r5,#1
cmp r5,#0
bge reg2
bl aff @ subroutine disp
mov r5,#7 @ register display
@ ----------- @
@ End of Loop @
@ ----------- @
add r0,r0,#4 @ next register
cmp r0,#52
ble reg1
@ ------ @
@ Return @
@ ------ @
pop {r0-r12,pc}
bx lr
@ ============ @
@ Main Program @
@ ============ @
.global main
main:
mov r0,#0x0C00
mov r1,#0x0C01
mov r2,#0x0C02
mov r3,#0x0C03
mov r4,#0x0C04
mov r5,#0x0C05
mov r6,#0x0C06
mov r7,#0x0C07
mov r8,#0x0C08
mov r9,#0X0C09
mov r10,#0x0C0A
mov r11,#0x0C0B
mov r12,#0x0C0C
bl reg
ldr r1,=lf
mov r2,#1
bl disp
@ ---- @
@ Exit @
@ ---- @
mov r0,#0 @ return code 0
mov r7,#1 @ exit system call
svc #0 @ supervisor call
Mon jeu d'essai consiste à mettre quelque chose dans les registres et voir si j'arrive à les afficher, ce qui est le cas.
Voici le résultat que j'obtiens :
Code : Tout sélectionner
> dump
Reg 0 : 00000C00 Reg 1 : 00000C01 Reg 2 : 00000C02 Reg 3 : 00000C03 Reg 4 : 00000C04 Reg 5 : 00000C05 Reg 6 : 00000C06
Reg 7 : 00000C07 Reg 8 : 00000C08 Reg 9 : 00000C09 Reg A : 00000C0A Reg B : 00000C0B Reg C : 00000C0C Reg E : 000104D0
>
A vrai dire, son affichage ne sert à rien car j'aurai toujours la même valeur.
@+
RPI4B/8GB + Argon FanHAt
Rpi3A+, Rpi3B+
RPi 2B + Joy-It I2C Serial 20x4 2004 LCD Module
RPi 2B + PIM273 Unicorn HAT HD 16x16 Leds RGB
RPi0v1.3, RPi0W + LibreElec/Kodi, Rpi0WH + Tuner TV HAT
NodeMCU ESP32
Rpi3A+, Rpi3B+
RPi 2B + Joy-It I2C Serial 20x4 2004 LCD Module
RPi 2B + PIM273 Unicorn HAT HD 16x16 Leds RGB
RPi0v1.3, RPi0W + LibreElec/Kodi, Rpi0WH + Tuner TV HAT
NodeMCU ESP32
-
- Messages : 35
- Enregistré le : jeu. 19 oct. 2017 10:11
Re: Me remettre à l'assembleur !
Bonjour.
Normalement dans mon blog, j'ai indiqué les références de la documentation sur l'assembleur ARM :
http://thinkingeek.com/arm-assembler-raspberry-pi/
Il y a toute la documentation sur le site www.developer.arm.com comme :
https://developer.arm.com/documentation/ddi0406/cd
Et un résumé des instructions très utiles :
http://users.ece.utexas.edu/~valvano/Vo ... ceCard.pdf
Normalement dans mon blog, j'ai indiqué les références de la documentation sur l'assembleur ARM :
http://thinkingeek.com/arm-assembler-raspberry-pi/
Il y a toute la documentation sur le site www.developer.arm.com comme :
https://developer.arm.com/documentation/ddi0406/cd
Et un résumé des instructions très utiles :
http://users.ece.utexas.edu/~valvano/Vo ... ceCard.pdf
Re: Me remettre à l'assembleur !
Salut M. Vincent Leboulou.
Merci pour les références des liens.
Le dernier lien, je ne le connaissais pas.
Cordialement.
Artemus24.
@+
Merci pour les références des liens.
Le dernier lien, je ne le connaissais pas.
Cordialement.
Artemus24.
@+
RPI4B/8GB + Argon FanHAt
Rpi3A+, Rpi3B+
RPi 2B + Joy-It I2C Serial 20x4 2004 LCD Module
RPi 2B + PIM273 Unicorn HAT HD 16x16 Leds RGB
RPi0v1.3, RPi0W + LibreElec/Kodi, Rpi0WH + Tuner TV HAT
NodeMCU ESP32
Rpi3A+, Rpi3B+
RPi 2B + Joy-It I2C Serial 20x4 2004 LCD Module
RPi 2B + PIM273 Unicorn HAT HD 16x16 Leds RGB
RPi0v1.3, RPi0W + LibreElec/Kodi, Rpi0WH + Tuner TV HAT
NodeMCU ESP32