Sigo teniendo un problema de desbordamiento de enteros y no tengo ni idea de cómo resolverlo ¿Alguien puede ayudar? edx conatins 181 y eax contiene 174Problema de desbordamiento de enteros
xor eax,edx
mov edx,2
div edx
Sigo teniendo un problema de desbordamiento de enteros y no tengo ni idea de cómo resolverlo ¿Alguien puede ayudar? edx conatins 181 y eax contiene 174Problema de desbordamiento de enteros
xor eax,edx
mov edx,2
div edx
Suponiendo que estás hablando x86, div edx
no tiene mucho sentido - un div de 32 bits divide edx: eax por el registro de destino especificado. Afortunadamente, para dividir por 2, realmente no necesita usar div
en absoluto.
mov eax, 174
mov edx, 181
xor eax, edx
shr eax, 1
Si insiste en usar un div
por alguna razón, desea utilizar un registro diferente. Tenga en cuenta que el 86 espera que el resultado de la división para caber en un registro, por lo que tendrá a cero EDX antes de la división:
mov eax, 174
mov edx, 181
xor eax, edx
xor edx, edx
mov ebx, 2
div ebx
otra genial :) – Spyros
gracias, funciona ahora como :) – user700176
Al dividir el uso de un registro de 32 bits, el dividendo es edx:eax
. Desde eax es originalmente 174, y EDX es originalmente 181, esto es lo que sucede:
edx:eax
se divide por edx. Esto significa que 0x20000001B está dividido por 0x2. El resultado de esta operación es 0x10000000D. La CPU intenta almacenar este valor en eax, con el resto, 1, en edx, pero no encaja porque el 1 está en el 33er bit. Por lo tanto, obtienes un desbordamiento.Puedes solucionar este problema mediante el uso de un registro diferente de EDX para dividir, asegurándose a cero EDX:
xor eax,edx
mov ecx,2
xor edx,edx ; Zero edx
div ecx
; eax contains 0xD, edx contains 1
+1 gran explicación – Spyros
Más información necesaria: por ejemplo, arquitectura objetivo, la versión del ensamblador. – iehrlich
@suddnely_me ¿arquitectura de destino? – user700176
Destinado versión ensamblador OFC> _ < – iehrlich