high level versus low level
typical (early) microprocessor:
6502 receives 8 bit binary pattern during instruction fetch
a program is an ordered set of instructions that cause the microprocessor to do something, e.g. add contents of memory location 60 to contents of location 61:
much easier in hexadecimal:
cannot be directly executed by microprocessor; need a hexadecimal loader program to convert the numbers to binary.
problem: more distant from computer, could promote reduced understanding of what's really going on.
simplification of programming may partially obfuscate meaning, e.g. mnemonic LDA can mean direct e.g. LDA $C030, direct zeropage e.g. LDA $60, indirect, indirect zero page, etc., all having the same mnemonic but different opcodes.
thus programming with an assembler may reduce understanding of what's happening, if care not taken.
therefore we consider the "architecture independent assembler", e.g. gcc, for portability of programs across different architectures.