1) Pass 1 processes macro definitions by reading source code cards and entering macro names, parameters, and lines into a Macro Definition Table (MDT). 2) Pass 2 processes macro calls by searching for macro names in source code, expanding the macros by retrieving lines from the MDT and substituting arguments, and writing the expanded source code to a new file. 3) The process repeats until all macros are expanded.