Salut les utilisateurs du site Developpez.net :

je suis un débutant en assembleur 8086 16 bits, ça fait une journée que j'essaie de résoudre un problème d'inversion de tableau d'entiers.
J'ai écrit la solution suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
DIM EQU 5
.model small
.stack
.data 
vett dw 67,789,654,65,76  
a db ','
.code
.startup
        mov cx, DIM*2
        mov si, 0
cicle1: cmp cx,0
        je lol
        push vett[si]
        add si, 2
        dec cx
        jnz cicle1
 
lol:
        mov cx, DIM*2
        mov si, si
cicle2: cmp cx,0
        je  lol2
        pop vett[si]
        add si, 2
        dec  cx
        jnz cicle2
 lol2:
.exit
end
Sauf que quand j'ai vu la solution, j'étais proche, je les ai toutes les deux compilées avec une suite du programme qui affiche les valeur du tableau inversé ; ma solution n'a pas fonctionné, or la solution m'a paru bizarre : je vais écrire la solution que j'ai trouvée et qui a fonctionné :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
DIM EQU 7
.model small
.stack
.data
vett dw 423, 3191, 23, 11, -412, 3, 9
.code
.startup
mov cx, DIM
xor si, si
ciclo1: push vett[si]
add si, 2
dec cx
jnz ciclo1
mov cx, DIM
xor si, si
ciclo2: pop vett[si]
add si, 2
dec cx
jnz ciclo2
.exit
end
Tout d abord la solution a initié le CX par dim equ 7, l'initialisation du CXa été faite par 7 , dans tous les exercices que j'ai faits jusqu'à maintenant, j'ai toujours eu l'habitude de multiplier la valeur que je veux assigner à CX par 2 : mov CX,dim*2 ; la deuxième chose, j'initialise le SI par mov si,0, dans la solution l'initialisation du SI a été par un XOR si,si. La 3e chose qui m'a paru bizarre, dans le cycle il n'y a pas de comparaison du cx avec 0 (cmp cx,0)pour sortir du cycle, j'aimerais comprendre la fonction du XOR dans le programme, même si je sais qu'elle est égale à 1 , quand les 2 opérandes par exemple A e B sont différents, par exemple A=1, B=0 ou le contraire , dans les autres cas de (A=0 et B=0) et( A=1 et B=1) les valeurs de sortie de xor = 1 et j'aimerais savoir pourquoi dans les 2 cycles il n'y a pas de comparaison pour en sortir.

Merci d'avance