User Tag List

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

Тема: LLVM Backend для Z80

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

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

    Регистрация
    17.01.2006
    Адрес
    Тамбов
    Сообщений
    97
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    В llvm есть такие операции как усечение значений и расширение. Например усечением 16 битного слова будет являться 8 бит, т.е. 1 байт. Это легко реализуется, например, усеченным значением регистра HL будет регистр L.
    Теперь о расширении значений. Всего имеется 3 вида расширений:
    1. zext - расширение с обнулением старшей части. Например расширение регистра A в регистра HL будет выглядеть так:
    Код:
                   LD L,A
                   LD H,#00
    2. anyext - расширение с неопределенной старшей частью:
    Код:
                   LD L,A
    3. sext - знаковое расширение. Т.е. если 7 бит равен единице, то старшая часть заполняется единицами. Что-то вроде этого
    Код:
                   LD L,A
                   LD H,#00
                   BIT 7,A
                   JR Z,NO_SIGN
                   LD H,#FF
    NO_SIGN:
    Пример написал для большего понимания. Посоветуйте как эффективнее и короче можно сделать знаковое расширение.
    Последний раз редактировалось EARL; 21.10.2012 в 13:57.

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

  3. #2

    Регистрация
    27.01.2005
    Сообщений
    924
    Спасибо Благодарностей отдано 
    28
    Спасибо Благодарностей получено 
    193
    Поблагодарили
    154 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Может так?

    Код:
    ; Изначально - в А число
                   LD L,A            ; Младший байт
                   AND #80h       ; Проверка старшего бита на знак
                   RLA                ; CY = старший бит из А, А=0
                   SBC A,#00      ; A=A-CY (0, если +, FF, если -)
                   LD H,A            ; Сташий байт HL= расширенное со знаком число

  4. #3

    Регистрация
    17.01.2006
    Адрес
    Тамбов
    Сообщений
    97
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от SfS Посмотреть сообщение
    Может так?

    Код:
    ; Изначально - в А число
                   LD L,A            ; Младший байт
                   AND #80h       ; Проверка старшего бита на знак
                   RLA                ; CY = старший бит из А, А=0
                   SBC A,#00      ; A=A-CY (0, если +, FF, если -)
                   LD H,A            ; Сташий байт HL= расширенное со знаком число
    Да, я думаю этот вариант пока лучше подойдет, т.к. в нём нет никаких условных/безусловных переходов, т.е. все действия выполняются в пределах одного так называемого BasicBlock (http://ru.wikipedia.org/wiki/Basic_block). Если будут в дальнейшем варианты получше, то заменить всегда можно.
    Последний раз редактировалось EARL; 21.10.2012 в 15:05.

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

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

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

Ваши права

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