For each line TMA calls the function parse: in PARSER.INC. If a label definition changed, a new pass is done. (see TMA.INC) If no error occurred, the generated code is stored by COMFILE.INC or EXEFILE.INC. Processing a single line (PARSER.INC): 1. The line that needs to be processed will be copied to the line buffer. Comments are truncated and macro parameters are inserted. 2. If a label (not a keyword in DIRTABLE.INC) is found, it's buffered. (see keep_label: in LABELS.INC) 3. If an assembler command is found, its handler in DIRECT.INC is called, and the function is terminated. 4. If a mnemonic is found, the function does the following: 1. The mnemonic's token, the operand types and sizes will be stored to the parserinfo data area in TMA.ASM. 2. For effective addresses (parse_ea: in PARSER.INC) the ModRM byte is generated (MODRM.INC). 3. Constants or label contents are processed by CONSTANT.INC. 4. mapoperands: in GENERATE.INC is called. It'll check, if the operands match with the mnemonic's instruction descriptor in OPCODESC.INC. 5. If they match, execution is passed to createcode: in GENERATE.INC which will output the opcode depending on information in OPCODESC.INC. 5. If noone already processed the buffered label, and if it's not a macro or structure, it's stored to the label database. (see update_label: in LABELS.INC) 6. End of function.