Sorry for the late response been really busy lately.
From the code you've posted I don't really see a problem.
Here's the best and most useful time to open up gdb.
And I'll attempt to explain an easy way to do so!
so in my linux asm code I usually have a main label. So I would do this.
gdb myprog
gdb> break main
breakpoint set
gdb> display /x $eax
gdb> display /x $ebx
gdb> display /x $eflags
gdb> run
breakpoint reached
Now here gdb is hanging out at the main label in myprog which happens for me to be the begging of my code!
So I do 'stepi' while watching my registers until I get to the instruction that I want to watch then I'll usually do a 'info all-reg'
If you're going to programming in assembly you're going to NEED to become familiar with a debugger. What do other languages do for you? By writing in assembly you're saying "I'm smart enough that I can get down into the hardware and interact with it directly". There's no type safety or any standard or a compiler to tell you that what you're doing is unsafe. Actually the only thing keeping your program in check from obliterating the machine is the O/S (assuming you're in a protected mode O/S such as linux).