I am looking at some code and have a couple ( few ) questions

1) What does CDQ do?

2) What does IDIV ECX do?

These are my main problems. Also does anybody know of a good resource that you can search for an explanation of a opcode?

I haven't tried searching the board or google ... yet, I just thought that searching for these would just bring up more confusing code.

Thanks for any help,

gorshing

1) What does CDQ do?

2) What does IDIV ECX do?

These are my main problems. Also does anybody know of a good resource that you can search for an explanation of a opcode?

I haven't tried searching the board or google ... yet, I just thought that searching for these would just bring up more confusing code.

Thanks for any help,

gorshing

CDQ - Convert Double to Quad (386+)

Usage: CDQ

Modifies flags: None

Converts signed DWORD in EAX to a signed quad word in EDX:EAX by extending the high order bit of EAX throughout EDX

-----

IDIV - Signed Integer Division

Usage: IDIV src

Modifies flags: (AF,CF,OF,PF,SF,ZF undefined)

Signed binary division of accumulator by source. If source is a byte value, AX is divided by "src" and the quotient is stored in AL and the remainder in AH. If source is a word value, DX:AX is divided by "src", and the quotient is stored in AL and the remainder in DX.

Usage: CDQ

Modifies flags: None

Converts signed DWORD in EAX to a signed quad word in EDX:EAX by extending the high order bit of EAX throughout EDX

-----

IDIV - Signed Integer Division

Usage: IDIV src

Modifies flags: (AF,CF,OF,PF,SF,ZF undefined)

Signed binary division of accumulator by source. If source is a byte value, AX is divided by "src" and the quotient is stored in AL and the remainder in AH. If source is a word value, DX:AX is divided by "src", and the quotient is stored in AL and the remainder in DX.

And for (I)DIV, if src is a DWORD (as it world be using ECX), the 64 bit value in EDX:EAX is divided by src, with the quotient placed in EAX and the remainder in EDX.

MASM32 comes with a quick opcode ref. Otherwise, tons of info on the Intel site. :)

MASM32 comes with a quick opcode ref. Otherwise, tons of info on the Intel site. :)

1 lea esi, offset name ; name is "chad"

2 movsx eax, byte ptr ; ebx is a counter( 0 the first time through ), so looking at c first

3 cdq

4 idiv ecx ; contains 0Ah

So the cdq statement puts all zero's in EDX, correct? Since 'c' is only 63h, it wouldn't be signed

If I am just messing around with characters, nothing binary, hy mess with all these signed opcodes? Isn't positive numbers most significant bit 0 and negitive numbers most significant bit 1 ( granted that the number is within the range, since 63h fits within the 32bit range it's most significant bit is 0 )

So if I divide by 0Ah, then 63h( 'c' ) / Ah, that would put 9 in eax and 9 in edx -- 99/10

I'm looking at somebody elses code and these are the only statements that are confusing me. :(

Thanks again,

gorshing

PS - I apologize for taking baby steps, but I have having a hard time with this, thanks

2 movsx eax, byte ptr ; ebx is a counter( 0 the first time through ), so looking at c first

3 cdq

4 idiv ecx ; contains 0Ah

So the cdq statement puts all zero's in EDX, correct? Since 'c' is only 63h, it wouldn't be signed

If I am just messing around with characters, nothing binary, hy mess with all these signed opcodes? Isn't positive numbers most significant bit 0 and negitive numbers most significant bit 1 ( granted that the number is within the range, since 63h fits within the 32bit range it's most significant bit is 0 )

So if I divide by 0Ah, then 63h( 'c' ) / Ah, that would put 9 in eax and 9 in edx -- 99/10

I'm looking at somebody elses code and these are the only statements that are confusing me. :(

Thanks again,

gorshing

PS - I apologize for taking baby steps, but I have having a hard time with this, thanks

So the cdq statement puts all zero's in EDX, correct? Since 'c' is only 63h, it wouldn't be signed

Yes, if it's sign it will be 0FFFFFFFFh.`So if I divide by 0Ah, then 63h( 'c' ) / Ah, that would put 9 in eax and 9 in edx -- 99/10`

Yep.
Instead of using cdq you can use sar edx, 1Fh since on some "older cpus" cdq is slow.

```
mov edx, eax
```

sar edx, 1Fh

Also it's a rule to use cdq or sar when using idiv and use xor edx, edx for div.