Page 1 sur 1

[MSP430] décalage à gauche et retenue

Posté : jeu. 6 févr. 2025 17:30
par OrKaraz
Bonjour,

Sauf mauvaise recherche de ma part, je n'arrive pas à trouver une réponse à mon problème.
Habituellement je développe en assembleur, mais la mon projet est trop grand pour me le permettre.
Pour faire simple, dans mon algorithme je souhaite faire un décalage à gauche d'une variable 8 bits et regarder si j'ai la retenue qui est définie.
Code : Tout sélectionner
unsigned char var;

// code

var <<=1;
if (carry = 1) {
    // code
}

Pour le moment je ne trouve pas de réponse efficace à mon problème après avoir tester avec une variable 16bits et un ensemble de structure et d'union.

Le code assembleur résultant est comme suis : (même résultats sur tous mes tests)
Code : Tout sélectionner
	.dwpsn	file "../src/libILI9341.cpp",line 186,column 13,is_stmt,isa 0
        RLA.W     r14                   ; [] |186| 
	.dwpsn	file "../src/libILI9341.cpp",line 187,column 13,is_stmt,isa 0
        MOV.W     r14,r15               ; [] |187| 
        SWPB      r15                   ; [] |187| 
        MOV.B     r15,r15               ; [] |187| 
        TST.B     r15                   ; [] |187| 
        JNE       $C$L18                ; [] |187|
Or il est possible en utilisant la retenue (je n'ai pas besoin de garder l'intégrité de la donnée, je souhaite juste observer chaque bits un par un) :
Code : Tout sélectionner
	.dwpsn	file "../src/libILI9341.cpp",line 186,column 13,is_stmt,isa 0
        RLC.B     r14                   ; [] |186| 
        JNC       $C$L18                ; [] |187|
Cette action économise de la flash (8 octets) et de l'horloge (4 cycles).

Avez vous des connaissance sur ce sujet ?

En vous remerciant.