IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

x86 32-bits / 64-bits Assembleur Discussion :

[MASM32][Débutant] Read / Write Console


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut [Résolu][MASM32][Débutant] Read / Write Console
    bonjour à tous,

    je suis actuellement entrain d'apprendre l'assembleur à partir du bouquin de Kip Irvine. Au niveau théorie pour l'instant j'ai l'air de piger
    par contre niveau pratique : c'est pas encore ca

    dans le livre est utilisée toute une librairie (pour afficher/lire des chaines de caractères/des entiers en mode console) que je n'arrive pas à faire fonctionner...

    j'ai décidé de coder moi meme quelque procédure pour commencer, comme lire un caractère et le réécrire...mais je ne vois pas ou ca bug car il n'y a pas d'erreur lors de la compilation...

    voici le snippet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
     
    .386
    .model flat, stdcall
     
    Include	windows.inc
    Include	kernel32.inc
    Includelib	kernel32.lib
     
    include 	user32.inc
    includelib user32.lib
    ;-------------------------------------------------------------------------------------------------------------------
    .data
    msg		BYTE	"...: Hello binary World! :...",13,10,"Please enter a character : ",0
     
    ;-------------------------------------------------------------------------------------------------------------------
    .data?
    consoleInHandle  	DWORD ?     	; handle to standard input device
    consoleOutHandle 	DWORD ?     	; handle to standard output device
     
    buffer 		BYTE 512 DUP(?)
    NbBytesWritten     DWORD ?     	; number of bytes written
    CharAnswer	BYTE ?
    bytesRead DD ?
    ;-------------------------------------------------------------------------------------------------------------------
    .code
    start:
    call Initialize
    invoke 	WriteConsole,		
    					consoleOutHandle,			; console output handle
    	  				offset msg,				; address of buffer to write characters from 
    	  				sizeof msg,				; number of character cells to write to
    	  				0,						; coordinates of first cell to write to
    	  				0						; address of number of cells written to
    call ReadChar	  
    mov CharAnswer, al
     
    invoke 	WriteConsole,		
    					consoleOutHandle,			; console output handle
    	  				offset CharAnswer,			; address of buffer to write characters from 
    	  				sizeof CharAnswer,			; number of character cells to write to
    	  				0,						; coordinates of first cell to write to
    	  				0						; address of number of cells written to
     
    call ReadChar	  	
    invoke ExitProcess,0
    ;-------------------------------------------------------------------------------------------------------------------
    Initialize PROC 	; Get the standard console handles for input and output,
    	pushad
    	invoke GetStdHandle, STD_INPUT_HANDLE
    	mov [consoleInHandle],eax
    	invoke GetStdHandle, STD_OUTPUT_HANDLE
    	mov [consoleOutHandle],eax
    	popad
    	ret
    Initialize ENDP
    ;-------------------------------------------------------------------------------------------------------------------	
    ReadChar PROC	; Reads one character from standard input. The character is not echoed on the screen. Waits for the character if none is currently in the input buffer.
    				LOCAL saveFlags:DWORD
    ; Receives: 	nothing
    ; Returns:  	AL = ASCII code
    	pushad
    	;invoke GetConsoleMode,consoleInHandle,ADDR saveFlags		; Get & save the current console input mode flags:
    	;invoke SetConsoleMode,consoleInHandle,0  				; Clear all flags
     
    	invoke ReadConsole,	; Read a single character from input buffer:
    	  					consoleInHandle,		; handle of a console input buffer 
    	  					ADDR buffer,			; address of buffer to receive data
    	  					1,					; number of characters to read 
    	 					ADDR bytesRead,		; address of number of characters read 
    	 					0					; reserved
     
    	invoke SetConsoleMode,consoleInHandle,saveFlags 	; Restore the previous flags state:
     
    	popad
    	mov al,buffer	; return the input character
    	ret
    ReadChar ENDP
    ;-------------------------------------------------------------------------------------------------------------------	
    end start
    1. y a t il des macros toute faite me permettant de gérer facilement les entrèes/sorties consoles ? le temps d'apprendre et de faire des exercicies héhé...
    2. ou sinon si une ame charitable peut me dire ou est le souci avec mon code, je lui en serai très reconnaissant

    Bonne soirée.
    Amicalement.

  2. #2
    Membre confirmé Avatar de dapounet
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 469
    Points : 567
    Points
    567
    Par défaut
    Normalement l'auteur fournit des fonctions simplifiées qui se chargent d'appeler ReadConsole()/WriteConsole(). Celles-là elles marchent ?
    Pour les macros à mon avis l'intérêt est limité parce que la macro invoke facilite déjà beaucoup les appels de fonctions, mais sinon oui je peux t'en faire.
    Le plus simple pour afficher du texte en console c'est d'utiliser printf(), tu t'en es déjà servi en C ?
    :wq

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Bonjour dapounet,

    oui l'auteur fournit ses propres fonctions (il fournit les .lib et .inc).
    mais celles ci ne marchent pas : j'obtiens une erreur "error LNK2001"...

    je cherche à pouvoir lire une chaine de caractère ou des nombres saisis par l'utilisateur via la console...pour créer de petits programmes "intéractifs"

    je sais me servir de printf et scanf en c (je connais les bases de ce language)

    pour ce qui est d'afficher une chaine de caractère, ca j'y arrive avec Writeconsole
    c'est pour lire une chaine de caractère avec readconsole que ca ne fonctionne pas !

    j'ai déja vu des sources avec _lread & _lwrite, mais ces api sont obsoletes...
    sais tu ou je pourrais trouver des exemples avec readconsole et writeconsole ?

    Merci pour ton aide.

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    yyiiouou !
    euréka j'ai trouvé un exemple tout bête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    .386
    .model flat,stdcall
    option casemap:none
     
    include     \masm32\include\windows.inc
    include     \masm32\include\kernel32.inc
    include     \masm32\include\masm32.inc
    includelib  \masm32\lib\kernel32.lib
    includelib  \masm32\lib\masm32.lib
     
     
    .data
    msg1 db 'Please type your name',13,10,0
    msg2 db 'Your name is : ',0
     
    .data?
    buffer db 100 dup(?)
    .code
     
    start:
    	invoke StdOut,ADDR msg1
    	invoke StdIn,ADDR buffer,100 ; receive text input
    	invoke StdOut,ADDR msg2
    	invoke StdOut,ADDR buffer
    	invoke StdIn,ADDR buffer,100 ; pause
    	invoke ExitProcess,0
    END start
    mais à quoi servent les api readconsole et writeconsole ? sont elle vraiment utiles ?

    Bonne soirée.

  5. #5
    Membre confirmé Avatar de dapounet
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 469
    Points : 567
    Points
    567
    Par défaut
    ReadConsole et WriteConsole sont des fonctions fournies de base par Windows.
    Si tu regardes le code source de StdIn et StdOut (avec MASM32 il est dans \masm32\m32lib) tu verras qu'elles utilisent ReadFile/WriteFile, ce qui est à peu près pareil.
    http://msdn2.microsoft.com/en-us/lib...13(VS.85).aspx

    Si tu as mscvrt.lib et msvcrt.inc tu peux les inclure et appeler les fonctions du C (il faut juste ajouter crt_ devant leur nom, printf devient crt_printf).
    :wq

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    effectivement tout est dans m32lib !

    juste une dernière question : comment est il possible savoir à quoi servent toutes "les fonctions" prèsentes dans m32lib ? car ca doit être très utile !

    merci pour le trick avec les fonctions du C utilisable avec crt !

    encore merci pour ton aide dapounet

  7. #7
    Membre confirmé Avatar de dapounet
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 469
    Points : 567
    Points
    567
    Par défaut
    Citation Envoyé par Jean Michou Voir le message
    juste une dernière question : comment est il possible savoir à quoi servent toutes "les fonctions" prèsentes dans m32lib ? car ca doit être très utile !
    C'est dans masm32\help\masmlib.hlp normalement. Personnellement je ne m'en suis jamais servi, j'ai assez avec les fonctions du C ou alors je préfère apprendre les fonctions Win32 qui sont plus puissantes et peuvent être utilisées dans d'autres langages.
    :wq

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    désolé pour ma réponse un peu tardive...je reviens de vacances
    encore merci pour tes conseils...

    j'ai édité le titre du topic pour mettre résolu devant...

    Tchao.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. probleme read write serveur/client
    Par romainromain dans le forum Réseau
    Réponses: 9
    Dernier message: 22/11/2006, 16h23
  2. propriété read write
    Par new_wave dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 08/09/2006, 11h24
  3. [débutant] gestion effacement console
    Par philippe123 dans le forum Général Java
    Réponses: 3
    Dernier message: 22/02/2006, 21h03
  4. [MASM32][Débutant] Erreur de compilation
    Par Priest dans le forum x86 32-bits / 64-bits
    Réponses: 6
    Dernier message: 02/10/2005, 02h06
  5. Problème de read/write
    Par mylooz dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 25/03/2005, 19h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo