User Tag List

Страница 6 из 12 ПерваяПервая ... 2345678910 ... ПоследняяПоследняя
Показано с 51 по 60 из 111

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

  1. #51

    Регистрация
    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 переменную.

  2. #52

    Регистрация
    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

  3. #53

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

    По умолчанию

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

  4. #54

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

    По умолчанию

    У меня нельзя будет получить адрес регистровой переменной. Как раз сейчас сообщений об ошибках придумывал.

    case pVar8: p.logicError_("Нельзя получить адрес переменной преобразованной из 8 бит"); break; // &(ushort)a;
    case pA: case pHl: case pStack: p.logicError_("Нельзя получить адрес временного значения"); break;
    case pB: case pC: case pBC: p.logicError_("Нельзя получить адрес регистровой переменной"); break;
    case pConst: p.logicError_("Нельзя получить адрес константы"); break;

    ---------- Post added at 19:42 ---------- Previous post was at 19:40 ----------

    Кстати первая ошибка - это косяк оптимизации, потом сделаю обход.

    Когда мы преобразовываем значение

    char a;
    short b = (short)a + 0x1234;

    Сразу А не преобразуется. Просто функции чтения забивают старшие 8 бит нулями. Это работает везде кроме

    short* b = &(short)a;

    Оно и так не должно выполняться. А если выполнится, то будет идентично

    short* b = (short*)&a;

    ---------- Post added at 19:43 ---------- Previous post was at 19:42 ----------

    Чё я торможу. Это ошибка "Нельзя получить адрес временного значения"

    ---------- Post added at 20:34 ---------- Previous post was at 19:43 ----------

    Сейчас мой мозг вытечет через ухо

    Есть абстрактные команды

    moNot, moNeg, moAddr, moDeAddr, moPostInc, moPostDec, moInc, moDec
    oDiv, oMod, oMul, oAdd, oSub, oShl, oShr, oL, oG, oLE, oGE, oE, oNE, oAnd, oXor, oOr, oLAnd, oLOr, oIf, oSet, oSAdd, oSSub, oSMul, oSDiv, oSMod, oSShl, oSShr, oSAnd, oSXor, oSOr

    И такой набор команд на каждый тип данных char, short, long, ulong.

    У них несколько значений на входе. Причем значения могут быть:

    pConst - это просто число
    pConstRef - адрес в памяти
    pVar - какая то переменная
    pVar8 - переменная, причем используются только 8 нижних бит
    pRef - переменная содержащая адрес в памяти
    pArray - переменная, но компилятор должен подставлять её адрес в программу вместо значения.
    pHl, pA, pB, pC, pBC - регистры
    pStack - верхушка стека
    pBCRef, pHLRef - в регистрах лежит адрес значения в памяти.

    И при этом регистры A, DE, HL используются для временного хранения переменных и их иногда можно использовать, а иногда нельзя.

    И при этом, команды должны сваливать результат в

    pConstRef - адрес в памяти
    pVar - какая то переменная
    pRef - переменная содержащая адрес в памяти
    pHl, pA, pB, pC, pBC - регистры
    pStack - верхушка стека
    pBCRef, pHLRef - в регистрах лежит адрес значения в памяти.

    ---------- Post added at 20:38 ---------- Previous post was at 20:34 ----------

    Ой, да. Команды при этом еще объединяются и упрощаются. Например сравнение и переход.

    ---------- Post added at 21:27 ---------- Previous post was at 20:38 ----------

    А чем отличается RAL от ADС A, кроме изменяемых флагов?
    Последний раз редактировалось vinxru; 14.09.2012 в 20:36.

  5. #55

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

    По умолчанию

    У ADC A справа нулевой бит добавляется, а RAL - берёт флаг переноса.

  6. #56

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

    По умолчанию

    У разве не у ADD нулевой бит добавляется?

  7. #57

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

    По умолчанию

    Фу-ты, попутал. Значит ничем

  8. #58

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

    По умолчанию

    Команды RAL вообще мне не пригодились

    16 битный сдвиг DAD H
    8 битный сдвиг ADD A
    8 бит в другую сторону CP A + RAR

    16 бит вправо самая сложная

    MOV A, H/B
    CP A
    RAR
    MOV H, A
    MOV A, L/C
    RAR
    MOV L, A

  9. #59

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,390
    Спасибо Благодарностей отдано 
    763
    Спасибо Благодарностей получено 
    2,367
    Поблагодарили
    1,317 сообщений
    Mentioned
    38 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от vinxru Посмотреть сообщение
    16 бит вправо самая сложная
    MOV A, H/B
    CP A
    Можно скинуть 1 такт, если первые 2 команды заменить на
    xra a (или sub a)
    ora h/b

  10. #60

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

    По умолчанию

    И еще я что то не могу сообразить, как сравнивать знаковые числа. Беззнаковые просто, по флагам Z и C. А знаковые я только придумал

    (n1+80h) < (n2+80h)

    MOV A, N1
    XRI 0x80
    MOV D, A
    MOV A, N2
    XRI 0x80
    CP D

    А дальше так же по флагам C, Z

    Но конструкция получается тормозная и большая. Такую не жалко в подпрограмму вынести, что бы зря размер кода не увеличивать.

Страница 6 из 12 ПерваяПервая ... 2345678910 ... ПоследняяПоследняя

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

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

Эту тему просматривают: 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

Ваши права

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