User Tag List

Показано с 1 по 10 из 111

Тема: Кросскомпилятор Си под 8080

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    01.12.2010
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,657
    Записей в дневнике
    21
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от predatoralpha Посмотреть сообщение
    ld hl, (clrscr_dest)
    ld (hl), a
    В ячейке clrscr_dest хранится адрес, который предыдущей строкой увеличивается.

    Нет на 8080 команды ld ((clrscr_dest)), A

    А вот на PDP-11 есть.

    ---------- Post added at 14:31 ---------- Previous post was at 14:30 ----------

    Цитата Сообщение от predatoralpha Посмотреть сообщение
    А вот здесь у тебя неверный код, вроде
    while(c--);
    dec bc
    ld a, b
    or c
    jp nz, l5
    У тебя код не постдекрементный, а преддекрементный. Т.е. для случая while(--c), а не while(c--).
    Да, я пока одну версию операторов написал. Сегодня поправлю, а то забуду.

    ---------- Post added at 14:34 ---------- Previous post was at 14:31 ----------

    Цитата Сообщение от Error404 Посмотреть сообщение
    Ну и если будет такое копирование, всякий выигрыш теряется (что про времени выполнения, что по размеру кода). Тогда уж сразу надо делать на стеке.
    Чисто арифметически выигрыш есть. Копируем мы переменную один раз на входе, один на выходе. Причем, копирование всех переменных можно делать за один присест.

    А обращаться к переменной мы будем много раз, может быть что 1000 раз.

    ---------- Post added at 14:35 ---------- Previous post was at 14:34 ----------

    Цитата Сообщение от predatoralpha Посмотреть сообщение
    Проблема нереентабельности по прерываниям, как по мне, несущественная. Обработчик обычно пишется на ассемблере, если какие-то сишные функции и будут вызываться - то обычно это не те, что выполняются вне прерывания. Этот факт нужно отразить в документации, и принять его "как есть".
    Можно продублировать функцию вызываемую из прерывания и из основного кода.

    ---------- Post added at 14:37 ---------- Previous post was at 14:35 ----------

    Цитата Сообщение от predatoralpha Посмотреть сообщение
    Более серьёзная проблема, как по мне - это передача ссылки на локальную переменную в некую функцию. Если создаются копии локальных переменных в стеке, то ссылка на локальную переменную "повиснет". А если ещё добавить, что вызываемая функция эту ссылку может сохранить в глобальной переменной, и другая вызываемая функция (из базовой функции) эту ссылку может оттуда поднять...
    Это компромисс между
    1) Программой, которая умеет рекурсию.
    2) И программой, которая работает в 3 раза быстрее.

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

  3. #2

    Регистрация
    08.01.2012
    Адрес
    г.Винница, Украина
    Сообщений
    94
    Спасибо Благодарностей отдано 
    1
    Спасибо Благодарностей получено 
    21
    Поблагодарили
    16 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от vinxru Посмотреть сообщение
    В ячейке clrscr_dest хранится адрес, который предыдущей строкой увеличивается.
    Нет на 8080 команды ld ((clrscr_dest)), A
    Извиняюсь, просмотрел, что тут двойной доступ.

    Да, я пока одну версию операторов написал. Сегодня поправлю, а то забуду.
    Догадываюсь, что код сильно усложнится. Прединкремент/преддекремент работает быстрее, и код короче. Конкретно здесь, поскольку переменная с в теле не используется, его стОит оставить, только увеличить на единицу BC (или сразу загрузить в него увеличенную на 1 константу, как в этом случае). Впрочем, анализ циклов сложное дело, и я понимаю, что сейчас оно не на времени.


    Цитата Сообщение от vinxru Посмотреть сообщение
    Можно продублировать функцию вызываемую из прерывания и из основного кода.
    Безусловно. Кому надо - продублирует.

    Цитата Сообщение от vinxru Посмотреть сообщение
    Это компромисс между
    1) Программой, которая умеет рекурсию.
    2) И программой, которая работает в 3 раза быстрее.
    Полностью поддерживаю. Компилятор прежде всего будет использоваться любителями старых компов, типа Львова, а там абсолютный приоритет - быстродействие.
    Единственно замечу, что это проблема не только рекурсии. В том примере, что я привёл, это возможно при вызове из функции двух функций, которые никак рекурсию не производят. Просто отразить в документации - если хочешь иметь корректный указатель на лок.перем. между вызовами разных функций - используй указатель на static или volatile переменную.

  4. #3

    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,926
    Спасибо Благодарностей отдано 
    105
    Спасибо Благодарностей получено 
    290
    Поблагодарили
    216 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от vinxru Посмотреть сообщение
    Это компромисс между
    1) Программой, которая умеет рекурсию.
    2) И программой, которая работает в 3 раза быстрее.
    Так надо ввести опцию компилятора: все переменные статические - да/нет. А компилятор делать классически, с поддержкой локальных переменных в стеке. Кому не нравится глобальная переменная, поставит перед декларацией register.

    ---------- Post added at 19:26 ---------- Previous post was at 19:23 ----------

    И в тексте программы учитывать:
    #pragma static_variable on
    #pragma static_variable off

  5. #4

    Регистрация
    08.01.2012
    Адрес
    г.Винница, Украина
    Сообщений
    94
    Спасибо Благодарностей отдано 
    1
    Спасибо Благодарностей получено 
    21
    Поблагодарили
    16 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от b2m Посмотреть сообщение
    Так надо ввести опцию компилятора: все переменные статические - да/нет. А компилятор делать классически, с поддержкой локальных переменных в стеке. Кому не нравится глобальная переменная, поставит перед декларацией register.
    Ээээ... ничего что стандарт C99 позволяет указатели на регистровые локальные переменные? И это как раз такой случай, что она должна располагаться в стеке, если конечно компилятор не соптимизирует обращение к переменной, и есть гарантия, что доступа к адресу не будет.
    Так что вопрос несколько сложнее, и просто register это не решает.
    Здесь планируется несколько более, чем просто статические переменные. Их можно использовать как и автоматические, для рекурсии. Можно сказать, что локальные переменные просто кешируются в памяти по конкретным адресам.

  6. #5

    Регистрация
    01.03.2011
    Адрес
    Stamford
    Сообщений
    336
    Спасибо Благодарностей отдано 
    46
    Спасибо Благодарностей получено 
    49
    Поблагодарили
    20 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от vinxru Посмотреть сообщение
    Это компромисс между
    1) Программой, которая умеет рекурсию.
    2) И программой, которая работает в 3 раза быстрее.
    И всё-таки по причинам реентерабельности, стоит подумать о размещении локальных переменных на стеке. Дело здесь не только в interrupt функциях, для которыз кстати надо ещё PUSHALL делать. Просто, если компилятор будет использоваться для написания оконных интерфейсов, почти неизбежны локальные стеки и переключения контекстов.

    Возможно, Вы подумаете о чём-нибудь типа
    #pragma recursion:ON/OFF

    Также пожелание поддерживать несколько calling conventions, по крайей мере extern "C" / _stdcall, _pascal, _memblock (это-Ваш вариант) и _fast (передача до 2х параметров в регистрах)

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

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

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

Похожие темы

  1. Ассемблер 8080
    от Kakos_nonos в разделе Утилиты
    Ответов: 0
    Последнее: 21.09.2011, 23:35
  2. Продам пару платок с процами 8080
    от RedLine в разделе Барахолка (архив)
    Ответов: 15
    Последнее: 23.12.2010, 18:39
  3. схема АОН на 8080/z80
    от sergey2b в разделе Разный софт
    Ответов: 7
    Последнее: 07.02.2010, 22:43
  4. An 8080/Z80 C Compiler
    от breeze в разделе Программирование
    Ответов: 1
    Последнее: 18.08.2005, 06:54

Ваши права

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