Ассемблер постоянно находится во внешней памяти. Когда операционной системе (ОС) дан приказ
MASM M.ASM, M.OBJ, M.LST;
на трансляцию нашей программы, то ОС считывает ассемблер из внешней памяти (из файла MASM.EXE) в оперативную память (ОП) и передает ему управление. Свою работу ассемблер начинает с того, что считывает из внешней памяти (из файла M.ASM) в ОП программу на языке ассемблера (ЯА). Затем он просматривает ее текст строчка за строчкой и постепенно формирует соответствующие машинные коды, которые записывает в другое место ОП. Когда ассемблер полностью построит машинную программу, он записывает ее во внешнюю память (в файл M.OBJ) и на этом заканчивает свою работу (попутно в файл M.LST записывается листинг).
-------->-------¬ --------->-------¬
--------------------------------------------------------------
ОП: ¦программа на ЯА¦ ¦ ассемблер ¦ ¦маш.программа¦
--------------------------------------------------------------
¯
внеш.память: M.ASM MASM.EXE M.OBJ
Основная идея перевода с ЯА на машинный язык проста. Надо:
- заменить мнемонические названия команд на соответствующие цифровые коды операций (КОПы);
- заменить имена переменных и меток на соответствующие адреса;
- перевести данные в двоичное машинное представление.
Если, к примеру, имя B обозначает ячейку с адресом 0001, а операция сложения слова из памяти с непосредственным операндом имеет код 81 06 (в ПК коды многих операций занимают два байта), тогда по символьной команде ADD B,260 ассемблер должен построить следующую машинную команду:
81 06 0001 0104
Как осуществляется такой перевод?
Перевод чисел из 10-й системы счисления в 2-ю осуществляется по хорошо известным алгоритмам.
Замена мнемокодов на цифровые КОПы осуществляется с помощью заранее составленной таблицы, в которой для каждого мнемокода (ADD, MOV, JMP и т.п.) указано, на какой цифровой КОП надо заменять этот мнемокод. Выделив из символьной команды мнемокод, ассемблер отыскивает в этой таблице строчку с данным мнемокодом и берет из нее нужный КОП, который и подставляет в формируемую машинную команду.