Це відомо як двопрохідний асемблер. Кожен прохід сканує програму, перший прохід генерує таблицю символів, а другий прохід генерує машинний код.
Він вимагає, щоб усі символи даних були визначені перед використанням. Двопрохідний асемблер вирішує цю дилему, приділяючи один прохід ексклюзивному розв’язанню всіх посилань (на дані/мітки), а потім без проблем генерує об’єктний код під час наступного проходу.
Підсумовуючи, головна відмінність між ними полягає в тому, що однопрохідний асемблер виконує один прохід над вихідним кодом, зосереджуючись на визначенні міток і створенні таблиці символів, тоді як двопрохідний асемблер вимагає двох проходів і виконує додаткові завдання, такі як генерація коди операцій, обчислювальні адреси та об'єкт запису …
Наступні завдання виконуються проходами двопрохідного асемблера: Прохід I: (i) Розділіть символ, мнемонічний код операції та поля операнда (ii) Побудуйте таблицю символів (iii) Виконайте обробку LC (iv) Побудуйте проміжне представлення.
Ще одна відмінність полягає в тому, що асемблери можуть перетворювати вихідний код у машинний код за один або кілька проходів. Компілятори майже завжди виконують перетворення за один прохід. Асемблери створюють двійковий код у потоці 0 і 1. Компілятори створюють машинний код у формі мнемоніки.
За своєю суттю розроблено двопрохідне кодування щоб підвищити якість відео без непропорційного збільшення розміру файлу або споживання додаткової пропускної здатності. Це робить його особливо привабливим для контенту, де важливий кожен піксель, наприклад, художніх фільмів або високоякісного онлайн-відео.