Programme en assembleur
courbet-123
Messages postés
4
Statut
Membre
-
courbet-123 -
courbet-123 -
bonjour à tous; je suis débutante en assembleur et je ne le maitrissse pas trés bien alors je bloque sur un exercice que j'ai trouvé dans un annale donc si vous pouvez m'éclairer svp. voilà l'énoncer :
Dans une machine à deux adresses qui ne possède pas d'opérateur de division, écrire un programme assembleur qui calcule la moyenne de deux nombres X et Y et si le résultat est nul, X sera incrémenté jusqu'à une moyennne non nulle.
je sais que le calcule de la moyenne se fait de la sorte: (x+y) / 2 mais ils nous on dit qu'il n'y avait pas d'opérateur de division, donc comment faire??????.
Merci de me répondre.
Dans une machine à deux adresses qui ne possède pas d'opérateur de division, écrire un programme assembleur qui calcule la moyenne de deux nombres X et Y et si le résultat est nul, X sera incrémenté jusqu'à une moyennne non nulle.
je sais que le calcule de la moyenne se fait de la sorte: (x+y) / 2 mais ils nous on dit qu'il n'y avait pas d'opérateur de division, donc comment faire??????.
Merci de me répondre.
A voir également:
- Programme en assembleur
- Programme demarrage windows - Guide
- Mettre en veille un programme - Guide
- Programme word gratuit - Guide
- Message programmé - Guide
- Desinstaller un programme - Guide
2 réponses
Il n'y a pas d'opérateurs de divisions, mais il y a des opérateurs de rotation. Et comme une rotation vers la droite d'un cran, revient à le diviser par deux. Tu n'as plus de problèmes.
non il faut pas utilliser de division il suffit d'utiliser la commande SHL ou SHR pour shift left et shift right mais utilise le shift right (SHR) pour diviser par 2 donc tu décale tous tes bits d'une position
la syntaxe : SHR registre, 1
la syntaxe : SHR registre, 1
Voilà j'ai essayé de le faire, est-ce-qu'il est juste sinon veuillez me le corriger svp :
0000 move ax,x ; [I] (mettre x dans un registre)[/I]
0001 move bx,y ; [I] (mettre y dans un registre)[/I]
0002 add ax, bx ; [I]additionner ax et bx[/I]
0003 als ax, 2 ; [I]déviser le résultat (ax + bx) par 2[/I]
0004 cmp ax, 0 ; [I] comparer si le résultat est différent de zéro[/I]
0005 inc x ; [I]si le résultat est égale à zéro on incrémante x[/I]
0006 bgt 0002 ; [I]si le résultat est supérieur à 0 faire le branchement [/I]
autre problème :
soit le fragment de programme en langage d'assemblage avec N une adresse mémoire :
FF00 load N
FF03 dec N [I]décrémentation[/I]
FF06 eqz FF0F [I]branchement coditionnel à zéro[/I]
FF09 mul N [I]multiplication [/I]
FF0C jmp FF03 [I]branchement inconditionnel [/I]
FF0F END
on nous demande: 1) que fait ce programme?
2) Dérouler en détail l'execution des 3 premières instructions.
solution:
1) j'ai essayé de donner une valeur à N pour voir ce que fait ce programme exemple que je donne: [N]=3 ( sinon si vous connaissez une méthode pour savoir le rôle d'un programme veuillez me l'expliquer )
mais j'ai trouvé les nombres suivant:
pour FF00 ----- [N]=3
pour FF03 ----- [N]=2
pour FF06 ----- [N] <> 0
pour FF09 ----- [N] := N*N = 2*2 =4
pour FF0C------ [N]= 1
pour FF06 ----- [N] <> 0
pour FF09 ----- [N] := N*N = 1*1 =1
pour FF0C ----- [N]= 0
pour FF06 ----- END
mais je ne vois toujours pas le rôle de ce programme; veuillez m'expliquez.
2) les trois premières instructions sont de FF00 jusqu'à FF06. n'est ce pas ?
MERCI .
0000 move ax,x ; [I] (mettre x dans un registre)[/I]
0001 move bx,y ; [I] (mettre y dans un registre)[/I]
0002 add ax, bx ; [I]additionner ax et bx[/I]
0003 als ax, 2 ; [I]déviser le résultat (ax + bx) par 2[/I]
0004 cmp ax, 0 ; [I] comparer si le résultat est différent de zéro[/I]
0005 inc x ; [I]si le résultat est égale à zéro on incrémante x[/I]
0006 bgt 0002 ; [I]si le résultat est supérieur à 0 faire le branchement [/I]
autre problème :
soit le fragment de programme en langage d'assemblage avec N une adresse mémoire :
FF00 load N
FF03 dec N [I]décrémentation[/I]
FF06 eqz FF0F [I]branchement coditionnel à zéro[/I]
FF09 mul N [I]multiplication [/I]
FF0C jmp FF03 [I]branchement inconditionnel [/I]
FF0F END
on nous demande: 1) que fait ce programme?
2) Dérouler en détail l'execution des 3 premières instructions.
solution:
1) j'ai essayé de donner une valeur à N pour voir ce que fait ce programme exemple que je donne: [N]=3 ( sinon si vous connaissez une méthode pour savoir le rôle d'un programme veuillez me l'expliquer )
mais j'ai trouvé les nombres suivant:
pour FF00 ----- [N]=3
pour FF03 ----- [N]=2
pour FF06 ----- [N] <> 0
pour FF09 ----- [N] := N*N = 2*2 =4
pour FF0C------ [N]= 1
pour FF06 ----- [N] <> 0
pour FF09 ----- [N] := N*N = 1*1 =1
pour FF0C ----- [N]= 0
pour FF06 ----- END
mais je ne vois toujours pas le rôle de ce programme; veuillez m'expliquez.
2) les trois premières instructions sont de FF00 jusqu'à FF06. n'est ce pas ?
MERCI .