Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2909 connectés 

  FORUM HardWare.fr
  Programmation
  ASM

  [ASM]coder un strlen en asssembleur??

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[ASM]coder un strlen en asssembleur??

n°1538917
drexlbob
Posté le 05-04-2007 à 13:46:00  profilanswer
 

Bonjour a tous.
Je debute en ASM et je voudrais coder  une fontion permettant de connaitre la taille d'une chaine de caractere (un strlen en C)
Quelqu'un a -t-il la solution??
Merci


---------------
L'etre humain juge tres vite comprend lentement, s'enerve facilement et perd vite ses facultees d'enfant!!!!
mood
Publicité
Posté le 05-04-2007 à 13:46:00  profilanswer
 

n°1538919
ZeBix
edit > preview
Posté le 05-04-2007 à 13:51:23  profilanswer
 
n°1538992
db__
spécialiste de l'à peu près
Posté le 05-04-2007 à 15:31:33  profilanswer
 

S'il s'agit d'une chaine C qui n'est pas en unicode,
initialise un compteur à 0, pointe le début de la chaine, charge un caractère puis pointe le suivant, compare le à 0 si pas incrémente le compteur, si 0 sort.
Si c'est de l'unicode ça va être très chiant.
y-a-pu-ka

n°1540026
meik
Posté le 07-04-2007 à 19:27:26  profilanswer
 

cherche l'instruction scasb en asm et regarde comment elle fonctionne.
 
PS: tu vas aussi demander qu'on te file la solution pour les 14 fonctions du sujet d'assembleur, et pour tous les autres projets de l'ecole ? :-)

n°1542852
dap++
Script kiddie
Posté le 14-04-2007 à 12:24:41  profilanswer
 

Tiens c'est marrant je viens de faire le même exercice. J'ai fait comme ça :
 

Code :
  1. strlen proc
  2.         push bp
  3.         mov bp, sp
  4.        
  5.         xor eax, eax
  6.         mov si, [bp+4]
  7. iteration:
  8.         inc eax
  9.         inc si
  10.         cmp byte ptr[si], '$'
  11.         jne iteration
  12.        
  13.         pop bp
  14.         ret 2
  15. strlen endp


 
J'en profite pour poser une question : est-ce qu'il vaut mieux retourner le résultat par EAX ou prendre en paramètre un pointeur vers une variable qui contiendra le résultat ? Merci. :hello:

n°1542862
red factio​n
Posté le 14-04-2007 à 13:17:27  profilanswer
 

tant que possible c mieux de retourner une valeur , comme le strlen de C, et tu n'a pas a utiliser eax, tu fait juste ret c tout, parce que la ton programme retourne toujours 2 ?!

n°1543127
anordem
Posté le 15-04-2007 à 22:34:59  profilanswer
 

red faction a écrit :

tant que possible c mieux de retourner une valeur , comme le strlen de C, et tu n'a pas a utiliser eax, tu fait juste ret c tout, parce que la ton programme retourne toujours 2 ?!


Euh, y'a un truc qui m'échappe...  :??:  
 
Le 2 correspond à la taille que prennent les paramètres sur la pile. Ici, il n'y a qu'un paramètre et on est en mode 16 bits, donc pour aligner la pile, il faut ajouter 2 octets à ESP.
 
Par convention, la valeur de retour se trouve dans le registre EAX, mais on pourrait très bien avoir plusieurs valeurs de retour dans plusieurs registres.
 
Je ne comprend pas pourquoi tu viens donner des conseils si tu ne connais pas les bases de l'assembleur.  :heink:  
 

n°1543451
dap++
Script kiddie
Posté le 16-04-2007 à 18:40:10  profilanswer
 

Merci pour la précision, je ne sais pas pourquoi je croyais que les registres étaient empilés / dépilés pour qu'après le retour de la fonction ils aient le même état qu'à son appel, mais apparemment j'ai rêvé.

n°1543497
anordem
Posté le 16-04-2007 à 20:15:18  profilanswer
 

Oui, je n'ai pas détaillé.  
 
Effectivement, certains registres doivent être sauvegardés sur la pile. En fait, seuls EAX (puisqu'il contient la valeur de retour), ECX (qui est un compteur) et EDX n'ont pas besoin d'être sauvegardés.
 
Normalement, ESP n'a pas à être manipulé (à part pour rétablir la pile ou allouer des variables locales) donc, il n'a pas besoin d'être sauvegardé.

n°1543520
MagicBuzz
Posté le 16-04-2007 à 21:09:01  profilanswer
 

(question du gars qui a fait 3 heures de TP sur 386)
 
eax c'est pas 32 bits ?
alors si c'est pour bosser qu'avec du 16 bits, pkoi ne pas utiliser simplement AX ?
ça peut toujours être intéressant de conserver la partie haute de EAX pour stocker d'autres infos, genre un strlen évolué qui permet de compter la longueur d'une chaine, et en plus le nombre de sauts de lignes (par exemple) non ?


Message édité par MagicBuzz le 16-04-2007 à 21:10:12
mood
Publicité
Posté le 16-04-2007 à 21:09:01  profilanswer
 

n°1543556
anordem
Posté le 16-04-2007 à 23:59:20  profilanswer
 

Bah, tu fais ce que tu veux. :)  
 
Mais on ne peut pas accéder directement à la partie haute de EAX, donc il faudra utiliser les instructions de décalage binaire (SHL, SHR, ROR, ROL). Et puis, comme je le disais, tu peux même renvoyer plusieurs valeurs dans EAX et EDX par exemple. C'est d'ailleurs ce que font certaines instructions, comme RDTSC ou CPUID par exemple.
 
Mais bon, c'est un peu abusé de parler d'asm 16 bits alors que le PC moyen est en train de migrer vers le 64 bits. :sarcastic:

n°1549294
pango
Posté le 26-04-2007 à 10:55:56  profilanswer
 

Petite question concernant la sauvegarde des registres: (pardon d'avance si c'est trop trivial, je connais pas grand chose à l'assembleur)
 
pourquoi n'est-il pas necessaire de rétablir les valeurs initiale de EAX, ECX et EDX ??. Si on code par exemple une routine asm dans un programme  C, comment peut-on est sûr qu'au moment de l'appel de la routine, un de ces trois registre ne soit pas utilisé pour autre chose ?

n°1549430
MagicBuzz
Posté le 26-04-2007 à 11:38:25  profilanswer
 

logiquement, le compilo sauvegarde et restore lui-même les registres et pilesavant que tu ne lances ton bout d'ASM


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  ASM

  [ASM]coder un strlen en asssembleur??

 

Sujets relatifs
difficulter pour coder....[Resolu] Coder le style en PHP (police, taille police)
[C] coder un malloc??Programmer un system d'exploitation en C ? ou C++ ou ASM ? ou quoi ?
Afficher une image ne ASM.[ASM]erreur de compilation (debutant)
ASM Z80 Tutoriaux[Oracle ASM] Problème d'optimisation de requête suite à migration
Coder Java Sous MacCoder une fonction recherche en PHP
Plus de sujets relatifs à : [ASM]coder un strlen en asssembleur??


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR