1. section .bss
    2. Buff resb 1
    3. section .data
    4. section .text
    5. global _start
    6. _start:
    7. nop ; this no op keeps the debugger happy
    8. Read: mov eax, 3 ; mov 3 to eax which is read syscall no
    9. mov ebx, 0 ; fd 0 stdin
    10. mov ecx, Buff ; mov address of Buff to ecx
    11. mov edx, 1 ; mov read length to edx
    12. int 80h ; call syscall
    13. cmp eax, 0 ; compare eax with 0 eax is return value of syscall
    14. je Exit ; jump if prev instruction is equal
    15. cmp byte [Buff], 61h ; compare Buff with 'a' [Buff] is the value Buff point to
    16. jb Write ; jump to Write label if com below 'a'
    17. cmp byte [Buff], 7Ah ; compare Buff with 'z'
    18. ja Write ; if above 'z' not lowercase 'z' at this point, we have a lowercase
    19. sub byte [Buff], 20h ; subtract 20h from buff
    20. Write: mov eax, 4 ; write syscall
    21. mov ebx, 1 ; stdout fd
    22. mov ecx, Buff ; address of buff to ecx
    23. mov edx, 1 ; number of chars to write
    24. int 80h ; interupet syscall
    25. jmp Read ; jump back to Read label
    26. Exit: mov eax, 1 ; exit syscall
    27. mov ebx, 0 ; exit number 0
    28. int 80h ; make syscall