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 :
[code]
name "imul"
org 100h
mov al, 01111b
mov bx, 101100b
imul bx
ret
[/code]
D'après un cours trouvé sur le net :
"
IMUL Source :
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 :
[code]
name "mul"
org 100h
mov al,15d
mov bx,-20d
imul bx
ret
[/code]
J'obtiens un résultat encore plus extravagant... Pourriez vous me dire où je me plante?
Merci à vous.