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

Assembleur Discussion :

Les outils pour l'ASM ?


Sujet :

Assembleur

  1. #41
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Sur Linux :
    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
     
    ;  hello.asm  a first program for nasm for Linux, Intel, gcc
    ;
    ; assemble:	nasm -f elf hello.asm
    ; link:		gcc hello.o -o hello  
    ; run:	        hello 
    ; output is:	Hello World 
     
    	SECTION .data		; data section
    msg:	db "Hello World",10	; the string to print, 10=cr
    len:	equ $-msg		; "$" means "here"
    				; len is a value, not an address
     
    	SECTION .text		; code section
            global main		; make label available to linker 
    main:				; standard  gcc  entry point
    _start:
     
    	mov	edx,len		; arg3, length of string to print
    	mov	ecx,msg		; arg2, pointer to string
    	mov	ebx,1		; arg1, where to write, screen
    	mov	eax,4		; write sysout command to int 80 hex
    	int	0x80		; interrupt 80 hex, call kernel
     
    	mov	ebx,0		; exit code, 0=normal
    	mov	eax,1		; exit command to kernel
    	int	0x80		; interrupt 80 hex, call kernel
    Avec comme command :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    nasm -f elf hello.asm
    gcc hello.o -o hello
    Pour Windows bonne question sur le net j'ai trouvé ceci (donc je n'ai pas pu testé personnellement) :
    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
    ; Name:     hello.asm
    ; Assemble: nasm.exe -f win32 hello.asm
    ; Link:     ld hello.obj -emain -lkernel32 --enable-stdcall-fixup %SYSTEMROOT%\system32\kernel32.dll
    ; Run:      a.exe
     
    BITS 32
    extern _GetStdHandle
    extern _WriteFile
    extern _ExitProcess
     
    SECTION .data
        str:    db "Hello world!"
        strlen  equ $-str
     
    SECTION .text
    GLOBAL main
    main:
        ; Stack frame for NumberOfBytesWritten
        push ebp
        sub esp, 4
     
        ; http://msdn.microsoft.com/en-us/library/windows/desktop/ms683231.aspx
        ; HANDLE WINAPI GetStdHandle(
        ;   _In_  DWORD nStdHandle
        ; );
        push -11
        call _GetStdHandle
     
        ; http://msdn.microsoft.com/en-us/library/windows/desktop/aa365747.aspx
        ; BOOL WINAPI WriteFile(
        ;   _In_         HANDLE hFile,
        ;   _In_         LPCVOID lpBuffer,
        ;   _In_         DWORD nNumberOfBytesToWrite,
        ;   _Out_opt_    LPDWORD lpNumberOfBytesWritten,
        ;   _Inout_opt_  LPOVERLAPPED lpOverlapped
        ; );
        push 0              ; lpOverlapped,
        lea ebx, [ebp-4]    ; EBX: address of NumberOfBytesWritten
        push ebx            ; lpNumberOfBytesWritten,
        push strlen         ; nNumberOfBytesToWrite
        push str            ; lpBuffer,
        push eax            ; hFile (result from GetStdHandle
        call _WriteFile
     
        ; ExitProcess (0)
        push 0
        call _ExitProcess

  2. #42
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Novembre 2015
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2015
    Messages : 30
    Points : 23
    Points
    23
    Par défaut
    Kannagi j'ai essayé le code que tu m'a proposé mais toujours des erreurs de compatibilité. Je crois que ça vient directement de Windows. Il faudrait utiliser les fonctions de l'API pour afficher un message. La possibilité d'utiliser des interruptions du BIOS ne serait plus autorisée.

  3. #43
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Le code sur Windows que j'ai posté n'utilise pas le Bios et utilise une lib externe (ici lkernel32 )
    (et celui sur Linux non plus , c'est une interruption propre a Linux).

  4. #44
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Novembre 2015
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2015
    Messages : 30
    Points : 23
    Points
    23
    Par défaut
    Je ne sais pas si le programme utilise des interruptions puisque les fonctions sont déjà faites comme "_WriteFile". Mais ce serait à cause de Windows et de son "API". Avant, tout passait directement par le hardware mais maintenant il me semble qu'il y a comme des système de sécurité qui empêchent ça.

  5. #45
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Ben oui on le sait ça
    Pour ça que le code sur ces deux plateforme passe par L'OS est non par le hardware

  6. #46
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Novembre 2015
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2015
    Messages : 30
    Points : 23
    Points
    23
    Par défaut
    J'ai quand même un deuxième disque dur avec le vieux coucou XP 32 pour pouvoir lancer les COM et les anciens jeux
    Mais je vais finir par aller sur Linux, visiblement t'as pas l'air d'avoir de problème avec ça.
    A moins qu'il y ait une solution miraculeuse.

  7. #47
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 433
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 433
    Points : 43 062
    Points
    43 062
    Par défaut
    Il faudrait utiliser les fonctions de l'API pour afficher un message.
    oui, car sous Windows, aucun accès direct au matériel.

    Donc 2 facons de faire - exemple pour le fameux Hello World :

    Soit tu utilises la libc par le biais de MinGW avec sa fonction printf (exemple dans mon lien post #39 ou 40), soit tu utilises les API Windows avec notamment MessageBox qui affiche un message dans une boite de dialogue comme ici :
    https://0x62626262.wordpress.com/201...sembly-part-1/

    Dans l'exemple Windows fourni par Kannagi post #41, en gros on écrit Hello world comme si on écrivait dans un fichier (stdout), ce que fait la fonction printf en tache de fond. Mais la solution printf reste plus simple.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  8. #48
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Novembre 2015
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2015
    Messages : 30
    Points : 23
    Points
    23
    Par défaut
    Je pense qu'on a terminé tout le sujet.
    Merci pour m'avoir aidé

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 3 PremièrePremière 123

Discussions similaires

  1. Réponses: 12
    Dernier message: 30/05/2015, 18h33
  2. Unity 4.3 intègre un moteur 2D et tous les outils pour faire un jeu 2D
    Par LittleWhite dans le forum Développement 2D, 3D et Jeux
    Réponses: 8
    Dernier message: 12/11/2013, 15h42
  3. Réponses: 10
    Dernier message: 16/04/2013, 11h00
  4. les outils pour developper une platforme de jeux 3D
    Par lordsaka dans le forum Linux
    Réponses: 5
    Dernier message: 05/01/2007, 22h47

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