Je suis en train de faire un petit programme de test pour tenter de copier les arguments passés en ligne de commande
pour ensuite tenter de convertir ceux-ci en variables numériques...
J'ai un soucis avec l'utilisation de stob et ecx qui contient 18 au lieu de 6...
Pourtant il me semble que ces déclarations devraient indiquer au compilateur que szStringX devraient contenir la longueur de chaque chaîne... (je me demande d'ailleurs comment je vais procéder
lorsque je vais récupérer cela de la ligne de commande, mais une chose à la fois...)
...dans mon programme, lorsque je débugge, je me rends compte que ecx vaut 12h... (18)... ce qui équivaut à la longueur des trois chaînes plus leurs '\n' et leurs '\0'...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 String1 db "arg1",10,0 String2 db "arg2",10,0 String3 db "arg3",10,0 szString1 equ $-String1 szString2 equ $-String2 szString3 equ $-String3 ... Array resb 255
rcx est évidemment décrémenté correctement mais je voudrais que la taille de la chaîne String1 soit correcte... ça m'aiderait beaucoup... Array devrait contenir non pas tous les arguments mais
un argument à la fois.
J'ai dans l'idée de traiter les arguments un à un en passant par Array... vu que j'ignore comment faire pour que Array soit en fait Array[3][255] en syntaxe C.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 mov ecx,szString1 mov esi,String1 ; String1 devrait être issu de la pile mov edi,Array mov r8,0 ; on va se servir de r8 comme compteur cld ; clear direction flag copierdatas: lodsb ; va charger un byte et le mettre dans al stosb ; on va mettre le caractère de al dans Array inc r8 loop copierdatas
Partager