Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Несмотря на то, что современные языки программирования высокого уровня обеспечивают не только удобное, но и эффективное системное программирование, в тех случаях, когда особенно важно получить оптимальный объектный код, необходимо использовать Ассемблер.
Исходный модуль программы на Ассемблере представляет собой последовательность строк, имеющих следующий формат:
[метка] команда [операнд(ы)] [комментарий]
После метки ставится двоеточие, команда и операнд разделяются по крайней мере одним пробелом; если операндов несколько, то они разделяются запятыми; перед комментарием ставится точка с запятой. В квадратные скобки заключены необязательные компоненты.
Ассемблер имеет ряд операторов, которые позволяют управлять процессом ассемблирования и формирования листинга. Эти операторы называются псевдокомандами или директивами. Они действуют только в процессе ассемблирования программы и не генерируют машинных кодов.
Любые ассемблерные программы содержат по крайней мере один сегмент-сегмент кода. В некоторых программах используются сегмент для стековой памяти и сегмент данных для определения данных. Сегмент описывается директивой SEGMENT следующим образом:
имя SEGMENT [параметры]
имя ENDS
Сегмент кода содержит одну или несколько процедур, определяемых директивой PROC:
имя сегмента SEGMENT имя процедуры PROC
RET имя процедуры ENDP имя сегмента ENDS
Пример простой исходной программы на Ассемблере представлен ниже:
TITLE PROG1 ПРИМЕР РЕГИСТРОВЫХ ОПЕРАЦИЙ;
STACKSG SEGMENT PARA STACK 'Stack'
DB 12 DUP(?) STACKSG ENDS
CODESG SEGMENT PARA 'Code' BEGIN PROC FAR ASSUME SS:STACKSG,CS:CODESG,DS:NOTHING
PUSH DS; cохранение DS в стеке. (1)
SUB AX,AX; формирование нуля в АХ. (2)
PUSH AX; cохранение АХ в стеке. (3)
MOV AX,0123H; передача константы в регистр. (4)
ADD AX,0025H; сложение регистра с константой. (5)
MOV BX,AX; передача из регистра в регистр. (6)
ADD BX,AX; сложение содержимого регистров. (7)
MOV CX,BX; передача из регистра в регистр. (8)
SUB CX,AX; вычитание содержимого регистров (9)
SUB AX,AX; формирование нуля в АХ. (10)
NOP; нет о перации (задержка). (11)
RET; возврат из процедуры. (12)
BEGIN ENDP;КОНЕЦ ПРОЦЕДУРЫ.
CODESG ENDS;КОНЕЦ СЕГМЕНТА.
END BEGIN;КОНЕЦ ПРОГРАММЫ.
В приведенном примере директива ASSUME сообщает Ассемблеру соответствие между сегментными регистрами и именами сегментов.
Исходный текст программы на Ассемблере создается с использованием любого доступного текстового редактора и сохраняется на магнитном диске под именем *.ASM или *. TXT. Компилятор Турбо Ассемблер является программой в виде загрузочного файла TASM.EXE, работающей в режиме командной строки. Он вызывается командой
TASM имя, где имя является именем исходного файла. Предполагается, что TASM и исходный файл сохраняются в одном каталоге. При вызове компилятора могут задаваться режимы его работы. Например, запись в командной строке:
TASM/ZI PROG1 PROG1 PROG1
приводит к созданию из исходного файла PROG1.ASM объектного модуля PROG1.OBJ и файла листинга PROG1.LST. Параметр /ZI приводит к внесению в файл листинга полных сведений о номерах строк и именах исходного модуля.
С целью создания исполнительной программы необходимо произвести компоновку объектных модулей с библиотечными модулями. Компоновщик является программой с именем TLINK.EXE. Он может быть вызван командой
TLINK имя объектного модуля
После компоновки создается загрузочный файл PROG1.EXE, а также файл карты сборки PROG1.МАР.
Компоновка в режиме TLINK /t приводит к созданию исполняемого *.СОМ файла, а компоновка в режиме TLINK /v включает в файл исполняемой программы информацию, необходимую для ее инициализации и отладки.
Дата публикования: 2014-11-18; Прочитано: 265 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!