¿Por qué NASM no tiene problemas con las instrucciones nemotécnicas válidas como nombres de símbolos en operandos?

Escribí el siguiente programa simple, pero nasm se niega a compilarlo.

section .text
    global _start

_start:
    mov rax, 0x01 
    mov rdi, 0x01
    mov rsi, str
    mov rdx, 0x03
    syscall

    mov rax, 60
    syscall

segment .data
    str db 'Some string'


nasm -f elf64 main.asm
main.asm:15: error: comma, colon, decorator or end of line expected after operand

Como leí en estoresponder esto es porquestr Es una instrucción mnemónica. Entonces agregué dos puntos astr y ahora se compila bien. Pero que hay de la linea

mov rsi, str

str es una instrucción mnemónica aquí, pero aún se compila bien. ¿Por qué?

Respuestas a la pregunta(1)

Su respuesta a la pregunta