Me remettre à l'assembleur !

On peut difficilement être plus proche du cœur du CPU qu'avec l'assembleur...

Modérateur : Francois

Répondre
Artemus24
Raspinaute
Messages : 1077
Enregistré le : ven. 15 sept. 2017 19:15

Me remettre à l'assembleur !

Message par Artemus24 » dim. 17 janv. 2021 15:33

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 ?

@+
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

dyox
Raspinaute
Messages : 969
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 !

Message par dyox » dim. 17 janv. 2021 19:14

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

Artemus24
Raspinaute
Messages : 1077
Enregistré le : ven. 15 sept. 2017 19:15

Re: Me remettre à l'assembleur !

Message par Artemus24 » dim. 17 janv. 2021 21:24

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. :D

@+
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

Artemus24
Raspinaute
Messages : 1077
Enregistré le : ven. 15 sept. 2017 19:15

Re: Me remettre à l'assembleur !

Message par Artemus24 » mar. 19 janv. 2021 21:25

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.

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
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 :

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

>
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.

@+
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

VincentLeboulou
Messages : 35
Enregistré le : jeu. 19 oct. 2017 10:11

Re: Me remettre à l'assembleur !

Message par VincentLeboulou » mar. 26 janv. 2021 16:27

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

Artemus24
Raspinaute
Messages : 1077
Enregistré le : ven. 15 sept. 2017 19:15

Re: Me remettre à l'assembleur !

Message par Artemus24 » mer. 27 janv. 2021 08:39

Salut M. Vincent Leboulou.

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

Répondre

Retourner vers « Assembleur »