Руководство по языку B.Pascal 7

       

Различия между выражениями Паскаля и ассемблера


Большинство важных различий между выражениями Паскаля и вы- ражениями встроенного ассемблера состоит в том, что выражения встроенного ассемблера должны при вычислении сводиться к значе- нию-константе, другими словами, к значению, которое можно вычис- лить на этапе компиляции. Например, с учетом описаний:

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;



Содержание раздела