- jeu. 6 févr. 2025 17:30
#217224
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.
Le code assembleur résultant est comme suis : (même résultats sur tous mes tests)
Avez vous des connaissance sur ce sujet ?
En vous remerciant.
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
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.unsigned char var;
// code
var <<=1;
if (carry = 1) {
// code
}
Le code assembleur résultant est comme suis : (même résultats sur tous mes tests)
Code : Tout sélectionner
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) :
.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|
Code : Tout sélectionner
Cette action économise de la flash (8 octets) et de l'horloge (4 cycles). .dwpsn file "../src/libILI9341.cpp",line 186,column 13,is_stmt,isa 0
RLC.B r14 ; [] |186|
JNC $C$L18 ; [] |187|
Avez vous des connaissance sur ce sujet ?
En vous remerciant.