Fließkommaausnahme beim Teilen in x86 nasm

8

Ich bin damit beschäftigt, Assembly zu lernen und habe versucht, mich zu trennen, aber ich stieß auf eine Beize mit der folgenden Aussage:

%Vor%

GDB:

%Vor%

Ich wollte 0x100000000 durch 0x00000002 teilen, also da die Spanne für die Division EDX: EAX ist, habe ich 0x1 in EDX und 0x0 in EAX verschoben. Ich verschiebe dann 0x2 in ECX und dividiere, das gibt mir leider eine Gleitkommaausnahme, ich bin mir nicht sicher, was ich falsch gemacht habe.

Wenn div (unsigned) verwendet wird, funktioniert es normal, also frage ich mich, was der Unterschied zwischen div und idiv für diese bestimmte Anweisung ist, die die Ausnahme verursacht.

    
Lucas Kauffman 24.03.2013, 18:45
quelle

1 Antwort

7

Der Quotient ( 0x80000000 ) passt nicht in eine 32-Bit-Ganzzahl mit Vorzeichen (maximaler Wert: 0x7fffffff ). Daher erhalten Sie eine Ausnahme. It passt in eine vorzeichenlose 32-Bit-Ganzzahl (max Wert 0xffffffff ), sodass keine Ausnahme von einer Division ohne Vorzeichen ausgelöst wird.

    
Stephen Canon 24.03.2013, 18:48
quelle

Tags und Links