begin process at 2012 05 25 12:18:08
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Assembleur

 > 

Archives

 > 

Newbii

 > 

Probleme ligne de commande


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Probleme ligne de commande

mardi 9 août 2005 à 21:44:15 | Probleme ligne de commande

Nitruk

Comment trouver l'offset de début de ligne de commande dans un exe 16 bits et eventuellement comment s'y référencer sous MASM ? (Je débute...)
                                                                                               merci d'avance

Nitruk
mercredi 10 août 2005 à 09:08:28 | Re : Probleme ligne de commande

Nasman

Sauf erreur de ma part les fichiers .exe 16bits présentent le même en-tête (PSP) que les fichiers .com dont voici le descriptif. La différence principale entre ces deux formats est que l'exécutable .com commence en CS:0100h avec un PSP en CS:0000h (et une ligne de commande en 81h) - Rappel CS=DS=ES=SS pour un .com.
Le fichier exe 16bits commence en CS:0000h et son PSP en DS:0000. Tu devrais trouver ta ligne de commande à :
DS:0081

Descriptif du PSP

Offset

Description

Taille (octets)

00h

Appel de l'int 20h

2

02h

Adresse du 1er segment qui se trouve au delà du prog.

2

04h

Réservé

1

05h

Far call de l'int 21h (inutilisé)

5

0Ah

Vecteur de l'int 22h

4

0Eh

Vecteur de l'int 23h

4

12h

Vecteur de l'int 24h

4

16h

Réservé

22

2Ch

Segment du bloc d'environnement

2

2Eh

Réservé

82

80h

Nombre de caractères dans la ligne de commande sans compter le code ASCII 13 (retour chariot)

1

81h

Ligne de commande (à partir du caractère espace qui suit le nom du programme) + code ASCII 13

127


Bonne prog

mercredi 10 août 2005 à 11:07:30 | Re : Probleme ligne de commande

Nitruk

J'ai essayé comme ça mais mon programme n'a pas l'air de trouver là-bas la ligne de commande. S'il faut que je me référencie à CS, je ne sais pas comment faire. Je vous envoie ce bout de code. Pourriez vous me le corriger svp ?

mov BP, 0080h
inc BP
mov al, [BP+00]
cmp al, 0Dh
 je Traitement2
dec BP
xor si, si

Nitruk
mercredi 10 août 2005 à 11:09:06 | Re : Probleme ligne de commande

Nitruk

Et puis au passage, me dire comment faire pour un exe 32 bits ? Je suis vraiment débutant et je n'ai jamais programmé avant.

Nitruk
mercredi 10 août 2005 à 11:28:01 | Re : Probleme ligne de commande

Nasman

Je pense que ton problème provient du fait que BP est un registre de pile et qu'il fonctionne avec SS qui ne pointe pas sur le PSP


Registre

Valeur avant l’exécution

Fichier COM

Fichier EXE

CS

Adresse de l’unique segment, c’est à dire adresse de segment du PSP

Adresse du segment de code

DS

Adresse de l’unique segment, c’est à dire adresse de segment du PSP

Adresse de segment du PSP

ES

Adresse de l’unique segment, c’est à dire adresse de segment du PSP

Adresse de segment du PSP

SS

Adresse de l’unique segment, c’est à dire adresse de segment du PSP

Adresse du segment de pile


Si tu n'utilise pas ES dans ton programme, il pointe normalement sur le PSE. Il te faut essayer les instructions suivantes:

mov al,[ES:0080h]            ;contient le nombre d'octets de la ligne de commande
je paslignecommande         ;si nul alors pas de ligne de commande
traitement                           ;chaine de al caractères (sans le 13) commençant en                                                       ;ES:0081h



mercredi 10 août 2005 à 12:08:48 | Re : Probleme ligne de commande

Nasman

Je ne peux pas trop t'apporter d'aide pour la création de fichiers 32bits avec MASM car j'utilise NASM dont la syntaxe est un peu différente.
Les opérations se déroulent généralement ainsi:
1) Création du (ou des) fichier asm avec un éditeur de texte
2) Compilation du (ou des) fichier avec MASM avec indication du format désiré (objet, coff, ...)
    avec Nasm c'est par exemple
    Nasmw -fobj Fichier.asm      ;-fobj crée un fichier objet (.obj)

3) Edition de liens - Rassemble les différents programmes objets et bibliothèques, importe les adresses des fonctions de dll, des API, crée l'entête PE (format des exécutables windows)
    Avec alink:
    alink -oPE Fichier.obj Fichier2.obj Fichier3.res

    Fichier3.res est une ressource, pour inclure une icone, des boites de dialogue, des menu etc à ton exécutable.


Voici un petit programme pour illustrer les différentes sections

