Problème en assembleur.

Bonjour, chers internautes
s'il vous plait j'ai un problème en fait j'ai un tp ki me fracasse.
il s'agit d'un examen à remettre avant vendredi.

soit le programme assembleur ci dessous.

include emu8086.inc
name "som" ; outpu the file name ( max 8 chars for DOS compatibility )
; add your code here
vecteur db 5,4,5,2,1
m db 0
mov ax,0
mov ax,0
mov bl,0
re:
add al, vecteur[bx]
inc bl
cmp bx,5
jne re
print ' La Somme Est: '
call print_num
div bl
mov dx,ax
mov ax,0
mov al,dl
print ' La Moyenne Est: '
call_print_num
define_scan_num
define_print_num
define_print_num_uns
define_print_string
define_pthis.

ce programme calcule la somme et la moyenne des éléments du tableau ' vecteur '.

il est question de s'inspirer de ce programme ( surtout des accès aux éléments du vecteur ) pour ECRIRE UN PROGRAMME QUI TRIE PLUTOT LE VECTEUR DANS L'ORDRE CROISSANT.
et d'ECRIRE UN AUTRE PROGRAMMA QUI LIT UNE VALEUR ET VERIFIE S'IL EST DANS LE TABLEAU ' VECTEUR '.
Configuration: Windows XP
Internet Explorer 6.0

