АССЕМБЛЕР. Компоновщик. Загрузчик. Макрогенератор


Основная идея ассемблирования.


Ассемблер постоянно находится во внешней памяти. Когда операционной системе (ОС) дан приказ

 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 и т.п.) указано, на какой цифровой КОП надо заменять этот мнемокод. Выделив из символьной команды мнемокод, ассемблер отыскивает в этой таблице строчку с данным мнемокодом и берет из нее нужный КОП, который и подставляет в формируемую машинную команду.




Начало  Назад  Вперед



Книжный магазин