Parsing is notoriously difficult and slow.
If you use your assembler instructions as you have specified, you have to parse the instructions, parse the arguments, strip the comments. A lot of parsing code, string comparisons, converting arguments to register offsets or values, etc.
Executing the byte code is a simple switch statement, a simple integer comparison. Register arguments can be pre-defined as offsets into a register array. Much faster.
You can still think of it as assembler -- just compile your assembler into byte code. A byte code to assembler display tool would be useful also.