I'm trying divide two numbers in assembly. I'm working out of the Irvine assembly for intel computers book and I can't make division work for the life of me.
Here's my code
.code
main PROC
call division
exit
main ENDP
division PROC
mov eax, 4
mov ebx, 2
div ebx
call WriteDec
ret
divison ENDP
END main
W开发者_StackOverflowhere WriteDec should write whatever number is in the eax register (should be set to the quotient after the division call). Instead everytime I run it visual studio crashes (the program does compile however).
You need to zero extend your EDX register before doing the division:
mov eax, 4
mov ebx, 2
xor edx, edx ;set edx to zero
div ebx
call WriteDec
the ;set edx to zero
is a comment in MASM. I don't know if it'll work if you are using inline assembly in C, so don't copy it if you are :)
Yes, you need to set edx
to zero.
The easiest way to do this is:
xor edx, edx
i think the above mentioned reason is correct because when u divide eax by ebx both are 32 bit numbers but the dividend needs to be 64 bit divisor is 32 bit and so it considers edx as the msb...u may make edx 0 or instead of using 3bx use only bx..in that way u will divide a 32bit number by a 16 bit number
精彩评论