XOR
Зарезервированные слова всегда имеют приоритет над идентификаторами пользователя. Например фрагмент кода:
VAR
Ch: Char;
...
asm
mov ch,1
end;
загружает 1 в регистр CH, а не в переменную Ch. Для доступа к символу, определенному пользователем с тем же именем, Вы должны использовать & для перекрытия оператора:
asm
mov &ch,1
end;
Мы настоятельно рекомендуем Вам избегать определения идентификаторов с теми же именами, что и зарезервированные слова встроенного Ассемблера, поскольку это может привести к труднонаходимым ошибкам.
Выражения.
Встроенный Ассемблер вычисляет все выражения, как 32-битовые целые выражения; он не поддерживает значения с плавающей точкой и строковые значения, за исключением строковых констант.
Выражения встроенного Ассемблера строятся из элементов выражения и операторов и каждое выражение связано с классом и типом выражения. Эти концепции объясняются в следующих разделах.
Различия между выражениями Паскаля и Ассемблера.
Наиболее важное отличие между выражениями Паскаля и встроенного Ассемблера в том, что выражения встроенного Ассемблера должны разрешаться в константное значение, т.е. значение должно быть вычислено во время компиляции. Например, для объявлений
const
X = 10;
Y = 20;
var
Z: Integer;
следующий оператор разрешен:
asm
mov Z,X+Y
end;
Поскольку X и Y - константы, выражение X+Y наиболее удобный способ написания константы 30, а результирующая инструкция будет пересылать непосредственное значение 30 в переменную Z, размером в слово. Но если Вы объявите X и Y как переменные:
var
X, Y: Integer;
встроенный Ассемблер не сможет вычислить значение X+Y во время компиляции. Встроенный Ассемблер для пересылки суммы X+Y
генерирует:
asm
mov ax,X
add ax,Y
mov Z,ax
end;
Другое важное отличие между выражениями Паскаля и встроенного
Ассемблера в способе интерпретации переменных. В выражении Паскаля ссылка на переменную интерпретируется как содержимое переменной, а в выражении встроенного Ассемблера ссылка на переменную означает адрес этой переменной. Например, в Паскале выражение X+4, где Х переменная, означает содержимое X+4, а во встроенном Ассемблере это означает содержимое слова с адресом на 4 байта выше, чем адрес Х.
Так даже если Вы можете написать
asm
mov ax,X+4
end;
этот код не загружает значение Х+4 в AX, а загружает значение слова, хранящегося по адресу на 4 байта выше Х. Корректный способ добавить 4 к содержимому Х:
asm
MOV AX,X
ADD AX,4
end;
Элементы выражения.
Основные элементы выражения - это константы, регистры и символы.
Константы.
Встроенный Ассемблер поддерживает 2 типа констант: числовые константы и строковые константы.
Числовые константы.
Числовые константы должны быть целыми и их значения должны быть в диапазоне от -2,147,483,648 до 4,294,967,295.
Числовые константы по умолчанию используют десятичную нотацию, но встроенный Ассемблер так же поддерживает двоичную, 8-ричную и 16
-ричную нотации. Двоичная нотация выбирается написанием В после числа, 8-ричная нотация выбирается написанием буквы О после числа и
16-ричная нотация выбирается написанием Н после числа или $ до числа.
Примечание: Суффиксы B, O, H не поддерживаются в выражениях
Паскаля. Выражения Паскаля допускают только десятичную нотацию (по умолчанию) и 16-ричную нотацию (используя префикс $).
Числовые константы должны начинаться с одной из цифр 0..9 или символа $; так, когда Вы пишите 16-ричную константу, используя суффикс Н, требуется дополнительный 0 в начале числа, если первая значащая цифра одна из 16-ричных цифр А..F. Например, 0BAD4H и
$BAD4 - 16-ричные константы, а BAD4H - идентификатор, поскольку начинается с буквы, а не с цифры.
Строковые константы.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.