Обозначение
|
Описание
|
r
|
Фиксация смещения для символических имен в модуле.
|
s
|
Фиксация сегмента для символических имен в модуле.
|
sr
|
Фиксация сегмента и смещения для символических имен в модуле.
|
e
|
Фиксация смещения внешнего символического имени.
|
se
|
Фиксация указателя внешнего символического имени.
|
so
|
Только сегментная фиксация.
|
+
|
Объектный код был усечен.
|
В листинге объектного кода r, s и sr используются для обозначения типов фиксации символических имен в модуле по смещению, сегменту и указателю (сегмент и смещение). Символ e указывает на фиксацию смещения внешнего символического имени, а se на фиксацию указателя внешнего символического имени. Фиксация сегмента внешнего символического имени обозначается буквой s, как и для локальных символических имен. Поле объектного кода может также содержать в последнем столбце символ +, означающий, что имеется еще объектный код для вывода, но он усечен.
Суммарно команда MOV AX, DATASG ассемблируется в 3 байта машинного кода. Следующая команда MOV DS, AX, начинается в сегменте кода со смещением 3. Машинный код 8e D8 соответствует MOV DS, AX. Он имеет длину 2 байта, поэтому следующая команда должна начаться со смещением 5.
Обратите внимание, в файл листинга включается только первые 7 байт машинного кода, генерируемого для строки:
Text DB "This is simple text$"
Поля машинного кода, которые слишком длинны и не помещаются в поле <машинный код>, обычно усекаются и завершаются знаком (+), показывающим, что имеются еще байты, сгенерированные при ассемблировании, но в файле листинга не показанные. Если требуется отобразить все байты машинного кода, то следует использовать директиву %NOTRUNC, которая отменяет усечение кодов, не помещающихся в данном поле.
Исходная строка представляет строку исходного файла программы, с комментариями. Некоторые строки ассемблерной программы, в которых содержатся только комментарии и ничего более, не вызывают генерирования каких-либо машинных кодов. Для таких строк поля <смещение> и <машинный код> не создаются, но номер строки им все равно присваивается.
После исправления всех ошибок (если они были обнаружены) с помощью файла листинга вновь выполним команду трансляции и получим объектный модуль FIRST.OBJ. Модуль будет содержать машинные коды созданной программы. Однако модуль не является исполняемым, его не удастся загрузить в память и выполнить. Для этого следует выполнить следующую команду:
TLINK FIRST.OBJ
Программа TLINK.EXE называется компоновщиком. Она создаст перемещаемый исполняемый модуль FIRST.EXE. Вызвать модуль FIRST.EXE на выполнение можно из операционной системы MS-DOS или из отладчика DEBUG. Обычно программы вызывается из MS-DOS, когда есть твердая уверенность в правильности ее исполнения. Для выполнения программы необходимо ввести команду:
FIRST.EXE
По этой команде операционная система MS-DOS проведет считывания файла FIRST в любое подходящее место оперативной памяти и затем передаст ему управление. По окончании работы управление будет передано операционной системе, и программа может быть вновь запущена. На рис. 26 показаны выполненные действия по трансляции и компоновке программы.
Рис. 26. Трансляция и компоновка программы на ассемблере.
Do'stlaringiz bilan baham: |