![]() |
| Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé. | |||||||
|
|||||||
| Assembleur Forum d'entraide Assembleur. Avant de poster -> F.A.Q Assembleur Tutoriels Assembleur |
![]() |
|
|
Outils de la discussion |
|
|
#1 (permalink) |
|
Membre habitué
![]() Date d'inscription: novembre 2006
Localisation: Lyon
Âge: 25
Messages: 154
|
Bonjour !
j essaye d'assembler un hello world trouve ici http://www.tldp.org/HOWTO/Assembly-HOWTO/hello.html je suis la procédure a la lettre (page suivante du tuto, Building an executable) L exécutable est créé, mais quand je le lance ca plante (fenêtre "hello a rencontre un probleme et doit fermer...). Cela plante peut être car je suis sous Windows avec MinGW pour utiliser GCC et as et que les interruptions ne sont donc plus bonne ? Avez vous une solution ou un autre code ?
__________________
101010 |
|
|
|
|
|
#2 (permalink) | |
|
Membre expérimenté
![]() Date d'inscription: septembre 2007
Localisation: Évry
Âge: 32
Messages: 544
|
Citation:
Code :
mov ebx,0 ;first syscall argument: exit code
mov eax,1 ;system call number (sys_exit)
int 0x80 ;call kernel
|
|
|
|
|
|
|
#3 (permalink) |
|
Membre habitué
![]() Date d'inscription: novembre 2006
Localisation: Lyon
Âge: 25
Messages: 154
|
C'est ce que je pensais... je suis débutant en assembleur (je viens du C/C++).
- Que dois je faire quand je développe sous Windows ? existe il d'autres tables d'interuption (spécifique a DOS et/ou NT ? ). -J imagine que le code ne pourra pas etre portable si j utilise les interuptions. - J'ai essaye d'autres méthodes comme passer par du C mais je trouve ca plus lourd a mettre en place que les interruptions, y a t il d autres voie ? J ai trouve de la doc, je doit utiliser l interupt 21,2 pour afficher tu texte... mais je doit traduire la syntaxe intel en syntaxe AT&T, il doit etre plus courant d utiliser la syntaxe intel pour programmer sous DOS/NT ?
__________________
101010 Dernière modification par TheDrev ; 25/08/2008 à 18h32 |
|
|
|
|
|
#4 (permalink) | |
|
Membre expérimenté
![]() Date d'inscription: septembre 2007
Localisation: Évry
Âge: 32
Messages: 544
|
Citation:
Code :
asm (".intel_syntax noprefix");//passage en syntaxe intel
asm (".att_syntax noprefix");//passage en syntaxe at & t
Ensuite, les interruptions en soi ne sont pas des appels systèmes. Elles sont utilisées en tant que telles parce que c'est le moyen le plus conçis d'appeler une même routine, étant donné qu'elles sont invoquées très fréquemment. Elles sont d'autres part un moyen simple pour le programmeur de franchir la barrière entre segment privilégiés et non-privilégiés (typiquement, le passage en mode noyau sous Linux) lorsque tu tournes en mode protégé (soit pour ainsi dire tout le temps depuis le milieu des années 90). Enfin, il est assez rare que tu fasses appel en temps normal aux appels système directement. La plupart du temps, tu t'appuieras sur les bibliothèques, fussent-elles standard ou non, proposées par le système. Généralement écrites en C, tu passes habituellement les arguments dans la pile et tu appelles la fonction avec un simple call, puisque la routine concernée se trouve dans l'espace de ton programme. Essaie de faire un printf("Bonjour") en C et de compiler avec l'option -S sous GCC. Tu obtiendras le source assembleur de l'exécutable produit et tu verras ainsi comme il fonctionne. |
|
|
|
|
|
|
#5 (permalink) | |
|
Membre habitué
![]() Date d'inscription: mai 2008
Localisation: Paris
Messages: 157
|
Citation:
Merci pour l'astuce Obsidian !!! Je ne connaissais pas l'existence de cette directive. Si j'avais su... Bon, allez, je vais retourner me coucher en me répétant mentalement : rtfm, rtfm, rtfm...
__________________
Programmer son propre noyau, une introduction avec Pépin |
|
|
|
|
|
|
#7 (permalink) |
|
Membre habitué
![]() Date d'inscription: mai 2008
Localisation: Paris
Messages: 157
|
Oui, mais pour utiliser inline dans gcc, je ne pense pas qu'on puisse... ou alors j'ai encore loupé quelque chose
__________________
Programmer son propre noyau, une introduction avec Pépin |
|
|
|
|
|
#8 (permalink) |
|
Membre expérimenté
![]() Date d'inscription: septembre 2007
Localisation: Évry
Âge: 32
Messages: 544
|
« inline », ça veut dire « inséré entre les lignes ». C'est un adjectif. Donc, selon le contexte, c'est soit de l'assembleur au milieu du code en C, soit une fonction directement insérée au milieu du reste plutôt qu'appelée avec un saut vers son emplacement.
|
|
|
|
|
|
#9 (permalink) |
|
Membre habitué
![]() Date d'inscription: mai 2008
Localisation: Paris
Messages: 157
|
Oui, euh.... pourquoi cette précision ?
__________________
Programmer son propre noyau, une introduction avec Pépin |
|
|
|
|
|
#11 (permalink) |
|
Membre habitué
![]() Date d'inscription: mai 2008
Localisation: Paris
Messages: 157
|
D'accord, je crois que je comprends mieux le quiproquo.
__________________
Programmer son propre noyau, une introduction avec Pépin |
|
|
|
|
|
#12 (permalink) |
|
Membre habitué
![]() Date d'inscription: novembre 2006
Localisation: Lyon
Âge: 25
Messages: 154
|
Re,
J'apprend toujours et j ai compris mon erreur avec les interruptions J essaye d'afficher un hello world avec nasm et alink, le code asm est Code :
global start section .text start: mov edx,msg mov ah,9 int 21h mov ah,4Ch int 21h section .data msg db 'hello', '$' nasm -f coff first.asm alink first.o -o first.exe ALINK v1.6 (C) Copyright 1998-9 Anthony A.J. Williams. All Rights Reserved Loading file first.o matched Externs matched ComDefs Warning, no entry point specified Warning - no stack first.exe me donne un bip suivit de : ▬♦V☺▬♦▬♦☺☺☺ ☻***************?♣Þ*(¶ ↑ ↑**** ♣ ═!╦ ║► ┤ ═!┤L═! hello Qu es ce qui ne va pas avec ce code ou mon assembleur, linkeur ? C'est peut être en rapport avec les warning du linker...
__________________
101010 Dernière modification par TheDrev ; 27/08/2008 à 15h52 |
|
|
|
|
|
#13 (permalink) |
|
Membre expérimenté
![]() Date d'inscription: septembre 2007
Localisation: Évry
Âge: 32
Messages: 544
|
Apparement, l'interruption commence à lire ton texte en mémoire bien avant l'emplacement où il débute réellement. Vérifie que ton segment de données débute bien au bon endroit.
|
|
|
|
|
|
#14 (permalink) |
|
Membre éprouvé
![]() Date d'inscription: juillet 2007
Localisation: Belgique
Messages: 410
|
Ça marchera peut-être mieux en disant à NASM de générer du code 16 bits :
Code :
BITS 16 global start section .text start: mov edx,msg mov ah,9 int 21h mov ah,4Ch int 21h section .data msg db 'hello', '$'
__________________
:wq |
|
|
|
|
![]() |
![]() |
||
Hello world avec GAS sous mingw
|
||
| Outils de la discussion | |
|
|