Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why "DIV EDX" in MASM always generates processor exception?

I've got that question on my Computer Architecture Exam on Informatics last semester : "Why 'DIV EDX' in MASM always generates processor exception?"
What is the mechanism which generates exception?

like image 543
Paweł Kurek Avatar asked Sep 01 '12 22:09

Paweł Kurek


1 Answers

When you do 1-operand division on x86 CPUs, EDX:EAX (64 bit) is divided by the 1st operand (32 bit). The result is stored in EAX (32 bit).

So when you divide by EDX:EAX by EDX, what you essentially get is (EDX * 0x100000000 + EAX) / EDX, which result is always above 0x100000000 and does not fit into the target register or the divisor is zero. In both cases a divide exception occurs.

See also this page (from the Intel developer manuals).

Note that this is not specific to the assembler (MASM), but to the platform in this case.

like image 55
copy Avatar answered Nov 15 '22 11:11

copy