Cherchez l'erreur

Signaler
Messages postés
15
Date d'inscription
dimanche 3 juin 2007
Statut
Membre
Dernière intervention
20 février 2009
-
Messages postés
15
Date d'inscription
dimanche 3 juin 2007
Statut
Membre
Dernière intervention
20 février 2009
-
Salut,

J'ai commencé l'ASM il n'y a pas longtemps, et hier j'ai fait mom premier programme:

jmp string
code:
pop ecx
mov bl,1
mov dl,23
;mov al,4
int 0x80
dec bl
mov al,1
int 0x80
string:
jmp code
db 'bonjour tout le monde!',0

Et quand je l'assemble avec NASM, le prgm se lance et ca me met :
Processuer a rencontre un instruction non autorisé
CS:0000 IP:0077 OP:f0 37 050 13 02

Qu'est ce que ca veut dire et ou est l'eereur
?javascript:Insert_Emoticon('/imgs2/smile_big.gif');

4 réponses

Messages postés
141
Date d'inscription
mercredi 19 juillet 2006
Statut
Membre
Dernière intervention
20 avril 2011

Salut,

un code formaté devrait être un peu plus lisible non ?
du style :

    jmp string
code:
    pop ecx
    mov bl,1
    mov dl,23 ;
    mov al,4
    int 0x80
    dec bl
    mov al,1
    int 0x80
string:
    jmp code
    db 'bonjour tout le monde!',0

Erreur : CS:0000 IP:0077 OP:f0 37 050 13 02 -> instruction non autorisé
En effet :
   0:   f0 37                   lock aaa
   2:   50                      push eax
   3:   13 02                   adc  eax,[edx]

-> "lock aaa" n'est pas une instruction correcte ... mais il n'apparait pas dans ton code !!
Je pense donc que ton erreur ne vient pas de ce bout de code à proprement parler, mais de ce qu'il doit impacter (je parle entre autre du "pop ecx" et du fait que ton code boucle sans cesse "jmp code" et donc doit corrompre la pile).

Gentoo... que du bonheur ...
Messages postés
15
Date d'inscription
dimanche 3 juin 2007
Statut
Membre
Dernière intervention
20 février 2009

(pour le formatage du code je savais pas que ca allait le mettre comme ca) alors je fais quoi moi ?
Messages postés
141
Date d'inscription
mercredi 19 juillet 2006
Statut
Membre
Dernière intervention
20 avril 2011

ben heuu comment dire .. c'est ton code complet là ?
Si c'est le cas, il n'y a aucune référence à ta string ??
Et pourquoi tu fais un jump à "string" pour refaire un jump là où tu étais ?
Pourquoi tu utilises des registres 8 bits comme arguments à int 0x80, il serait plus judicieux d'utiliser des registres 32bits pour initialiser à 0 les poids forts de ces registres ?
Pourquoi ce "pop ecx" ?

Et si tu nous disais ce qu'est censé faire ton code ?

Ou alors j'essai de deviner ton code et je dirais que ton erreur est tout simplement le "jmp code" qui devrais être plutot "call code" de manière à pousser l'adresse de ta string dans la pile et ainsi la récupérer dans le registre ecx avec un "pop" ... ça me parait être la réponse la plus censé à ton problème .... (tout en initialisant tes registres en 32 bits) du style :

    jmp string
code:
    pop ecx
    mov ebx,1
    mov edx,23 ;
    mov eax,4
    int 0x80
    dec ebx
    mov eax,1
    int 0x80
string:
    call code
    db 'bonjour tout le monde!',0

J'ai tout suivi ? sinon soit plus claire dans ta requête en exprimant ton besoin de manière lisible et sans devinette ;)

Gentoo... que du bonheur ...
Messages postés
15
Date d'inscription
dimanche 3 juin 2007
Statut
Membre
Dernière intervention
20 février 2009

En fait j'ai recopié ca dans "coding school", un mag de programmation. ils font apparement plein de fautes mais bon...
Ce truc est censé afficher "bonjour tout le monde"

[Ou alors j'essai de deviner ton code et je dirais que ton erreur est tout simplement le "jmp code" qui devrais être plutot "call code" de manière à pousser l'adresse de ta string dans la pile et ainsi la récupérer dans le registre ecx avec un "pop" ... ça me parait être la réponse la plus censé à ton problème ....] >> C'est ca