Передача Pointer в FC

Промышленные Логические Контроллеры SIMATIC S7-200/300/400
dyakov72
Posts: 56
Joined: Tue Feb 28, 2006 3:02 pm
Location: Russia

Передача Pointer в FC

Post by dyakov72 »

Добрый день, помогите разобраться. имеется функция FC1 с входным параметром

Code: Select all

var_in: point : Pointer,
CALL FC1
in: p#db1.dbx0.0
В теле функции мы хотим выделить из входного параметра обычный 32 битный указатель и это можно сделать следующим образом:
1 вариант

Code: Select all

L P##point
LAR1
L D[AR1,p#2.0]
T LD0
и второй, более красивый)

Code: Select all

L P##point
TAK
T LD0
Вопрос по 2 варианту, каким образом в аккумулятор 1 попадает наш желаемый 32 битный указатель до операции LP##point? Спасибо.
Usver
Posts: 193
Joined: Fri Feb 24, 2012 8:28 am

Re: Передача Pointer в FC

Post by Usver »

Добрый день. Я тоже сегодня попробовал так сделать, результат точно такой же.
Вот только L P##point и ТАК можно не писать. Можно сразу T LD0.
И вообще похоже, что AR1 - это верхушка стека, и скорее всего оно работает примерно так:

Code: Select all

call FC 1
	in1: DW#16#987
	in2: DW#16#123456
	in3: DW#16#654321
где in1, in2, in3 - DWORD. И тогда в AR1 = DW#16#654321, AR2 = DW#16#123456.
Т.е. происходит что-то вроде

Code: Select all

mov eax, 987
mov ebx, 123456
mov ecx, 654321
push eax
push ebx
push ecx
call FC1
dyakov72
Posts: 56
Joined: Tue Feb 28, 2006 3:02 pm
Location: Russia

Re: Передача Pointer в FC

Post by dyakov72 »

Может быть не AR1 и AR2, а аккумулятор 1 и 2? Тогда последний входной параметр функции помещается в аккумулятор 1.
Usver
Posts: 193
Joined: Fri Feb 24, 2012 8:28 am

Re: Передача Pointer в FC

Post by Usver »

Да. Именно так. Я перепутал названия. Хотел написать ACCU1 и ACCU2.