Question

For some reason my cmp statement here always causes a je to DoubleScore, and never jne to the RegularScore function. I am fairly new to assembly so it is probably a simple mistake.

  Approved:
                        mov eax,[prev]
                        mov edi,  dword[buffermaze+eax]
                        mov eax,edi
                        call print_nl
                        call print_int
                        mov eax, 45
                        call print_nl
                        call print_int

                        cmp eax,edi
                        je DoubleScore
                        dump_regs 1
                        jne RegularScore
                        dump_regs 2

                                DoubleScore:
                                        mov ebx,0
                                        ret
                                RegularScore:

                                        mov edx, 0
                                        mov eax,[new]

                                            ret


The Output for this part of the code is 
774778411
45
Register Dump # 1
EAX = 0000002D EBX = F7704FF4 ECX = 00000000 EDX = 00000000
ESI = 0804A434 EDI = 2E2E2E2B EBP = FFF2D4E8 ESP = FFF2D4C4
EIP = 080487B0 FLAGS = 0283       SF          CF
Was it helpful?

Solution

I think it's because the code fragment

 call print_nl 
 call print_int

those two functions might do something to the registers eax and edi. Have you tried debugging the code ?

Edit: jne RegularScore refers to DumpRegs2, not the cmp eax, edi

in my opinion it should be like this:

                cmp eax,edi
                je DoubleScore
                dump_regs 1
                ;here we will handle the regularScore


                                mov edx, 0
                                mov eax,[new]

                                    ret


                        DoubleScore:
                                mov ebx,0
                                ret

OTHER TIPS

would this work;

    cmp eax,edi
    je DoubleScore // if equal jmps to DoubleScore and jmps back to passedNotEqual
    jmp RegularScore // if je fails, jmps to RegularScore and returns normal
passedNotEqual:

        DoubleScore:
                mov ebx,0
                dump_regs 1
                jmp passedNotEqual

        RegularScore:

                mov edx, 0
                mov eax,[new]
                dump_regs 2
                ret
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top