Передача Pointer в FC

    • #92603
      Николай
      Ключник

      dyakov72 Февраль 02, 2023 5:53

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

      Код:

      var_in: point : Pointer, CALL FC1 in: p#db1.dbx0.0

      В теле функции мы хотим выделить из входного параметра обычный 32 битный указатель и это можно сделать следующим образом:
      1 вариант

      Код:

      L P##point LAR1 L D[AR1,p#2.0] T LD0

      и второй, более красивый)

      Код:

      L P##point TAK T LD0

      Вопрос по 2 варианту, каким образом в аккумулятор 1 попадает наш желаемый 32 битный указатель до операции LP##point? Спасибо.

      Usver Февраль 03, 2023 4:30

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

      Код:

      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.
      Т.е. происходит что-то вроде

      Код:

      mov eax, 987 mov ebx, 123456 mov ecx, 654321 push eax push ebx push ecx call FC1 

      dyakov72 Февраль 03, 2023 5:09

      Может быть не AR1 и AR2, а аккумулятор 1 и 2? Тогда последний входной параметр функции помещается в аккумулятор 1.

      Usver Февраль 03, 2023 5:24

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

Viewing 0 reply threads
  • Вы должны войти в систему, чтобы ответить в этой теме.
Интepecнoe нa фopумe:
Авторизация
*
*
Регистрация
*
*
*
Генерация пароля
×