I am fairly new to Assembly language programming and, for practice, I gave myself a problem: count down from 10 and right after 1, say "Blast off!". section .text global _start _start: mov eax, '10' ; asci 10 mov [num], eax ; num now equals ascii 10 mov edx, 2 mov ecx, num mov ebx, 1 mov eax, 4 int 80h ; prints out '10' in the console mov eax, 9 ; numerical 9 call subtract subtract: call log ; logs the current number sub eax, 1 ; subract 1 cmp eax, 0 jne subtract ; if it doesn't equal 0, jump to subtract je blast_off ; if it does equal 0, jump to blast off log: call to_ascii ; converts eax's value to ascii mov [num], eax ; num = eax mov edx, 1 mov ecx, num mov ebx, 1 mov eax, 4 int 80h ; output the current number call to_number ; converts eax back to numerical ret to_number: mov eax, [num] ; is this necessary? Moves num back into eax sub eax, '0' ; converts to numerical ret to_ascii: add eax, '0' ; converts to ascii ret blast_off: mov edx, len mov ecx, msg mov ebx, 1 mov eax, 4 int 80h ; outputs "Blast off!" mov eax, 1 int 80h ; exits program section .data msg db "Blast off!", 0xA ; message len equ $-msg ; length of message section .bss num resb 1 ; this is for outputting the current number Output: > 1098654321Blast off! **Assembled**: nasm -f elf blast_off.s **Linked**: ld -m elf_i386 -s -o blast_off blast_off.o My main concerns are: 1. My code seems functional - is this bad, or does it not really matter, being assembly language? 2. Is there repetition? This was a very difficult challenge for me, and at times I lost my head - sometime during those times I might have typed something completely "off topic" in regards to the subject of the code 3. Aside from the first concern, does the organization need re-organizing? As in, should I reorder the different sections(.test, .data, .bss)? Or, does it not make a difference?