vak: (бэсм-6)
[personal profile] vak
Пока что для Би на БЭСМ-6 я пришёл к следующему соглашению о связях. Вызов фукнции:
    result = foobar(a, b, c)
транслируется как:
       ,xta, a
       ,xts, b
       ,xts, c
    14 ,vtm, 3
    13 ,vjm, foobar
       ,atx, result
Заметьте: на регистре 14 передаётся количество аргументов. Это нужно, чтобы функции с переменным количеством аргументов могли правильно отыскать в стеке свой первый параметр. Иначе printf() не сможет работать.

Получается односторонняя совместимость с Фортраном. Из Би можно будет вызывать фортрановские функции. Но не наоборот.

Date: 2025-04-09 23:22 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Мой способ - передавать количество параметров в правом полуслове - хорош тем, что его всегда можно отличить. Если в правом полуслове по адресу -1(13) - команда ПВ, ПБ (после возможной оптимизации) или МОДА, то соглашение не соблюдено, и нужно пользоваться количеством параметров по умолчанию. А если "ЗП" - то в адресной части честное количество параметров.

Date: 2025-04-10 00:34 (UTC)
sab123: (Default)
From: [personal profile] sab123
В Би, в отличие от Си, заранее известно максимальное, а не минимальное количество параметров, которое можнет принять функция. Поэтому можно просто добивать нулями до максимума.

Date: 2025-04-10 01:08 (UTC)
sab123: (Default)
From: [personal profile] sab123
Через декларацию? Хотя, наверное, декларации там необязательны.