WiebeN
Messages postés3Date d'inscriptionsamedi 22 novembre 2008StatutMembreDernière intervention25 novembre 2008
-
22 nov. 2008 à 20:19
WiebeN
Messages postés3Date d'inscriptionsamedi 22 novembre 2008StatutMembreDernière intervention25 novembre 2008
-
25 nov. 2008 à 13:07
Bonjour,
Je commence tout juste l'assembleur en cours. Je programme avec EMU8086 (émulateur pour processeur 8086) via Windows XP.
Mon problème est le suivant : j'aimerais faire une multiplication signée en donnant comme paramètres des nombres binaires cependant je n'obtiens pas le résultat voulu.
Prenons en exemple l'opération 15 * (-20) .
1) Je traduis en binaire :
*15 donne 01111
*(-20) en complément à 2: 101100
+20 est codé 010100
+ le complément à 1 donne 101011
+ en ajoutant 1 on obtient 101100
2)
Mon code ASM donne donc :
name "imul"
org 100h
mov al, 01111b
mov bx, 101100b
imul bx
ret
D'après un cours trouvé sur le net :
"IMUL Source :
<li>
Si Source est un octet : AL
est multiplié par Source et le résultat est
placé dans AX"
</li>Je devrais donc trouver le résultat -300 dans AX soit 12C et le FLAG SF à 1 ( si j'ai bien compris le fonctionnement de IMUL et le principe de SF)
Pourtant je trouve 294 dans AX ce qui veut dire que ce n'est pas -20 qui a été multiplié mais 44. Comment faire alors pour donner -20 je ne comprends pas bien... Notre professeur nous a pourtant dit qu'il fallait utilisé le complément à 2 !
De plus si je fais :
name "mul"
org 100h
mov al,15d
mov bx,-20d
imul bx
ret
J'obtiens un résultat encore plus extravagant... Pourriez vous me dire où je me plante?
Forthman
Messages postés23Date d'inscriptionsamedi 25 décembre 2004StatutMembreDernière intervention 9 janvier 2014 24 nov. 2008 à 07:05
Bonjour,
Tu as fait 2 erreurs.
La première : 20 est codé sur 8 bits donc 00010100 et -20 donne 11101100b
La seconde : tu utilises BX qui est un registre 16 bits donc la multiplication porte sur AX avec un contenu de AH inconnu
Je pense que tu vas pouvoir corriger ton code tout seul ;)
WiebeN
Messages postés3Date d'inscriptionsamedi 22 novembre 2008StatutMembreDernière intervention25 novembre 2008 25 nov. 2008 à 13:07
Ok, merci. Celà me donne bien FED4 qui retransmis en binaire est bien 300 en complément à 2.
C'était juste un petit exercice de fin de cours d'ASM que j'avais, je n'aime pas passer un exercice (surtout d'apparence si simple) alors que je ne l'ai pas réussi :p