The 'run' rule depends on nihilum.bin, not nihilum.img
There is no nihilum.asm file (the wrapper)

The assembly files are compiled and then concatented using cat(1) to create the image.