Cherchez l'erreur

neo1012 Messages postés 15 Date d'inscription dimanche 3 juin 2007 Statut Membre Dernière intervention 20 février 2009 - 13 nov. 2007 à 13:39
neo1012 Messages postés 15 Date d'inscription dimanche 3 juin 2007 Statut Membre Dernière intervention 20 février 2009 - 13 nov. 2007 à 15:34
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

_dune2_ Messages postés 141 Date d'inscription mercredi 19 juillet 2006 Statut Membre Dernière intervention 20 avril 2011
13 nov. 2007 à 14:54
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 ...
0
neo1012 Messages postés 15 Date d'inscription dimanche 3 juin 2007 Statut Membre Dernière intervention 20 février 2009
13 nov. 2007 à 14:59
(pour le formatage du code je savais pas que ca allait le mettre comme ca) alors je fais quoi moi ?
0
_dune2_ Messages postés 141 Date d'inscription mercredi 19 juillet 2006 Statut Membre Dernière intervention 20 avril 2011
13 nov. 2007 à 15:22
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 ...
0
neo1012 Messages postés 15 Date d'inscription dimanche 3 juin 2007 Statut Membre Dernière intervention 20 février 2009
13 nov. 2007 à 15:34
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
0
Rejoignez-nous