Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lec_asm_06_3495.doc
Скачиваний:
1
Добавлен:
03.01.2020
Размер:
178.18 Кб
Скачать

2.2.2. Псевдооператор proc

Сегмент кода содержит одну или несколько процедур, которые определяются псевдооператором PROC.

Сегмент, содержащий только одну процедуру, имеет следующий вид:

имя_сегмента SEGMENT PARA

имя_процедуры PROC FAR

. . . . . . . .

RET

имя_процедуры ENDP

имя_сегмента ENDS

Псевдооператор ENDP определяет конец процедуры и имеет имя, аналогичное имени в псевдооператоре PROC.

Команда RET завершает выполнение процедуры.

Процедуре всегда приписан один из двух атрибутов дистанции. NEAR (близкая процедура) и FAR (далекая процедура). Он указывается в качестве операн­да оператора PROC. Если операнд опущен, то подразумевается атрибут NEAR.

Процедура с атрибутом NEAR может быть вызвана только из того сегмента команд, в котором она определена.

Когда микропроцессор 8088 вызывает процедуру, то он помещает адрес возвра­та в стек. Этот адрес будет извлечен при выполнении команды RET.

Если процеду­ра имеет атрибут NEAR, то при вызове в стек помещается только смещение (содер­жимое указателя команд IP). Если процедура имеет атрибут FAR, то при вызове в стек помещается и номер блока (содержимое регистра сегмента команд CS), и содержащееся в регистре IP смещение (в указанном порядке).

При трансляции программы Ассемблером каждая команда RET преобразуется в машинную команду, которая указывает микропроцессору 8088, сколько слов с адресами возврата понадобится извлечь из стека.

Команда RET в процедуре с атрибутом NEAR заставит микропроцессор извлечь из стека одно слово (содержи­мое регистра IP). Команда RET в процедуре с атрибутом FAR заставит его извлечь два слова (содержимое регистров IP и CS).

Программу можно вызвать из операционной системы DOS или из отладчи­ка. Но так как и DOS, и отладчи­к размещены в сегментах команд, отлич­ных от сегмента команд программы, то ее основная процедура должна иметь атрибут FAR.

2.2.3. Псевдооператор assume

Процессор использует регистр SS для адресации стека, регистр DS для адресации сегмента данных и регистр CS для адресации сегмента кода. Однако предыдущие рассмотренные описания не дают информации о том каково назначение каждого сегмента.

Псевдооператор ASSUME сообщает ассемблеру назначение каждого сегмента. Он имеет формат

ASSUME SS: имя_сегмента, DS: имя_сегмента,CS: имя_сегмента, ES: имя_сегмента

Например, CS: CSEG указывает, что ассемблер должен ассоциировать сегмент CSEG с регистром CS. Операнды могут записываться в любой последовательности. Если программа не использует какой-либо регистр, то его описание можно опустить.

2.2.4. Псевдооператор end

Если псевдооператор ENDS завершает сегмент, а псевдооператор ENDP завершает процедуру, то псевдооператор END полностью завершает всю программу:

END [имя процедуры]

Операнд может быть опущен, если программа не предназначена для выполнения. Например, если ассемблируются только определения данных, или эта программа должна быть скомпонована с другим (главным) модулем. Для обычной программы с одним модулем операнд содержит имя, указанное в директиве PROC, которое было обозначено как FAR.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]