さて、次は本格的な符号付き除算です。
b=-b をアセンブラで実行した例を赤で示しました(赤い2行目は実際には必要ありません)。
赤の行をコメントアウトして、d=0の行の後にb=-bとしても同じ結果が得られます。

main()
{
int a=0x50000000;
// e=4 f=0x0.101 0000 :5.0
int b=0x20000000;
// e=5 f=0x0.010 0000 :4.0
int c; //
0x66666666 e=1 f=0x0.110 0110 :0.8
int d;
char buf[80];
d = 0;
_asm {
mov
eax,d
mov
edx,b
// b=-b;
neg
edx
mov
b,edx
idiv
a
// neg
eax
mov
c,eax
mov
d,edx
}
// c=-c;
sprintf(buf,"%8x %8x %8x %8x",a,b,c,d);
MessageBox(GetDesktopWindow(), buf,"Test 3DNow!",MB_OK);
}

結果は
c 0x9999999a 0x1001 1001 1001 1001 1001 1001 1001 1010
となったでしょう。
これは 0x66666666 0x0110 0110 0110 0110 0110 0110 0110 0110
の符号反転したものです。(つまり 小数点位置e=1 で考えて-0.8を意味します)
アセンブラのピンクの行を実行行にするか、printf文の前のc=-cを実行行にすればc=0x66666666と表示されます。