;-----------------------------------------------
;importation de bibliothèques dll windows

extern ExitProcess
import ExitProcess Kernel32.dll
extern MessageBoxA
import MessageBoxA user32.dll


;-------------------------------------------------
;déclaration de la section code
;
segment code public use32 class=CODE

;---------------------------------------------------
;définit le point d'entrée du programme (où il débute)
;
..start:

    push dword 0        ;bouton OK seulement
    push dword Titre
    push dword Texte
    push dword 0        ;handle fenêtre
    call [MessageBoxA]    ;affiche le message
    push dword 0
    call [ExitProcess]    ;termine le processus
    ret
    
;--------------------------------------------------
;déclaration des données initialisées
;
segment data public use32 class=DATA
Titre    db "Titre de la messagebox",0
Texte    db "Voilà mon message",0



Le fichier PE créé possèdera une section .text (programme), une section .data (intitulés du message), une section .imports (les dll Kernel32.dll et user32.dll et les fonctions API MessageBoxA et ExitProcess).

J'espère avoir pu t'aider

mercredi 10 août 2005 à 12:24:39 | Re : Probleme ligne de commande

Nitruk

Merci, maintenant je progresse. Mais je voudrais mettre un registre à la place de 0081h pour pouvoir incrémenter au fur et à mesure sa valeur, et Masm n'accepte pas les différents registres que j'aiproposé jusque là. Quel registre pourrais-je proposer ?
Et au passage, quel(s) caractère(s) faut-il envoyer pour effacer un caractère précédemment tapé ?

Nitruk
mercredi 10 août 2005 à 12:49:30 | Re : Probleme ligne de commande

patatalo

Membre Club Administrateur CodeS-SourceS

salut,

effectivement, le mode réel limite l'utilisation des registres pour acces memoire.

tu peux utiliser si, di, bx et bp si tu préfixe avec seg ds ([ds:bp])

@++

mercredi 10 août 2005 à 12:51:52 | Re : Probleme ligne de commande

Nitruk

En l'occurence je prefixe avec es, j'utilise deja si, et bx et bp ne sont pas acceptés. Je vais essayer avec bi.

Nitruk
mercredi 10 août 2005 à 12:52:34 | Re : Probleme ligne de commande

patatalo

Membre Club Administrateur CodeS-SourceS
re,

pardon, bp doit etre préfixé avec le segment es ([es:bp])

@++

1 2 3 4

Cette discussion est classée dans : ligne, probleme, commande


Répondre à ce message

Sujets en rapport avec ce message

[nasm] ligne de commande [ par Kevin68 ] Bonjour :),Je suis débutant en assembleur, j'utilise nasm sous linux.J'ai cherché partout un exemple de code source qui me permettrait de récupérer le Drawline en asm [ par raoulli ] bonsoir.J'ai voulu creer une ligne sur l'ecran en asm, mais Drawline ?, je ne la trouve pas, si elle existe.j'ai trouvé des infos, mais avec les inter Souris PS/2 [ par bofur ] j'essaye de créer un mini os mais j'ais un probleme avec la souris ps/2: je n'arrive pas a lui envoyer une commandeF4h est la commande pour demander a include et fasm [ par CheckList ] Bonjour, j'ai un probleme avec FASM. Voila, j'essaye de compilé un programme deja tout fait ecrit en FASM trouvez dans le repertoire exemple.Mon prob Problème de retour à la ligne [ par mmaximum ] Bonjour à tous,J'ai un petit problème. J'ai un bout de code(ci-dessous) qui assigne du texte à une variable(msgDebut).msgDebut db "ligne1\nligne2", 13 Probleme de comprehention [ par nuns ] Bonjour,je suis entrain d'apprendre l'assembleur, et c'est plus dure que je pensais.rien qu'avec c'est trois ligne je suis presque perdu ;(Affiche "10 commande via le Port Série [ par jonathanzanti ] Avant tout, je vous souhaites à toutes et à tous une très bonne année 2009 ! Bien voila, je me lance, je travail depuis pas mal de temps sur un proje compilation sous MPLAB [ par alphab18 ] slt j'ai toujours un probleme de compilation sous MPLAB quand je prend un code du net ,et que je le copie  dans mplab pour tester  s'il fonctionne .j' Probleme avec l'API CLSIDFromProgID [ par vulpes87 ] BonjourJe debute avec la programmation objet avec Tasm.J'ai trouve une belle exemple Masm qui definie une variable comme suit:wszOfficeApp dw L("Excel Probleme de programmation en assembleur 8086 [ par lovelygirl88 ] slt tous le monde, je suis debutante en assembleur 8086 et j'ai besoin d'un programme qui fait l'addition de deux nombres,est ce que qulequ'un peut m'


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,796 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales