Операторы
Операторы определяют действие, исполняемое программой. Операторы
отделяются друг от друга точкой с запятой (;). Операторам может
предшествовать метка, которая содержит идентификатор или беззнаковую
целую константу.
Присваивание
Составные операторы
Оператор Case
Оператор For
Оператор Goto
Оператор If
Оператор InLine
Оператор Repeat
Оператор While
Оператор With
Mem, MemW, MemL и MemD
Port, PortW и PortD
Присваивание
Этот оператор присваивает переменной какое-либо значение.
Присваивание имеет следующую форму:
Переменная := Выражение;
где значение, возвращенное
выражением, сохраняется в
переменной.
Тип значения, возвращенного
выражением, должен быть совместим
с типом
переменной. Если переменная появляется в
выражении, то в выражении она имеет значение, которое было у нее до
присваивания. Ниже приведены примеры присваивания:
const
Letter = 'A';
var
Alpha : Char;
Value, i : Integer;
l : Longint;
s : String;
begin
Alpha := Letter;
s := 'A string variable';
Value := $643F;
i := 2675;
l := 200 + (Value * i);
end.
Составные операторы
Составные операторы заключаются в операторные скобки -
зарезервированные слова
begin и
and. Они имеют следующую форму:
begin
[оператор [; оператор]]
end
Составные операторы позволяют размещать два или более операторов
там, где операторы вызываются в пределах других операторных скобок.
Оператор Case
Оператор
case выбирает оператор из списка, в соответствии со
значением
Выражения. Операторы
case имеют следующую форму:
case Выражение of
Селектор : Оператор
[else Оператор]
end;
где
Выражение - это значение порядкового типа. Значение выражения
сравнивается с каждым
Селектором. Если они равны, то
выполняется оператор после соответствующего
Селектора.
В этом случае управление передается от оператора
case соответствующему оператору.
Если никакой
Селектор не соответствует
Bыражению, тогда
управление переходит к дополнительному пункту
else.
Селектор
должен оценить константу во время компиляции, и определен как:
Выражение [..Выражение] [,Выражение [..Выражение]]
Если .. - это последовательность других выражений
case, то
происходит обращение к полному диапазону между первым выражением и
вторым выражением. Пример оператора
case:
case Int of
5 : WriteLn('Int is 5');
7..12,15 : WriteLn('Between 7..12 or 15');
else begin
WriteLn('Undefined.');
GetNextInt;
end;
end;
Выполнение для больших операторов
case улучшается, если
наиболее часто употребляемые "подселекторы" перечислены первыми.
Оператор For
Оператор
for предназначен для выполнения одного или более
операторов. Оператор
for выполняет цикл для предопределенного
числа итераций. Оператор
for имеет следующую форму:
for Переменная := Выражение to (или downto) Выражение
do Оператор
где
Переменная должна иметь порядковый тип. Первое
Bыражение
после
Переменной - начальное значение, которое присваивается переменной, а
второе
Выражение - предел на диапазоне значений, которые будут
присвоены переменной. Оба выражения должны иметь совместимый тип.
to или
downto определяют, увеличивается переменная или
уменьшается после каждой итерации цикла. Если определен
to,
то
Переменная увеличивается до тех пор, пока она не достигнет значения
второго
Bыражения.
downto уменьшает
Переменную, пока она не
достигнет нижнего предела второго
Выражения.
Примеры цикла
for:
for i := 1 to 100 do
begin
WriteLn(i);
Intarray[i] := i + 4;
end;
for x := 5 downto 2 do
WriteLn(x);
Цикл
for не выполняется, если первое выражение больше или
меньше чем второе выражение в зависимости от того, был ли определен
to или
downto. Например следующий цикл не выполняется:
for i := 5 to 4 do
WriteLn('Will never output this string!');
Индексная переменная для цикла
for должна быть или глобальной
переменной или локальной в процедуре, которой принадлежит цикл.
Оператор Goto
Как было сказано выше, операторам могут предшествовать метки. Оператор
goto передает управление к определенной метке. Формат оператора
goto:
goto Метка;
где
Метка была предварительно объявлена в текущем блоке.
Пример оператора
goto:
label
GotoLoop;
var
i: Integer;
begin
i := 1;
GotoLoop:
WriteLn(i);
Inc(i,2);
if i < 100 then
goto GotoLoop;
end.
Оператор If
Оператор
if выполняет один из двух
Oператоров, в зависимости от
значения
Выражения. Оператор
if имеет следующую форму:
if Выражение then
Оператор
[else Оператор]
где значение выражения оценивается как логическое. Если результат
выражения равен
True (истина), тогда выполняется
Оператор после зарезервированного
слова
then. В этом случае управление передается
первому оператору после оператора
if.
Если выражение оценивается как
False (ложь), и присутствует
слово
else, то выполняется оператор, следующий за этим словом.
Если слова
else нет, и выражение равно
False, тогда
оператор
if не выполняется. Пример:
if Flag then
WriteLn('Expression is True')
else
WriteLn('Expression is False');
Конец оператора
if обозначается точкой с запятой (;). В
вышеупомянутом примере, если
Flag - константа, тогда TMT Паскаль
оптимизирует генерацию кода и автоматически удаляет код, который
никогда не выполняется.
Оператор InLine
Оператор
InLine используется, чтобы определить короткую
процедуру машинного языка. Встроенные процедуры обрабатываются как
макросы - быстрее, чем вызовы процедуры, и поэтому чрезвычайно
эффективны. Рекомендуется, чтобы Вы имели полное знание 32-битного
ассемблера перед написанием машинного кода макроса.
function IsLower(Ch:Char):Boolean;
inline(
$58/ { pop eax }
$3C/$61/ { cmp al,'a' }
$0F/$90/$C4/ { setge ah }
$3C/$7A/ { cmp al,'z' }
$0F/$9E/$C0/ { setle al }
$22/$E0) { and al,ah }
Обратите внимание на использование новых команд 80386 и 80486.
Для получения дополнительной информации относительно расширений 386
и 486 обращайтесь к руководству на ваш процессор.
Оператор Repeat
Оператор
Repeat, подобно оператору
for, выполняет один
или более операторов в цикле. В отличие от оператора
for, где
условие цикла проверяется перед каждой итерацией, условие оператора
Repeat проверяется после каждой итерации. Поэтому цикл
Repeat
выполняется по крайней мере один раз. Оператор
Repeat имеет
следующую форму:
repeat
Оператор [; Оператор]
until Выражение;
где цикл выполняется до тех пор, пока
Выражение не примет
логическое значение
True. Если Выражение
Ложно, цикл
выполняется снова. Пример:
repeat {Ничего не делает} until KeyPressed;
Оператор While
Оператор
While выполняет один или более операторов в цикле.
Оператор
While имеет следующую форму:
while Выражение do
Оператор
где
Выражение оценивается как логический тип. Цикл
While
выполняется, пока выражение не примет значение
False. Если оно равно
False,
управление передается первому оператору после цикла
While.
Оператор With
Оператор
Whith позволяет обращаться к полю записи, как к
независимой переменной. Оператор
Whith имеет следующую форму:
with Переменная [, Переменная] do
Оператор
где
Переменная обращается к записи. Оператор может обратиться к полям
переменной без определения имени переменной. Пример:
type
ScreenString = record
x,y : Integer;
str : String;
end;
var
ScrnSay : ScreenString;
begin
with ScrnSay do
begin
x := 5;
x := 5;
y := 10;
str := 'Hello World!';
end;
end.
Mem, MemW, MemL и MemD
TMT Паскаль осуществляет четыре предопределенных массива для
непосредственного обращения к памяти:
Mem, MemW, MemL и
MemD.
Каждый компонент оператора Mem - это Byte
Каждый компонент оператора MemW - это Word
Каждый компонент оператора MemL - это Longint.
Каждый компонент оператора MemD - это DWORD.
См. также:
Организация памяти
Port, PortW и PortD
TMT Паскаль осуществляет три предопределенных массива, чтобы
непосредственно обратиться к портам данных ЦЕНТРАЛЬНОГО ПРОЦЕССОРА
80x86:
Port, PortW и
PortD.
Port, PortW и
PortD - одномерные массивы, и каждый
элемент представляет порт данных, чей адрес порта соответствует его
индексу.
- Каждый компонент оператора Port - это Byte
- Каждый компонент оператора PortW - это Word
- Каждый компонент оператора PortD - это DWORD.
Когда значение присваивается компоненту
Port, PortW или
PortD,
значение - это вывод на выбранный порт. Когда компонент
Port, PortW или
PortD
указан в выражении, его значение - это вход от выбранного порта.