Цитата Сообщение от ibx Посмотреть сообщение
Взял из примеров весьма нужную функцию - two_word_to_real
Великолепно работает, но сам код не понял. Если можно поподробней разъясните пожалуйста.

FUNCTION two_word_to_real : REAL
VAR_INPUT
IN_Data: POINTER TO ARRAY[0..1] OF WORD; (*Указатель на массив регистров для Float*)
END_VAR
VAR
p1: POINTER TO BYTE;
p2: POINTER TO BYTE;
END_VAR

p1:=ADR(two_word_to_real);
p2:=ADR(IN_Data^[1]);
p1^:=p2^;
p1:=p1+1;
p2:=p2+1;
p1^:=p2^;
p1:=p1+1;
p2:=ADR(IN_Data^[0]);
p1^:=p2^;
p1:=p1+1;
p2:=p2+1;
p1^:=p2^;
Если коротко, то массив из двух регистров имеет 4 байта в следующей последовательности
1-й байт, 2-й байт, 3-й байт, 4-й байт

После выполнения функции последовательность будет такая
3-й байт, 4-й байт, 1-й байт, 2-й байт

Код:
FUNCTION two_word_to_real : REAL
VAR_INPUT
IN_Data: POINTER TO ARRAY[0..1] OF WORD; (*Указатель на массив регистров для Float (всего 4 байта)*)
END_VAR
VAR
p1: POINTER TO BYTE;	(указатель на результат функции)
p2: POINTER TO BYTE;	(*указатель на массив регистров*)
END_VAR

p1:=ADR(two_word_to_real);		(*указатель на начало результата функции (1-й байт)*)
p2:=ADR(IN_Data^[1]);			(*указатель на второй элемент массива (3-й байт) *)
p1^:=p2^;			(*копируем содержимое по адресу второго указателя в адрес первого указателя *)
p1:=p1+1;			(*смещаем адрес на 1 байт, теперь он указывает на 2-й байт результата*)
p2:=p2+1;			(*смещаем адрес на 1 байт, теперь он указывает на 4-й байт массива*)
p1^:=p2^;			(*копируем содержимое по адресу второго указателя в адрес первого указателя *)
p1:=p1+1;			(*смещаем адрес на 1 байт, теперь он указывает на 3-й байт результата*)
p2:=ADR(IN_Data^[0]);			(*указатель на первый элемент массива (1-й байт) *)
p1^:=p2^;			(*копируем содержимое по адресу второго указателя в адрес первого указателя *)
p1:=p1+1;			(*смещаем адрес на 1 байт, теперь он указывает на 4-й байт результата*)
p2:=p2+1;			(*смещаем адрес на 1 байт, теперь он указывает на 2-й байт массива*)
p1^:=p2^;			(*копируем содержимое по адресу второго указателя в адрес первого указателя *)