2011-04-09 8 views
7

Je continue d'avoir un problème de débordement d'entier et je n'ai aucune idée de la façon de le résoudre. Quelqu'un peut-il m'aider? EDX conatins 181 et EAX contient 174Entier Problème de dépassement de capacité

 xor eax,edx  
     mov edx,2 
     div edx 
+0

Plus d'informations nécessaires: par exemple, l'architecture cible, version assembleur. – iehrlich

+0

@suddnely_me architecture cible? – user700176

+0

Meant version de l'assembleur OFC> _ < – iehrlich

Répondre

6

En supposant que vous parlez x86, div edx ne fait pas vraiment de sens - un div de 32 bits divise edx: eax par le registre cible spécifié. Heureusement, pour diviser par 2, vous n'avez pas vraiment besoin d'utiliser div du tout.

mov eax, 174 
mov edx, 181 

xor eax, edx 
shr eax, 1 

Si vous insistez sur l'utilisation d'un div pour une raison quelconque, vous souhaitez utiliser un autre registre. Notez que le x86 attend le résultat de la division pour tenir dans un registre, de sorte que vous aurez besoin à zéro EDX avant la division:

mov eax, 174 
mov edx, 181 

xor eax, edx 
xor edx, edx 
mov ebx, 2 
div ebx 
+0

un autre grand :) – Spyros

+0

merci, fonctionne maintenant un peu :) – user700176

4

Lors de la division à l'aide d'un registre 32 bits, le dividende est edx:eax. Depuis EAX est à l'origine 174 et EDX est à l'origine 181, voici ce qui se passe:

  1. EAX et EDX sont XOR, le résultat étant stocké dans eax. eax est maintenant 27
  2. 2 est stocké dans edx
  3. edx:eax est divisé par edx. Cela signifie que 0x20000001B est divisé par 0x2. Le résultat de cette opération est 0x10000000D. Le processeur tente de stocker cette valeur dans eax, avec le reste, 1, dans edx, mais cela ne correspond pas car le 1 est dans le 33ème bit. Par conséquent, vous obtenez un débordement.

Vous pouvez résoudre ce problème en utilisant un registre différent de celui EDX pour diviser, en veillant à zéro EDX:

xor eax,edx 
mov ecx,2 
xor edx,edx ; Zero edx 
div ecx 
; eax contains 0xD, edx contains 1 
+0

+1 grande explication – Spyros

Questions connexes