Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Вс ноя 10, 2024 16:47

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Ответить
Имя пользователя:
Заголовок:
Текст сообщения:
Введите текст вашего сообщения. Длина сообщения в символах не более: 60000

Размер шрифта:
Цвет шрифта
Настройки:
BBCode ВКЛЮЧЕН
[img] ВЫКЛЮЧЕН
[flash] ВЫКЛЮЧЕН
[url] ВКЛЮЧЕН
Смайлики ВЫКЛЮЧЕНЫ
Отключить в этом сообщении BBCode
Не преобразовывать адреса URL в ссылки
Вопрос
Теперь гостю придется вводить здесь пароль. Не от своей учетной записи, а ПАРОЛЬ ДЛЯ ГОСТЯ, получить который можно после регистрации на форуме через ЛС.:
Этот вопрос предназначен для выявления и предотвращения автоматических регистраций.
   

Обзор темы - Nova Дневник разработчика
Автор Сообщение
  Заголовок сообщения:  Re: Nova Дневник разработчика  Ответить с цитатой
Victor__v писал(а):
Можно ещё OR SP, 15
Да, но тут экономии не будет
Сообщение Добавлено: Чт апр 04, 2024 20:41
  Заголовок сообщения:  Re: Nova Дневник разработчика  Ответить с цитатой
Total Vacuum писал(а):
Ну тогда заодно и or esp,15 вместо or rsp,15, раз уж пошла такая пьянка

Вах, экономия 1 байт)

Можно ещё OR SP, 15 предложить, тогда)
Сообщение Добавлено: Чт апр 04, 2024 16:25
  Заголовок сообщения:  Re: Nova Дневник разработчика  Ответить с цитатой
Точно.
Сообщение Добавлено: Чт апр 04, 2024 14:23
  Заголовок сообщения:  Re: Nova Дневник разработчика  Ответить с цитатой
Ну тогда заодно и or esp,15 вместо or rsp,15, раз уж пошла такая пьянка
Сообщение Добавлено: Чт апр 04, 2024 14:19
  Заголовок сообщения:  Re: Nova Дневник разработчика  Ответить с цитатой
Заменил у себя.
Спасибо.
Сообщение Добавлено: Чт апр 04, 2024 11:08
  Заголовок сообщения:  Re: Nova Дневник разработчика  Ответить с цитатой
Victor__v писал(а):
В общем на фасме обошёлся двумя макросами перед вызовами:

macro SKIP {
MOV RSI, RSP
SUB RSP, 15
SAR RSP, 4
SAL RSP, 4
SUB RSP, 32
}

macro OFF { MOV RSP, RSI }

Поскольку эти фрагменты теперь вызываются постоянно, то буду рад, если вы приведёте более быстрый код выравнивания, если вообще что-то есть быстрее сдвигов.


macro SKIP {
MOV RSI, RSP
OR RSP, 15
SUB RSP, 32+15
}
Сообщение Добавлено: Ср апр 03, 2024 17:05
  Заголовок сообщения:  Re: Nova Дневник разработчика  Ответить с цитатой
Теперь осталось придумать зачем надо переусложнять систему на ровном месте)
Сообщение Добавлено: Ср апр 03, 2024 11:24
  Заголовок сообщения:  Re: Nova Дневник разработчика  Ответить с цитатой
Victor__v писал(а):
Как будут шифроваться реальные адреса тогда? Вы же подразумеваете, как я понял, отделение части ячейки стека под базу и часть под смещение.

Предполагается, что форт-программа не сможет оперировать реальными адресами. "Нереальный адрес" это просто число, старшие биты которого - порядковый номер кучи, младшие - смещение от начала кучи.

Victor__v писал(а):
Моделируем ситуацию: Вот выделили в хипе условный мегабайт, а винда дала куче адрес размером под 7 байт еще и не выровненный. Как его шифровать?

Предполагается, что ядро имеет динамический массив указателей на начало кучи (выделенный виндой адрес), индекс в этом массиве и есть порядковый номер кучи, смещение для выделенного адреса нулевое.

Чтобы сконвертировать в реальный адрес, отделяем номер кучи от смещения, берём адрес кучи из массива, используя номер кучи в качестве индекса, и добавляем смещение. Это низкоуровневая операция и она недоступна программам на форте, только определённое количество слов ядра, работающих с памятью, должны это делать.

Первые элементы массива указателей не обязательно должны быть кучей. Например указатель с индексом ноль может указывать на начало ядра, а с индексом 1 на стек первого (основного) потока, 2 - стек возвратов этого потока.

В принципе, можно базу:смещение сделать по 32 бита, тогда проще будет отделять базу от смещения, просто грузить из стека первый или второй dword. А если нужно выделить кучу больше 4Гб то номер кучи нужно выровнять так, чтобы смещение не конфликтовало с номером (т.е. пропустить несколько элементов массива адресов до нужного номера с достаточным количеством младших нулевых бит) и заполнить элементы так, чтобы первый был реальным адресом кучи, второй = адрес+4Гб, третий +8Гб и т.д.

