bonjour,
j'essaie (mais sans succès) de manipuler des chaines de caractères.
j'ai (presque) tout essayer.
par exemple :
compare: pushebp movebp,esp movedx,[ebp+8] movecx,[ebp+4] leaedx,[edx] leaecx,[ecx]
.L1: cmpdword[ecx],0 je .L2 cmpdword[ecx],0 je .L2 moveax,[ecx] cmp[edx],eax je .L2 incedx incecx jmp .L1
.L2: moveax,[ecx] cmp[edx],eax je .L3 moveax,0 jmp .L4
.L3: moveax,1
.L4: leave ret
et même de "traduire" un C en GAS puis en nasm mais çà marchait pas plus.
1/ en gros, y a-t-il une "relation" C <=> asm
en ayant, par exemple "mov eax,[ebp+8]"
eax = char*
[eax] = char
2/ quand faut il utiliser mov et quand utiliser lea ?
Relation C <=> ASM, bah oui, dans le sens ou tout programme est une suite d'instruction binaire, et que ces instructions peuvent être remplacées par des mnémoniques quelconques, donc par de l'asm. Mais étant donné les inclusions de librairie, les optimisations, particularités des proco, et du coté "automatique" de la compilation, le code ASM généré est surchargé et peu-enclin à être lu
Ensuite, étant donné la limitaiton du nombre et de la taille des registres, le compilo les utilisent plutot occasionellement de façon à stocker une variable, sauf si c'est précisé (register int eax = 5; par exemple). Un programme compilé à partir d'un langage comme le C utilise exclusivement la mémoire, et utilise les registres pour stocker temporairement les variables afin d'effecter certaines instructions.
----------
LEA:
Transfers offset address of "src" to the destination register.
MOV:
Copies byte or word from the source operand to the destination operand.
La différence est donc: LEA place l'adresse effective de la source dans la destination, tendis que MOV copie la source dans l'opérande
----------
Pour comparer deux chaine, moi j'ai fait ca, y'a longtemps donc y'a ptet des trucs un peu sale, mais ca fonctionne bien, (chaines terminées par \0)
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.