umm is it because of cygwin?
Yeah, I think it probably is. I installed Cygwin, back when I was running Win98. Unfortunately, my memory's shot, and I don't remember what it did for me. I remember I didn't like it. I remember it was painfully slow. I think it gave us "all the power and stability of the Windows OS with the user-friendly Unix interface".
In other words, the worst of both worlds. I think it was for writing Windows programs while pretending you were in Linux. I don't remember for sure whether it would actually run a Linux program - I don't think so.
Some of the code you've posted hasn't really been "complete" - no errors showing, but possibly something in the "not shown" parts. The "hello world" example from Mark Loiseau should be rock solid. I don't think the colon in "length:" is a problem, although I would not put one there as a matter of "taste". I'm blaming Cygwin.
I don't know whether the best solution for you is to write Windows programs or run Linux. I think there's a thing called "andlinux" that should work, or any emulator with Linux running on it. When you're first learning asm, you really don't need any "extra" confusion! So shoot for whatever you find least confusing...
It is probably premature to discuss this before you've solved the segmentation fault, but some of your code...
mov eax, 3
mov ebx, 0
mov ecx, id
mov edx, 10
int 0x80
cmp ecx, 50
jle done
cmp ecx, 100
jge done
; more...
You've put the address of "id" in ecx - a number like 0x8049123 or so. Doing the int 0x80 will return the number of characters entered in eax, but shouldn't alter any other registers (I don't know if this is "guaranteed", but it doesn't). So ecx is always going to be greater than 100, and your conditional jumps aren't going to do anything useful. As you seem to suspect, I think you want to convert the entered text to a number. I'll try to get to that question soon.
As Betov used to say, "Courage!"
Best,
Frank