Comment utiliser les div instruction à trouver reste en x86 assemblée?
mov eax, 0
mov ebx, 0
mov edx, 0
mov ax, 31
mul cx
mov bx, 12
div bx
add bp, ax
mov eax, 0
mov ebx, 0
mov bp, bp
mov al, 7
div al
quelqu'un peut me dire quoi de mal avec la div al instruction dans ce bloc de code, donc, comme je suis de débogage chaque nombre de bp j'ai calculé, lorsque je divise par al il me donner 1 comme le reste, pourquoi est-ce arrivé?
le reste devrait être de magasin en arrière de registre ah
merci d'avance
édité code :
mov eax, 0
mov ebx, 0
mov edx, 0
mov ax, 31
mul cx
mov bx, 12
div bx
add bp, ax
mov eax, 0
mov ebx, 0
mov ax, bp
mov bl, 7
div bl
mov al, 0
mov reg, 0
serait mieux rédigé comme xor reg, reg
Comment, sans exiger
div
: stackoverflow.com/questions/8021772/... GCC 4.8 ne pas utiliser les div par défaut parce qu'il est lent: stackoverflow.com/questions/4361979/...OriginalL'auteur bluebk | 2013-05-06
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas utiliser
al
comme diviseur, parce que la commandediv
supposeax
être le dividende.Ceci est un exemple de division de l'
bp
par7
C'est 8 bits de la division, alors oui, le reste sera stocké dans
ah
. Le résultat est dansal
.De préciser: Si vous écrivez à
al
vous avez en partie remplacerax
!j'ai mis al à zéro et
où obtenez-vous débordement d'entier? vous ne devriez pas écrire quoi que ce soit al si vous souhaitez diviser bp par quelque chose, parce que vous écraserez ax (le dividende)
je suis entier plus de flux à la div bl instruction dans le code modifié
eh bien peut-être que c'est parce que votre résultat ne rentre pas dans
al
. Sibp
est quelque chose de plus grand que 0x700 vous obtiendrez le débordement d'entierOriginalL'auteur typ1232
édité code:
OriginalL'auteur bluebk