PureBasic

Forums PureBasic
Nous sommes le Mar 18/Juin/2019 4:37

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 8 messages ] 
Auteur Message
 Sujet du message: string et asm
MessagePosté: Dim 15/Nov/2009 11:02 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 16/Juil/2006 21:44
Messages: 197
Bonjour !!!

Je regarde ce qu'on peut faire en asm et je dois dire que je n'y comprend pas grand chose :cry:

J'essai par exemple de changer le contenu d'une chaine. Est ce que quelqu'un pourrait regarder mon code et me corriger.
C'est un truc tout bête mais il me faut des exemples pour saisir les choses (On est pas tous égaux :roll: )

Code:
string.s = "r"

!s1 db "bonjour",0
!MOV    edx,s1
!LEA    ecx,[v_string]

Debug string


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: string et asm
MessagePosté: Dim 15/Nov/2009 11:34 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 16/Juil/2006 21:44
Messages: 197
Avec mov seulement ça fonctionne.

Code:
valeur.l = 11
valeur2.l = 35
string1.s ="r"
string2.s = "bonjour"
!mov eax,[v_valeur2]
!mov [v_valeur],eax
!mov edx,[v_string2]
!mov [v_string1],edx

Debug valeur
Debug string1


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: string et asm
MessagePosté: Dim 15/Nov/2009 11:40 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 16/Juil/2006 21:44
Messages: 197
Je saisi pas certaine chose sur les mov.

Il y a mov et movs et on parle de registre EDI pour les chaines. Avec movs mon code plante et je vois pas trop la différence.

Une petite info ^^


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: string et asm
MessagePosté: Mar 17/Oct/2017 1:57 
Hors ligne

Inscription: Ven 29/Juin/2007 17:50
Messages: 3414
MOVS c'est un peu court.
Tu dois préciser ce que tu veux déplacer :

MOVSB : un byte
MOVSW : un word
MOVSD : un double word
MOVSQ : un quad word

Tu dois régler deux adresses :

Tu dois régler la source (anglais Source Index donc registre SI)
Et tu dois régler la destination (anglais Destination Index donc registre DI)
Tu peux régler un compteur : registre CX, c'est le nombre de MOVS qui s'exécuteront en mode automatique.

Tu dois définir une direction : selon que t'écrives à l'endroit où à l'envers dans la mémoire.
Si t'écris à l'endroit c'est l'instruction CLD (anglais Clear Direction)
Si t'écris à l'envers c'est l'instruction STD (anglais Store Direction)

Petite astuce : 0 est considéré comme positif
1 est considéré comme négatif
Un peu comme écrire un nombre sans signe c'est positif, sinon c'est négatif (à moins que ça te passionne d'écrire des signes "+" qui servent à rien)

Petite info: si tu pars à l'envers, revient à l'endroit avant de rendre la main à PB, sinon tu crashes ton programme.

Les réglages des 3 registres SI, DI et CX doivent être écrits selon que tu bidouilles en x86-32 ou en x64 :
32bits : on rajoute le préfixe E
64bits : on rajoute le préfixe R

En mode automatique, on rajoute un préfixe REP (répéter l'opération)

ex 32 bits:

Code:
Mov ecx, 18
Mov esi, [p_mavariablesource]
Mov edi, [p_mavariabledestination]
Cld ; marche avant
Movsb ; déplace un octet
Movsw ; déplace le word qui suit l'octet
Rep Movsd ; déplace 18 longs
Std ; marche arrière
Rep Movsd ; ne fait rien...
Mov ecx, 2 ; ...car il faut rerégler le compteur
Add edi, 2; prépare le déplacement suivant
Rep Movsd ; déplace les 2 derniers des 18 longs en big endian (le déplacement des longs, pas les longs)
Cld ; Reviens en marche avant

Mais ptêt que c'est plus simple d'écrire des trucs comme a = b tout simplement...

(Et désolé pour le petit contre-temps)

_________________
Juste la 4G pour Smartphone


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: string et asm
MessagePosté: Mer 18/Oct/2017 10:13 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 16/Juil/2006 21:44
Messages: 197
Comme disait Henri Salvador : "Il s'en ai fallut de peu que ce soit à titre posthume"

Trêve de plaisanterie ;) Merci pour la réponse.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: string et asm
MessagePosté: Mer 18/Oct/2017 20:26 
Hors ligne

Inscription: Ven 29/Juin/2007 17:50
Messages: 3414
De Henri Salvador, dérivons sur Salvador Dali pour souhaiter que le temps soit mou...

Il y avait un exemple ici avec SCAS:
voir procedure "Laststring"
C'est toujours le même principe pour toutes les instructions de chaînes en ASM.

_________________
Juste la 4G pour Smartphone


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: string et asm
MessagePosté: Lun 18/Déc/2017 17:10 
Hors ligne
Avatar de l’utilisateur

Inscription: Jeu 14/Oct/2004 19:48
Messages: 1122
Juste une petite précision concernant LEA qui a une syntaxe déconcertante.

LEA EAX,[Adresse] est équivalent à MOV EAX,Adresse. Le [] qui correspond normalement à l'emplacement mémoire de l'adresse précisé ne fonctionne pas ainsi avec LEA.

LEA est utilisé pour faire des opérations mathématiques spécifiques de manière rapide (c'est une astuce en fait) ou plus généralement à calculer une adresse d'un tableau avec un index.

Par exemple, imaginons un tableau dont chaque case contient 2 mots de 4 octets. (donc 8 octets par case)
On souhaite accéder à la EAX-ième case du tableau et au 2eme mot.
L'adresse de début du tableau est EBX.
Code:
LEA ESI, [EBX + 8*EAX + 4]

ESI contient l'adresse qui nous interesse.
C'est équivalent à
Code:
MUL 8 ;//ou SHL EAX,3
ADD EAX,4
ADD EAX,EBX
MOV ESI,EAX

_________________
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 5.45LTS - 32 bits


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: string et asm
MessagePosté: Mar 19/Déc/2017 1:54 
Hors ligne

Inscription: Ven 29/Juin/2007 17:50
Messages: 3414
Cette méthode m'a toujours séduit, et je ne l'ai jamais testé, sauf en mode réel parce que LEA n'affecte pas les drapeaux d'états arithmétiques. En tout cas, c'est une bonne astuce.

J'en profite pour poster ce lien :
https://www.strchr.com/strcmp_and_strlen_using_sse_4.2
Je ne sais pas si les instructions natives PB de chaîne utilisent ces instructions. Ça commence à dater...
Désolé : je n'ai pas eu le temps de publier le moindre code à ce sujet.

_________________
Juste la 4G pour Smartphone


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 8 messages ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  
cron

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye