Basically i need if one value divided with another leaves a remainder. I could of course just use DIV, but DIV, as far as i know, is one of the slowest executing instructions you can use, also it is somewhat tricky to use.

What i want is a modulus function which only leaves the remainder, possibly just a boolean output, 0 for no remainder and 1 if there is a remainder.

I was thinking that maybe you could do somesort of bit manipulation or something, but i have figured out a way yet.

I'm sure that there is some bright heads in here, so i hope for the best.

Thanks in advance

What i want is a modulus function which only leaves the remainder, possibly just a boolean output, 0 for no remainder and 1 if there is a remainder.

I was thinking that maybe you could do somesort of bit manipulation or something, but i have figured out a way yet.

I'm sure that there is some bright heads in here, so i hope for the best.

Thanks in advance

Modulus of (x % y) is best done with idiv/div if y is

But if y is constant, it's easy with MagicDivider (by The Svin and Ewayne).

For instance, if y=271, the proc would be

; if (x % 271)==0, eax=0 and ZERO flag is set

; otherwise, eax !=0, and ZERO flag is clear

**arbitrary**. Since you haven't specified y, then you mean y is arbitrary.But if y is constant, it's easy with MagicDivider (by The Svin and Ewayne).

For instance, if y=271, the proc would be

Modulo271 macro x:REQ

mov eax,x

mov edx, 4057238479

mul edx

SHR edx, 8

mov eax,271

mul edx

sub eax,x

endm

; if (x % 271)==0, eax=0 and ZERO flag is set

; otherwise, eax !=0, and ZERO flag is clear

You could of course do a subtraction loop until the remainder is smaller than the dividend (value to subtract).

In the old days, afaik, this could be faster than a DIV if you knew you would always get a small number of iterations.

In the old days, afaik, this could be faster than a DIV if you knew you would always get a small number of iterations.