Различия между выражениями Паскаля и ассемблера
Большинство важных различий между выражениями Паскаля и вы- ражениями встроенного ассемблера состоит в том, что выражения встроенного ассемблера должны при вычислении сводиться к значе- нию-константе, другими словами, к значению, которое можно вычис- лить на этапе компиляции. Например, с учетом описаний:
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. Корректной конструкцией встроенного ассемблера в этом случае будет:
asm mov ax,X add ax,Y mov Z,ax end;
Другим важным отличием выражений Паскаля и встроенного Ас- семблера является способ интерпретации переменных. В выражении Паскаля ссылка не переменную интерпретируется, как содержимое пе- ременной, но в выражении встроенного ассемблера ссылка на пере- менную означает адрес переменной. Например, в Паскале выражение X + 4, где X - переменная, означает содержимое X, плюс 4, а во встроенном ассемблере это означает содержимое в слове по адресу на 4 байта выше, чем адрес X. Поэтому, хотя допустима запись:
asm mov ax,X+4 end;
этот код не загружает значения X, плюс 4 в AX, а загружает значе- ние слова, записанного через 4 байта после X. Корректной записью сложения 4 с содержимым X будет:
asm MOV AX,X ADD AX,4 end;