I'm learning assembly for the NES, and I have wrote this program:
    .org $8000 ; set code to start of rom
Start:         ; make a label called start
    lda #$ff   ; set acc to 0xff
    sta $0000  ; store address 0x0000 to acc which is 0xff
    jmp Start  ; jump to label start
I compile the program with NESASM3 it compiles successfully, then run it in my emulator, when I goto the memory viewer in the emulator, have a look at address $0000, it is 01, not FF, like I programed it to be.
 
                        
Your code is missing a bunch of information that's necessary for the emulator to know what kind of ROM this is, and for the NES to know where it should start executing.
A working example could look something like this (tested in FCEU):