Хотя, в этом случае будет невозможно увеличить размер кучи, если последующие элементы массива будут уже заняты. Но, раз уж мы оперируем гигабайтами, то можно резервировать для каждой кучи например по 256 номеров подряд (а это будет куча до 1Тб).

Будет полезно хранить в первых ячейках кучи такие параметры как: размер кучи, порядковый номер кучи (т.е. её виртуальный адрес), может что-то ещё.
Сообщение Добавлено: Вт апр 02, 2024 23:10
  Заголовок сообщения:  Re: Nova Дневник разработчика  Ответить с цитатой
tsdima писал(а):
Я имел ввиду, что в стеке будут только адреса вида "база+смещение". Каждый раз перед их использованием, слова @ ! должны конвертировать их в нормальный адрес. И соответственно, например слово-переменная, помещать в стек тоже адрес вида "база+смещение". Арифметические операции над такими адресами (при условии, что база в старших битах 64-битного слова), тоже допустимы. Мы же не складываем адрес+адрес. Вычитать адреса (адрес-адрес) из разных хипов смысла не имеет.

Вообще, не видя кода, сложно давать советы. Где можно посмотреть то, что есть сейчас?


Как будут шифроваться реальные адреса тогда? Вы же подразумеваете, как я понял, отделение части ячейки стека под базу и часть под смещение.

Моделируем ситуацию: Вот выделили в хипе условный мегабайт, а винда дала куче адрес размером под 7 байт еще и не выровненный. Как его шифровать?

Код Новы выложу позже.
Сообщение Добавлено: Пт мар 29, 2024 18:10
  Заголовок сообщения:  Re: Nova Дневник разработчика  Ответить с цитатой
Я имел ввиду, что в стеке будут только адреса вида "база+смещение". Каждый раз перед их использованием, слова @ ! должны конвертировать их в нормальный адрес. И соответственно, например слово-переменная, помещать в стек тоже адрес вида "база+смещение". Арифметические операции над такими адресами (при условии, что база в старших битах 64-битного слова), тоже допустимы. Мы же не складываем адрес+адрес. Вычитать адреса (адрес-адрес) из разных хипов смысла не имеет.

Вообще, не видя кода, сложно давать советы. Где можно посмотреть то, что есть сейчас?
Сообщение Добавлено: Пт мар 29, 2024 15:29
  Заголовок сообщения:  Re: Nova Дневник разработчика  Ответить с цитатой
Окей, напишите реализацию слов C! C@ @ ! , которые будут работ с базой+смещение, а также одновременно с нормальными адресами. Покажите мастер-класс.
Сообщение Добавлено: Пт мар 29, 2024 13:27
  Заголовок сообщения:  Re: Nova Дневник разработчика  Ответить с цитатой
Victor__v писал(а):
Как работать с выделенной памятью в хипе?

При помощи слов @ ! C@ C!

Victor__v писал(а):
Как работать с выделенной памятью в стеке?

Допустим, что стек это тоже хип.

Victor__v писал(а):
Как модифицировать уже существующий код?

Приобрести достаточно пива для этого марафона. :)

Victor__v писал(а):
Как писать компилирующие слова (аля 0x65 c 0x48 c,)?

А код тоже располагается в хипе? Для локальных вызовов можно использовать относительный call. А как вызываются слова из другого хипа? Адрес CFA тоже ведь указатель.

Victor__v писал(а):
Ладно бы Вы предложили для работы связок база+смещение отдельный набор слов, так нет жеж) Предлагаете всё менять.

С точки зрения обычного пользователя форта, отдельный набор слов для работы связок база+смещение - это неприемлемо. Поэтому да, всё менять. :)
Сообщение Добавлено: Чт мар 28, 2024 19:12
  Заголовок сообщения:  Re: Nova Дневник разработчика  Ответить с цитатой
tsdima писал(а):
Немного усложнится только ядро. Но оно обычно не очень большое, и не все слова работают с памятью. Всё, что написано на форте, останется таким-же простым.


Ядро усложнится не немножко, а офигеть как) Работа с памятью вот просто везде.
Как работать с выделенной памятью в хипе?
Как работать с выделенной памятью в стеке?
Как модифицировать уже существующий код?
Как писать компилирующие слова (аля 0x65 c 0x48 c,)?

Ладно бы Вы предложили для работы связок база+смещение отдельный набор слов, так нет жеж) Предлагаете всё менять.
Сообщение Добавлено: Чт мар 28, 2024 15:03
  Заголовок сообщения:  Re: Nova Дневник разработчика  Ответить с цитатой
Victor__v писал(а):
И как бы переход на реальные адреса упрощает систему.

Немного усложнится только ядро. Но оно обычно не очень большое, и не все слова работают с памятью. Всё, что написано на форте, останется таким-же простым.
Сообщение Добавлено: Ср мар 27, 2024 18:02
  Заголовок сообщения:  Re: Nova Дневник разработчика  Ответить с цитатой
Victor__v писал(а):
(система 64-битная).

Ну 20 бит номер, 44 бита смещение. Лям динамических куч по 16 терабайт. Хватит? :)
Сообщение Добавлено: Ср мар 27, 2024 17:59

Часовой пояс: UTC + 3 часа [ Летнее время ]


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB