Assembleur: "Erreur de segmentation"
zatox
Messages postés
663
Statut
Membre
-
zatox Messages postés 663 Statut Membre -
zatox Messages postés 663 Statut Membre -
Bonjour, je débute en assembleur, je suis sous Linux et j'utilise pour compiler NASM.
Après avoir compilé et linké, à l'exécution j'ai le message: "Erreur de segmentation"
Voici mon code:
section .text
global _start
_start:
mov ax, cs
mov ds, ax
mov esi, msg ; Avec nasm => "mov si, msg"
boucle:
mov al, [esi] ; [ds:si] => al
inc esi ; si = si + 1
cmp al, 0 ; Si AL = 0
je fin ; Alors fin
mov ah, 0eh ; Sinon ecrire le caractère
mov bx, 07h ; en gris sur noir
int 10h
jmp boucle
fin: ret
msg db 'Hello World !!!',0
Si quelqu'un peut me dire pourquoi j'ai ce message, merci pour vos réponses.
Je dois m'absenter quelques jours je reprendrai le fil à mon retour.
Après avoir compilé et linké, à l'exécution j'ai le message: "Erreur de segmentation"
Voici mon code:
section .text
global _start
_start:
mov ax, cs
mov ds, ax
mov esi, msg ; Avec nasm => "mov si, msg"
boucle:
mov al, [esi] ; [ds:si] => al
inc esi ; si = si + 1
cmp al, 0 ; Si AL = 0
je fin ; Alors fin
mov ah, 0eh ; Sinon ecrire le caractère
mov bx, 07h ; en gris sur noir
int 10h
jmp boucle
fin: ret
msg db 'Hello World !!!',0
Si quelqu'un peut me dire pourquoi j'ai ce message, merci pour vos réponses.
Je dois m'absenter quelques jours je reprendrai le fil à mon retour.
A voir également:
- Assembleur: "Erreur de segmentation"
- Logiciel assembleur - Télécharger - Édition & Programmation
- Assembleur pdf - Guide
- Assembleur - Forum Programmation
- Assembleur pc gamer ✓ - Forum Études / Formation High-Tech
- Problème assembleur - Forum Assembleur
3 réponses
A vue de nez, tu dois mettre fin au programme dos avec la fonction 4Ch de l'interruption logicielle 21h.
Regarde ici:http://spike.scu.edu.au/~barry/interrupts.html#ah4c
Tu dois également définir le point d'entrée (je ne sais plus comment on fait cela)
Regarde ici:http://spike.scu.edu.au/~barry/interrupts.html#ah4c
Tu dois également définir le point d'entrée (je ne sais plus comment on fait cela)
Bonsoir jisisv merci pour ta réponse, le problème, comme je le dis au début, je ne suis pas sous dos, je travaille sous linux, donc pour l'interruption 21h je ne suis pas certain d'être concerné, mais bon je vais essayer de voir ce que tu me dis, quand au pount d'entrée je crois bien que c'est le _start: non ?!!!
Bon si vous avez des idées merci de me les communiquer.
Bon si vous avez des idées merci de me les communiquer.
L'interruption 10h est liée au BIOS . Elle ne te servira pas plus sous Linux.
Par contre tu pourrais écrire un "hello world" minimal en C et l''assembler (avec gcc -S)
et examiner le code assembleur obtenu
Essaye par exemple d'ouvrir /dev/tty et d'y écrire du texte.
Le linker s'occupe du ménage.
essaye par exemple l'équivalent de
Par contre tu pourrais écrire un "hello world" minimal en C et l''assembler (avec gcc -S)
et examiner le code assembleur obtenu
Essaye par exemple d'ouvrir /dev/tty et d'y écrire du texte.
Le linker s'occupe du ménage.
essaye par exemple l'équivalent de
johand@osiris: ~ $ echo Hello > /dev/tty Helloen C. Tu auras une comunication de moyen niveau avec la console.
Essaye quelque chose du genre:
johand@osiris: ~/src/CCM/asm $ cat hellotty.c
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
const char *MESSAGE = "Hello tty\n";
int main(int argc, char *argv[])
{
// le file descriptor 0 est stdout
write(0, MESSAGE, strlen(MESSAGE));
return(EXIT_SUCCESS);
}Compile avec johand@osiris: ~/src/CCM/asm $ gcc -Wall -S -o hellotty.S hellotty.c et examine le code assembleur généré.
Bonjour jisisv, excuses le retard, mais j'ai dû m'absenter un certain temps.
Merci pour ta réponse, effectivement c'est une bonne façon pour avoir le code assembleur généré.
Dans le même ordre d'idée, il y a peut-être une syntaxe permettant d'obtenir non plus le code assembleur généré mais le code machine ?!!!! est-ce possible ? si oui merci de m'indiquer la syntaxe.
Merci pour ta réponse, effectivement c'est une bonne façon pour avoir le code assembleur généré.
Dans le même ordre d'idée, il y a peut-être une syntaxe permettant d'obtenir non plus le code assembleur généré mais le code machine ?!!!! est-ce possible ? si oui merci de m'indiquer la syntaxe.