Why is the zero flag not set after the first iteration of the cmp instruction here? x86

Viewed 148

I am currently learning x86 assembly language using NASM from the following website: https://www.asmtutor.com/ and I am presently on Lesson 11 if you require the full code of this example.

Using the divideLoop: subroutine below how does the cmp instruction not set the zero flag (ZF) after just the first iteration? Doesn't idiv set eax to the quotient part and edx to the remainder?

;EAX is set as 1 before the first iteration.

divideLoop: 
    inc     ecx
    mov     edx, 0
    mov     esi, 10
    idiv    esi
    add     edx, 48
    push    edx
    cmp     eax, 0
    jnz     divideLoop

I was under the impression that after idiv esi that eax would be set to 0 and edx would be set to 1 since 1 / 10 = 0R1 and therefore cmp eax, 0 would equal zero and thus set the zero flag.

Maybe I'm misunderstanding how idiv works with the quotient part or how cmp sets the zero flag?

0 Answers
Related