3 réponses

  1. Modérateur
    Et si tu cherches comment trouver un caractère dans un tableau, tu peux regarder ça (bon c'est prévu pour nasm mais bon...):
    http://www.commentcamarche.net/faq/sujet 10330 exercice assembleur x86 occurence d un caractere
    0
    1. ok merci je vais essayé. je craint que ca marche pas parceque j'utilise l'emul 8086. qu'à celà ne tienne peut tu quand meme m'envoyer le ode source?? pour resoudre ce dernier problème. je suis à J-1.
      merci et à tres bientot.
      0
      1. Modérateur
        Bon j'ai vaguement transformé ton code pour marche avec nasm.
        J'ai programmé la fonction print_num, j'ai parfois utilisé les registres en 32 bits au lieu de 16, sinon ça posait des problèmes d'adressages. Mais le fond n'a pas beaucoup changé:
        extern printf
        
        
        section .data
        	
        	vecteur db 5,4,5,2,1
        	f db '%02x',0xa,0x0
        section .bss
        	j resd 1
        	i resd 1
        	m resd 1
        
        section .text
        	global main
        
        main:
        		mov ax,0
        		mov ebx,0
        		mov dx,0
        		mov [i], dword 0
        	rep1:
        		cmp bx,4
        		je near conclusion
        		mov dl,[vecteur + ebx]
        		mov [j],bx
        	rep2:
        		cmp bx,5
        		je fpour
        		cmp [vecteur + ebx],dl
        		jl faire
        		jmp finsi
        	faire:
        		mov dl,[vecteur + ebx]
        		mov [i],bx
        	finsi:
        		inc bx
        		jmp rep2
        	fpour:
        		mov bx,[j]
        		cmp [i], byte 0
        		jne do
        		inc bx
        		jmp rep1
        	do:
        		mov [j],bx
        		mov bx,[i]
        		mov cl,[vecteur + ebx]
        		mov bx,[j]
        		mov cl,[vecteur + ebx]
        		mov bx,[i]
        		mov [vecteur + ebx],cl
        		mov bx,[j]
        		mov [vecteur + ebx],dl
        		inc bx
        		jmp rep1
        	conclusion:
        		mov bx,0
        	rem:
        		cmp bx,5
        		je fin
        		mov al,[vecteur + ebx]
        		call print_num
        		inc bx
        		jmp rem
        fin: 
        		ret
        
        print_num:
        		pushad
        		movzx eax, al
        		push eax
        		push f
        		call printf
        		add esp, 8
        		popad
        		ret
        
        
        		
        0
      2. @kilianmerci etant donné que je suis pas à la mailson presentement, je testerai ca des que je serai rentrer et je vais me debrouiller à adapter avec emu8086.
        meri pour tout. bonne soirée.
        j'ai deposé d'autres requetes afin de savoir comment creer une interface graphique en c++.
        stp peut tu m'aider à ce sujet??
        0
      3. Modérateur
        @zeusteinJe vais regarder :-)
        Et oublie pas mon message d'en dessous qui explique ce qu'il faut faire pour ton deuxième exercice :-)
        0
    2. Modérateur
      Salut,

      Tu as déjà une piste, ya un truc spécifique que tu arrives pas à faire?
      0
      1. bonjour kilian et je te remercie surtout de m'avoir repondu c'est tres gentil.

        en fait il est question de s'inspirer de ce programme ( surtout des accès aux éléments du vecteur ) pour ECRIRE UN PROGRAMME QUI TRIE PLUTOT LE VECTEUR DANS L'ORDRE CROISSANT.
        et d'ECRIRE UN AUTRE PROGRAMME QUI LIT UNE VALEUR ET VERIFIE S'IL EST DANS LE TABLEAU ' VECTEUR '.

        s'il te plait j'aimerai ke tu me donne les codes sources pour pouvoir resoudre ce problème.c'est un projet que je dois remettre vendredi matin.merci de ton soutien
        0
      2. Modérateur
        @zeusteinSi tu veux on peux essayer de le faire ensemble, tu as déjà essayé de faire quelque chose?
        0
      3. @kilianwi j'ai essayé avec le tri mais ca ne marche.j'ai pas le code source présentement avec moi parceque je suis pas chez moi mais je ferai l'effort de rentrer le chercher et de te le parvenir vu l'approche du delai ( je dois soumettre ce devoir pour vendredi le 11).
        j'aimerai donc stp que tu essais de corriger le code source que je t'enverrai en m'envoyant les codes sources du problème tel que tu le concois.
        merci et à tout à l'heure.
        meri bcp d'avance.
        0
      4. Modérateur
        @kilianCa marche. Au pire si je suis pas là ce soir, je suis là demain dans l'aprem.
        Et si tu mets ton code, mets le sur cette discussion et pas par message privée ;-)

        A bientôt!
        0
      5. @kilianJe suis allé et je suis deja là j'ai lu le message que t'as laissé je vais fair l'effort de redifuser le meme message dans le salon. voici donc le cod source:que j'ai fait.

        include emu8086.inc
        name "trivec"
        vecteur db 5,4,5,2,1
        i dw 0
        j dw ?
        m db ?
        mov ax,0
        mov bx,0
        mov dx,0
        rep1:
        cmp bx,4
        je conclusion
        mov dl,vecteur[bx]
        mov j,bx
        rep2:
        cmp bx,5
        je fpour
        cmp vecteur[bx],dl
        jl faire
        jmp finsi
        faire:
        mov dl,vecteur[bx]
        mov i,bx
        finsi:
        inc bx
        jmp rep2
        fpour:
        mov bx,j
        cmp i,0
        jne do
        inc bx
        jmp rep1
        do:
        mov j,bx
        mov bx,i
        mov cl,vecteur[bx]
        mov bx,j
        mov cl,vecteur[bx]
        mov bx,i
        mov vecteur[bx],cl
        mov bx,j
        mov vecteur[bx],dl
        inc bx
        jmp rep1
        conclusion:
        mov bx,0
        print 'le resutat est:'
        rem:
        cmp bx,5
        je fin
        mov al,vecteur[bx]
        call print_num
        inc bx
        jmp rem
        fin:
        define_scan_num
        define_print_num
        define_print_num_uns
        define_print_string
        define_pthis
        end


        et la deuxième ^préoccupation consiste à ECRIRE UN AUTRE PROGRAMME QUI LIT UNE VALEUR ET VERIFIE S'IL EST DANS LE TABLEAU ' VECTEUR '

        Merci bcp pour toute l'assistance que tu m'apporte. bonne soirée!
        0