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

11.2.4. Операции, возвращающие значения

Операции этой группы предоставляют информацию о переменных или метках программы.

Операция, обозначенная знаком доллара ($), возвращает смещение адреса текущего оператора (текущее значение счет­чика адреса).

Эта операция полезна, если мы хотим заставить Ассемблер вычислить длины строк символов.

Пример. При трансляции операторов

MESSAGE DB "Ошибка"

MESSAGEL EQU $ – MESSAGE

Ассемблер определит число символов в строке MESSAGE и присвоит его константе MESSAGEL. При выдаче сообщения на экран мы можем использовать значение константы MESSAGEL для задания числа выдаваемых символов.

Операции SEG и OFFSET возвращают значения номера блока и смещения адреса переменной или метки. Последнюю операцию мы уже встречали, когда рассматривали режимы адресации. Формат

SEG переменная или SEG метка

OFFSET переменная или OFFSET метка

Пример. Операторы

MOV АХ, SEG TABLE

MOV ВХ, OFFSET TABLE

загрузят номер блока и смещение адреса переменной TABLE в регистры АХ и ВХ соответственно.

Операция TYPE возвращает числовое значение, идентифицирующее тип атрибу­та переменной или тип атрибута дистанции метки. Формат

TYPE переменная или TYPE метка

Для переменной операция TYPE возвращает

1, если переменная имеет тип BYTE,

2, если она имеет тип WORD.

Для метки операция TYPE возвращает

–1, если она имеет атрибут NEAR,

–2, если она имеет атрибут FAR.

Операции LENGTH (длина) и SIZE (размер) полезны только для переменных, при определении которых была использована операция дублирования DUP. Формат операций

LENGTH переменная

SIZE переменная

Операция LENGTH возвращает число единиц определения (байтов или слов) в зарезервиро­ванной для переменной памяти.

Пример. Операторы

TABLE DW 100 DUP(1)

MОV CX, LENGTH TABLE ; Загрузить в CX число слов в

;таблице TABLE

загрузят 100 в регистр СХ.

Если операция LENGTH используется для переменной, в определении которой операция DUP не участвовала, то она воз­вратит 1.

Операция SIZE возвращает число байтов, зарезервированных для переменной. Иначе говоря, произведение операций LENGTH и TYPE.

Для определенной выше переменной TABLE оператор

MOV СХ, SIZE TABLE ; Загрузить в СХ число байтов

; в таблице TABLE

загрузит 200 в регистр СХ.

11.2.5. Операции присваивания атрибутов

Операция указателя PTR нами уже рассматривалась. Она позволяет изменить у операнда атрибут типа (BYTE или WORD) или атрибут дистанции (NEAR или FAR).

Пример. Этой опера­цией можно воспользоваться для доступа к байтам в таблице слов. Если таблица определена следующим образом:

WORD_TABLE DW 100 DUP (?)

то оператор

FIRST_BYTE EQU BYTE PTR WORD_TABLE

присвоит имя первому байту таблицы WORD_TABLE.

Пример. Изменение атрибута дистанции метки. Если программа содержит оператор

START: МOV СХ, 100

то метка START имеет атрибут NEAR. Это позволяет ссылаться на нее команде перехода JMP, находящейся в том же сегменте. Чтобы на эту метку могли ссылать­ся команды JMP, которые находятся в других сегментах, надо дать указанному оператору альтернативную метку, имеющую атрибут FAR. Это можно сделать оператором

FAR_START ЕQU FAR PTR START

Операции замены сегмента (DS:, ES:, SS: или CS:) и операция SHORT нами также уже рассматривались.

Операция THIS

– во-первых, создает адресный операнд с заданным атрибутом типа BYTE или WORD либо дистанции NEAR или FAR,

– во-вторых определяет для него те же атрибуты сегмента и смещения, которые должны быть у адреса следующей доступной ячейки памяти.

Формат операции

THIS атрибут или THIS дистанции

Пример.

Последовательность операторов

FIRST_BYTE EQU THIS BYTE

WORD_TABLE DW 100 DUP(?)

создает адресную константу FIRST_BYTE со значением, равным адресу переменной WORD_TABLE, и приписывает ей атрибут BYTE. Она выполняет ту же функцию, что и ранее рассмотренный оператор

FIRST_BYTE EQU BYTE PTR WORD_TABLE

С помощью операции THIS можно приписать ячейке с командой атрибут FAR. Модифицируем один из предыдущих примеров: при трансляции операторов

START EQU THIS FAR

МOV СX, 100

команда MOV получит атрибут FAR. Это позволит находящимся в других сегмен­тах командам JMP обеспечить прямой переход к метке START.

Операции HIGH и LOW возвращают соответственно старший и младший байты 16-битового выражения. Формат

HIGH выражение или HIGH значение

LOW выражение или LOW значение

Пример. Если константа определена оператором

CONST EQU 0ABCDH

то оператор

MOV АН, НIGН CONST

загрузит в регистр АН значение 0АВН.

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