Важная информация

User Tag List

Страница 4 из 10 ПерваяПервая 12345678 ... ПоследняяПоследняя
Показано с 31 по 40 из 99

Тема: Вызов функций через RST

  1. #31
    Vitamin C++ Аватар для Vitamin
    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,258
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    84
    Поблагодарили
    36 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от axor
    Тогда получается, что для каждого рестарта нужна своя таблица адресов функций, а это, как мне кажется, расточительно.
    не более расточительно, чем хранить таблицы переходов для каждой подфункции. зато геморроя меньше.

  2. #31
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #32
    Master
    Регистрация
    20.01.2005
    Адрес
    Россия, Вологда
    Сообщений
    957
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Vitamin
    не более расточительно, чем хранить таблицы переходов для каждой подфункции. зато геморроя меньше.
    Длина таблиц подфункций ограничена количеством этих самых подфункций. Количество же функций должно быть максимально возможным. Это по моему вразумению. Но, как водится, у каждого оно свое.
    axor/Perspective
    http://abzac.retropc.ru/

  4. #33
    Guru Аватар для SAM style
    Регистрация
    28.02.2005
    Адрес
    Великий Новгород
    Сообщений
    2,055
    Спасибо Благодарностей отдано 
    10
    Спасибо Благодарностей получено 
    218
    Поблагодарили
    92 сообщений
    Mentioned
    9 Post(s)
    Tagged
    0 Thread(s)

    Exclamation Вот какая мысля возникла...

    А тут никто не подумал, что будет если пытливый мозг вроде моего попытается вызвать подфункцию с номером, превышающим число подфункций у данной функции? В лучшем случае будет вызов совсем другой проги, а в худшем - ступор компа. Либо защиту от такого мараZьма ставить надо, либо избавляться от подфункций.
    Все любят гипножабу

  5. #34
    Guru Аватар для CHRV
    Регистрация
    18.01.2005
    Адрес
    Москва
    Сообщений
    3,695
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    RST использовались как функции в Спринтере 2000 в его ОСИ Estex. Можно сказать достаточно удобно с точки зрения программирования. Хотя никто не мешает сделать керналь как в CP/M (таблицу вызовов).

    Пожалуйста пишите в email (chunin{гаф}mail{тчк}ru), личка отключена!!!

    NedoPC group. ZX-Evolution, ATM Turbo 2+, Pentagon1024SL.
    [Предлагаю: ZXEvo, PAL coder, NeoGS, TS-FM, YM2149, Z80 и прочее]
    Все здесь: http://www.nedopc.com.
    Новости/поддержка/Faq: http://forum.nedopc.com.
    Раздача халявы: http://forum.nedopc.com/viewtopic.php?f=32&t=977

  6. #35
    Master
    Регистрация
    20.01.2005
    Адрес
    Россия, Вологда
    Сообщений
    957
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от SAM style
    А тут никто не подумал, что будет если пытливый мозг вроде моего попытается вызвать подфункцию с номером, превышающим число подфункций у данной функции? В лучшем случае будет вызов совсем другой проги, а в худшем - ступор компа. Либо защиту от такого мараZьма ставить надо, либо избавляться от подфункций.
    Самой первой функцией, которую должна вызвать программа - это проверка номера версии ядра. Если номер версии больше, чем нужно (новее значит, а значит и все старые функции доступны), то работаем дальше, иначе, закрываем программу.
    axor/Perspective
    http://abzac.retropc.ru/

  7. #36
    Activist Аватар для fk0
    Регистрация
    18.02.2005
    Адрес
    St. Petersburg
    Сообщений
    415
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от SAM style
    ex (sp),hl стек: адрес процедуры, адрес возврата, парам.HL - в HL
    ret переход на адрес процедуры.

    Где порча HL? Убей, не вижу.

    Без этих ex (sp), hl получается существенно быстрей.

  8. #37
    Activist Аватар для fk0
    Регистрация
    18.02.2005
    Адрес
    St. Petersburg
    Сообщений
    415
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Sinus
    fk0
    в современных осях на современных пэцэтах есть современный protected mode, в котором можно переопределить адреса переходов комманд int 0x00 ... int 0xFF.
    И на "несовременных пэцэтах" тоже можно. Суть не в том.
    Суть в том, что номера int жёстко закреплены за функциями.
    Ибо без какого-либо минимального набора вообще никак.

    чтобы код программы мог быть запущен, необязательно передавать параметры через стек, патчить прогу или использовать конструкции вида RST XX: DB YY
    надо всего лишь прийти к какому- либо соглашению о передаче параметров и вызовах функций. допустим
    Да. Но это соглашение должно быть. Вот именно в этом суть.

    с адреса #0000 находится 256 jp XXXX. это системные вызовы. параметры передаются в регистрах. если нужно передать адрес, то он всегда в HL, если нужно передать один байт, то он всегда в A.
    Это фактически мой вариант. Просто таблица переходов размещается в ПЗУ и патчить её не надо, потому как само
    ПЗУ уж знает где его функции находятся.

    Что касается аргументов я предпочитаю следовать соглашениям
    принятым для компилятора HiTech-C. Они достаточно удобны.
    Аргументы передаются в DE, BC и далее в стеке. Результат
    возвращается в HL. Иногда я отступаю от таких соглашений,
    когда передача через HL или A более эффективна. Но такие
    функции обычно "внутренние" для программы, наружу не
    экспортируются, поэтому в их отношении допустимо всё что
    угодно.

    Регистр HL и A имеют специальное значение. При программировании
    в OO-стиле в HL содержится указатель на структуру-объект,
    первым элементом которой является адрес массива "JP xxx" указателей виртуальных функций. При вызове виртуальной функции
    регистр A используется под её номер (до 85 функций). Схема
    примерно такая:
    Код:
    ; В коде программы:
         ...
         ld hl, object_or_inherited_object
         call virtual_function
         ...
         call non_virtual_function
         ...
    
    ; В коде включаемого "*.h"-файла
    virtual_function:
         ld a, function_number
         jp call_virtual
         ...
    ; таблица функций -- патчится после загрузки:
    ; номера функций заменяются их адресами извлечёнными
    ; из таблицы функций библиотеки (располагается в файле библиотеки)
    non_virtual_function:
         jp function_number
    non_virtual_function2:
         jp function_number2
         ...
    
    
    ; В коде файла поддержки виртуальных функций:
    call_virtual:
          ; здесь A складывается с (HL) и извлекается адрес
          ; из таблицы виртуальных функций
          ; присутствующей в файле библиотеки
          ....
          ex (sp), hl
          ret              ; ~120 тактов
    
    
    ;---------------------------------------------------------------------
    
    ; В коде файла библиотеки 
    ; ВАЖНО: компилируется НЕЗАВИСИМО от файла основной программы
    ; и динамически подгружается "на лету"
    virtual_function:
          ....  ; обычный код
          ret
    
    non_virtual_function:
          ....  ; обычный код
          ret
    Множественное наследование не предусмотрено, ибо сложно
    получается.

    далее всё зашибенно работает.
    Да. Был бы на это ЕДИНЫЙ СТАНДАРТ...

  9. #38
    Veteran Аватар для Sinus
    Регистрация
    29.01.2005
    Адрес
    Belarus, Grodno
    Сообщений
    1,279
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от fk0
    Что касается аргументов я предпочитаю следовать соглашениям принятым для компилятора HiTech-C. Они достаточно удобны.
    {{skip}}
    Регистр HL и A имеют специальное значение. При программировании
    в OO-стиле в HL содержится указатель на структуру-объект,
    это если объектами рулить.
    как показывает практика, ООП эффективно только на достаточно больших задачах.
    в случае спектрума зачастую обычный процедурный подход оказывается эффективнее.

    Множественное наследование не предусмотрено, ибо сложно
    получается.
    оно нужно так же как и goto (т.е. ненужно почти никогда)

    Да. Был бы на это ЕДИНЫЙ СТАНДАРТ...
    о! да...
    но его нет ^_~
    [target] [zemu] [js8x] [pouet] KAY-1024, 5''FDD, 3''FDD, HDD

  10. #39
    Vitamin C++ Аватар для Vitamin
    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,258
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    84
    Поблагодарили
    36 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от fk0
    При программировании
    в OO-стиле в HL содержится указатель на структуру-объект,
    первым элементом которой является адрес массива "JP xxx" указателей виртуальных функций.
    а почему бы не использовать для этих целей индексный регистр? имхо это более рационально (все-таки структура). а вторую регистровую пару использовать для хранения адреса переменных на стеке. получается довольно неплохо

  11. #40
    Activist Аватар для fk0
    Регистрация
    18.02.2005
    Адрес
    St. Petersburg
    Сообщений
    415
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Sinus
    это если объектами рулить.
    как показывает практика, ООП эффективно только на достаточно больших задачах.
    в случае спектрума зачастую обычный процедурный подход оказывается эффективнее.
    Практика показывает, во-первых, что и из мухи можно раздуть большую задачу. Во-вторых эффективного и неэффективного
    ООП и чего-нибудь ещё попросту не бывает. Вполне конкретную
    задачу (программу) можно рассматривать как с точки зрения ООП,
    так и как систему конечных автоматов, как и чёрт знает что ещё --
    она от этого не меняется. Просто не нужно упираться во что-то
    одно.

    оно нужно так же как и goto (т.е. ненужно почти никогда)
    Отсутствие goto -- это вынос блока в отдельную функцию.
    Отдельная функция -- это отдельное несвязанное пространство
    имён и связывание переменных через аргументы по ссылке.
    Или, как альтернатива, масса логических условий прекращения цикла.
    В целом получается достаточно запутанно для понимания и неэффективно с точки зрения кодирования.

    А если идти и дальше
    этим путём, то любые операторы ветвления и циклов тоже
    не нужны. Ибо они реально, без почти, не нужны. Программа
    может быть элементарно преобразована в эквиэвалентную,
    использующую исключительно функции и оператор '?' (в языке C).

    Глупость про ненужность goto -- это типичный "слышал звон,
    но совершенно не в курсе дела о чём вообще речь". Если он такой
    ненужный, чего ж он мало того, что в последних версиях стандартов
    остался, так ещё и обрастает разными расширениями? То-есть
    да, он таки не нужен, ровно в той степени, как ненужны while и for.

Страница 4 из 10 ПерваяПервая 12345678 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Подключение клона "Байт" к ТВ через RGB.
    от Surfin_Bird в разделе Изображение
    Ответов: 6
    Последнее: 11.03.2013, 16:59
  2. Ответов: 6
    Последнее: 09.12.2007, 22:02
  3. Ответов: 8
    Последнее: 01.05.2006, 01:38
  4. Принтер через 580ВВ55
    от Sonic в разделе Несортированное железо
    Ответов: 14
    Последнее: 08.06.2005, 09:26

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •