assembleur

Voir le sujet précédent Voir le sujet suivant Aller en bas

assembleur

Message  didi le Mer 11 Fév 2009, 22:18

Verifier qu'un nombre se trouve dans un intervalle ferm
; Toutes les valeurs sont des nombres non signes.





;====================================================================
extern printd
global main

;===============================
section .data
;===============================

val1 DD 8963,243,635,9376,5637,-7553,15
val2 DD val2-val1 ; adresse de val2 - adresse de t = taille de val1 en bytes
borneif DD -40000 ; borne inferieur doit etre inferieur ou egale
bornesup DD +20000 ; a borne suerieur

;===============================
section.data
;===============================
main :
MOV ESI,val1 ; ESI contient l'address serie de la serie de val
MOV EDI,6 ; le compteur N-1

interval: MOV EAX,[ESI] ; on compare si le nombre est dans l'intervalle
MOV EBX,[borneif]
MOV ECX,[bornesup]
CMP EAX,EBX
JL taille
CMP EAX,ECX
JG taille
PUSH EAX
CALL printd

suit: ADD ESI,4
JMP interval ; recommence
taille: DEC EDI ; on regarde si on depasse le tableau
CMP EDI,0
JG suit

MOV eax,1
MOV ebx,0
INT 0x80
; ==========================



Mais ça donne le resultat

00002303 +8963
000000F3 +243
0000027B +635
000024A0 +9376
00001605 +5637
FFFFE27F +4294959743 -7553
0000000F +15
0000001C +28
FFFF63C0 +4294927296 -40000
00004E20 +20000


quel qu'un peut m'aider ??

didi

Nombre de messages : 215
Prénom : Dinesh
Statut : Smile
Date d'inscription : 21/01/2009

Revenir en haut Aller en bas

Re: assembleur

Message  DeS le Mer 11 Fév 2009, 22:26

Bonsoir,
une balise code aurai été plus pratique!

ensuite quand je lis dans ce que tu as mis au début:

Verifier qu'un nombre se trouve dans un intervalle ferm
; Toutes les valeurs sont des nombres non signes.

or je vois

Code:
val1 DD 8963,243,635,9376,5637,[b]-7553[/b],15
incohérence?? Suspect

ensuite pourquoi crée tu un val2 si c'est pour ne pas l'utiliser?
tu voulais surement l'utiliser dans ton??
Code:
Mov Edi,6

Aussi un autre truc quel est le résultat voulu? car donner uniquement l'affichage sans dire ce qui ne conviens pas ce n'est pas facile a deviner..

DeS

Nombre de messages : 324
Age : 27
Prénom : Denis
Statut : etd 2eme gestion
Localisation : Rebecq(village paumé où brouttent les vaches)
Date d'inscription : 15/10/2007

Revenir en haut Aller en bas

Re: assembleur

Message  didi le Mer 11 Fév 2009, 22:48

DeS a écrit:Bonsoir,
une balise code aurai été plus pratique!

ensuite quand je lis dans ce que tu as mis au début:

Verifier qu'un nombre se trouve dans un intervalle ferm
; Toutes les valeurs sont des nombres non signes.

or je vois

Code:
val1 DD 8963,243,635,9376,5637,[b]-7553[/b],15
incohérence?? Suspect

ensuite pourquoi crée tu un val2 si c'est pour ne pas l'utiliser?
tu voulais surement l'utiliser dans ton??
Code:
Mov Edi,6

Aussi un autre truc quel est le résultat voulu? car donner uniquement l'affichage sans dire ce qui ne conviens pas ce n'est pas facile a deviner..








enfait dans ce code il y avait 2 partie (val2) c'était un petite de
2em partie ça marche bien ( car j'ai déjà testé )
dans le 1 er partie que j'ai eu une problème

je ne sais pas comment utiliser le balise code
Crying or Very sad

didi

Nombre de messages : 215
Prénom : Dinesh
Statut : Smile
Date d'inscription : 21/01/2009

Revenir en haut Aller en bas

Re: assembleur

Message  Anthoblack le Mer 11 Fév 2009, 23:03

didi a écrit:je ne sais pas comment utiliser le balise code
Crying or Very sad
Tu sais utiliser "citer" ? Et bien c'est juste le petit bouton à droite dans "poster une réponse", très cher... alien

Anthoblack

Nombre de messages : 764
Age : 28
Prénom : Anthony
Statut : Ex-étudiant
Localisation : Bruxelles
Date d'inscription : 11/03/2008

Revenir en haut Aller en bas

Re: assembleur

Message  didi le Mer 11 Fév 2009, 23:36

Anthoblack a écrit:
didi a écrit:je ne sais pas comment utiliser le balise code
Crying or Very sad
Tu sais utiliser "citer" ? Et bien c'est juste le petit bouton à droite dans "poster une réponse", très cher... alien


ok j'assai

Code:
extern printd
global main

;===============================
        section  .data
;===============================

val1            DD      68962,243,635,9376,5637,-7553,15
borneif        DD      -40000          ; borne inferieur doit etre inferieur ou egale
bornesup        DD      +20000          ; a borne suerieur

;===============================
        section.data
;===============================
main :
                MOV    ESI,val1                ; ESI contient l'address serie de la serie de val
                MOV    EDI,6                  ; et donc l'address du premier nombre

interval:      MOV        EAX,[ESI]            ; on compare si le nombre est dans l'intervalle       
                MOV        EBX,[borneif]
                CMP        EAX,EBX
                JL        taille
                MOV        EBX,[bornesup]
                CMP        EAX,EBX
                JG        taille
                PUSH      EAX
                CALL      printd

suit:          ADD  ESI,4
                JMP  interval

taille:        DEC    EDI
                  CMP    EDI,0
                  JG      suit

                MOV    eax,1
                MOV    ebx,0
                INT    0x80
; ==========================


et maintenant dans ce code
je voulais seulment afficher les valeurs entre -40000 et + 20000
mais j'ai eu le resultat comme
000000F3 +243
0000027B +635
000024A0 +9376
00001605 +5637
FFFFE27F +4294959743 -7553
0000000F +15
FFFF63C0 +4294927296 -40000
00004E20 +20000

pourquoi ce 2 valeurs ??

FFFF63C0 +4294927296 -40000
00004E20 +20000

didi

Nombre de messages : 215
Prénom : Dinesh
Statut : Smile
Date d'inscription : 21/01/2009

Revenir en haut Aller en bas

Re: assembleur

Message  nvs le Jeu 12 Fév 2009, 00:30

la raison pour laquelle les valeurs -40000 et 20000 sont affichées, c'est parce que dans tes tests tu écris JL et JG et non JLE et JGE, donc tu autorises l'affichage de ces valeurs puisque tu ne sautes pas à taille quand elles surviennent. ce qui m'étonne moi, c'est qu'aucune valeur étrange (c.-à-d. n'apparaissant pas dans ton code source) n'apparaît ! note en effet que tu ne décrémentes ton compteur de boucle (edi) que lorsque tu tombes sur une valeur hors bornes. or, dans tes données, une seule valeur de ce type apparaît (68962). donc, après l'affichage de +20000, edi vaut toujours 5. j'en conclus (et ald a confirmé) que suite à cette valeur, traînent en mémoire des motifs binaires qui, lorsqu'on les interprète comme 5 doubles mots signés consécutifs, sont hors bornes. elles amènent edi à zéro et ton programme quitte proprement.

pour y voir plus clair, je te conseille d'utiliser ald. et d'essayer d'écrire le moins de sauts possibles, car ce n'est pas toujours facile à suivre Smile





_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: assembleur

Message  Contenu sponsorisé Aujourd'hui à 10:50


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum