I have decided to learn assembler for fun. I have been coding in C for many years.
I followed some online tutorials that print \"Hello world\" and dug around a bit i
I think it has to be in brackets. Try [iter].
See the NASM docs whenever you have questions like this.
In this case, the section on Effective Addresses:
An effective address is any operand to an instruction which references memory. Effective addresses, in NASM, have a very simple syntax: they consist of an expression evaluating to the desired address, enclosed in square brackets. For example:
wordvar dw 123
mov ax,[wordvar]
mov ax,[wordvar+1]
mov ax,[es:wordvar+bx]
To make a memory reference in nasm, you must surround the address with square brackets. Additionally, in each of the cases you've got here, you also need to specify a size, like so:
mov byte [iter], 0 ; initalise loop counter
FL: cmp byte [iter], 10 ; is iter == 10?
inc byte [iter]
In this case, though, it would probably make more sense to store iter in a register instead of in memory. You're clobbering most of the obvious ones with your system calls, but esi or edi look available.