Опрос - новые инструкции.

Тема в разделе "WASM.HEAP", создана пользователем Clerk, 24 июн 2008.

  1. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Я решил похукать KiTrap06(#UD, Invalid Opcode) и хандлер будет расширять систему команд.
    Скорость исполнения получится довольно высокой. Любой дизассемблер будет сломан.
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Ещё есть вопрос, для исполнения кода последовательно на процессорах вроде в экспорте ядра ничего нет, придётся искать KeIpiGenericCall ?
     
  3. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    t00x
    (Токо што переставил ехель)
    + SF. И CF - не просто бит а целый регистр (для mul и div). Кроме того в команде есть бит позволяющий выполняться как при установленом, так и при сброшеном указаном условии.

    SII
    Большинство одно и двухадресных команд с легкостью приводятся к 3х адресным.

    Примеры реализаций одноадресной команды трехадресной:

    not r0 == xor r0, r0, [ip++]; -1; ...
    (после считывания команды ip инкрементируется по определению и после считывания операнда (-1) команда инкрементирует его еще раз)

    neg r0 == xor r0++, r0, [ip++]; -1; ...
    (то-же самое + 'r0+1' в конце)

    Кроме того унификация команды и закрепление полей позволяют значительно упростить железную схему (несмотря на перегруженость команды), тк позволяют избавиться от дешифратора (имею подозрение, что в х86 от 1/2 до 3/4 транзисторов проца нужны только для быстрой дешифровки команды)

    Например? (очень длинные данные поддерживаются)
     
  4. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    _basmp_
    сколько доступно методов адресации?
     
  5. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    t00x
    для всех команд любой регистр может быть регистром или ссылкой

    R = r | [r]
    r = dst | src1 | src2
    R = DST | SRC1 | SRC2

    + 2 команды сложного доступа к памяти

    DST <- [ SRC1 + SRC2 ]
    DST -> [ SRC1 + SRC2 ]

    все инкеременты и условия для них сохраняются.
     
  6. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    _basmp_
    для доступа в память явно указывается SRC1 и(или) SRC2, или сегментные регистры тоже присутствуют?
     
  7. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    t00x
    Только 32 регистра. 3 из них специальные (скажем: r31=IP, r30=Cf, r29=Fl) регистр флагов несет еще одну спец нагрузку, там лежит над какой частью числа операция производится. Каждый регистр может быть рассмотрен как число или указатель на число. Сегментных регистров нет. Работа с памятью (и работа вообще) очень отличается от х86. Есть доп ячейки размерности данных и адресов спец ситуаций(? не знаю как назвать точнее). К ним напрямую прога доступа не имеет. Они задаются при создании нового потока (спецкомандой), который может быть длиной и в одну команду.
     
  8. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    _basmp_
    не мало 32 команд вместе с арифметическими?
     
  9. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    t00x
    Даже пустые остались.
     
  10. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    _basmp_
    А нельзя ли огласить весь список команд? А то я что-то не особо понимаю зачем нужен регистр флагов.
     
  11. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    Black_mirror
    Прошу прощения за задержку. Система навернулась и винт прибила. Восстанавливаю теперь что могу.

    Значит команды прикидочно такие:

    mov-ы
    1 - D <- [S1 + S2]
    2 - D -> [S1 + S2]
    3 - D <- S1; S1 <- S2


    битовые
    4 - D <- S1 | S2
    5 - D <- S1 & S2
    6 - D <- S1 ^ S2


    логика (в начале выполняется S = S ? 1 : 0 ;)
    7 - D <- S1 || S2
    8 - D <- S1 && S2
    9 - D <- S1 ^^ S2
    10 - D <- S1 < S2
    11 - D <- S1 < S2 (знаковое) (?)


    арифметика
    12 - D <- S1 + S2
    13 - D <- S1 - S2
    14 - D <- S1 * S2 (?)
    15 - D <- S1 / S2 (?)
    16 - D <- S1 * S2 (знаковое)
    17 - D <- S1 / S2 (знаковое)


    сдвиги
    18 - D << S1 на S2 бит
    19 - S1 >> D на S2 бит


    команды управления
    20 - ноп (вообще-то, это спец команда. при значении ноп в поле кода команды она полностью + ip + дескриптор потока передаются на спец обработчик если он есть. Если обработчика нет, то ничего не делается)

    21 - управление потоком (D = адрес дескриптора потока (0 - сам), S1 = команда или ip нового потока, S2 = мах разрядность нового потока + флаги (поставить в очередь, снять с очереди, S1 = команда, итд) (zf устан. при успехе, иначе сброс zf)

    22 - установка новых параметров подслова для операций. (S1 = начало подслова в битах, S2 = количество бит в подслове. D = ??)

    23 - получение параметров подслова. (S1 = начало подслова в битах, S2 = количество бит в подслове. D = ??)


    ПРИМЕЧАНИЯ
    D, S1, S2 - регистр | значение памяти по адресу в регистре
    регистр может постинкриментироваться на на 1 или длину подслова выровненую вверх на 8 бит если ссылка
    любая команда может изменять или не изменять флаги,
    любая команда может зависеть или не зависеть от флагов


    ФЛАГИ
    флаги лежат в 2-х регистрах
    1-й - cf (при умножениях/делениях перенос/остаток по разрядности может быть не меньше подслова)
    2-й - zf + sf + первый бит подслова + кол-во бит в подслове (что такое подслово - это когда, например, в 32х битном слове надо оперировать 3-мя битами начиная с 11го)


    Почему флаги - общие регистры
    1) неохота вводить спецкоманды для работы с флагами
    2) cf всегда можно использовать как tmp регистр
    3) простота реализации алу
    4) все данные потока включая содержимое регистров между операциями лежат в дескрипторе потока.
    5) легко вводить самодельные команды (ноп) которые сами будут работать с флагами.


    ПРЕРЫВАНИЯ (выполняются если установлены)
    1 - управление потоком
    2 - ноп
    3 - любая команда (для эмуляторов)
    4 - чтение адреса
    5 - запись адреса
    6 - чтение очередной команды (?)
    7 - деление на 0 (?)
    (перед выполнением обработчика вызвавший поток снимается с очереди выполнения, а обработчик получает адрес его дескриптора, скажем, в r0)


    ЗЫ Пишу по памяти и судя по количеству - что-то забыл или перепутал. Но коментариев хотелось бы.
     
  12. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    _basmp_
    к mov'ам мне кажется стоит добавить команды для чтения и записи битовых полей размером от 1 бита до размера регистра.
    D<-S1[S2],L
    S1 - базовый адрес
    S2 - смещение в битах (для этого регистра обязательно нужна возможность постинкремента/преддекремента на L)
    L - длина битового поля (скорее всего это тоже должен быть регистр или его младшие биты)

    К битовым командам наверно стоит добавить ANDN, которая вычисляет D=S1 AND NOT S2. В MMX её почему-то добавили, наверно чтобы проще было вычислять R=(А AND NOT MASK) OR (B AND MASK).

    Что касается флага CF, перед сложением или вычитанием предлагаю расширять операнды до двойного слова с заполнением старших разрядов нулём(беззнаковая операция) или знаком, а в CF записывать старшее слово результата. То есть при беззнаковом сложении там будет +1 в случае переполнения, а при вычитании -1. В случае знакового сложения и вычитания там может получиться как +1, так и -1. Еще стоит добавить команды сложения и вычитания с учётом перноса.

    Логические команды стоит исключить вообще, истину представлять как -1 (потому что в этом случае её можно будет использовать как маску в арифметических и логических выражениях), а вместо них использовать побитовые команды.
    Вычисление результатов проверки условий осуществляется следующим образом(для беззнакового случая):
    T=A-B, CF=-1 если A<B(для A>=B делаем NOT CF)
    T=A-B T=T-1, CF=-1 если A=B
    T=A-B T=0-T, CF=-1 если A<>B

    Что касается сдвигов, то думаю что лишние разряды лучше всего поместить в CF, а если нужен циклический сдвиг, потом можно сделать R=R OR CF.

    zf, sf на мой взгляд лишние. Подслова тоже штука сомнительной полезности, если сделать возможность чтения и записи памяти(а может и регистров) с любого бита.
     
  13. alpet

    alpet Александр

    Публикаций:
    0
    Регистрация:
    21 сен 2004
    Сообщения:
    1.221
    Адрес:
    Russia
    Когда-то создавал такую же тему, в ней очень много скопилось полезных новаций, например параллельное вычисление веток до оценки выполнения условия, что должно работать лучше, чем предсказание переходов.

    Сейчас небольшое улучшение к выложенным там идеям добавлю:
    * Отдельный закрытый стек для кода (регистр CSP), с которым будут обращаться все операции передачи управления (call, ret, int, iret и т.п.). Программа не сможет из него читать, или писать в него, но для отладчика он будет доступен. Ради режима совместимости, адреса будут сохранятся и в стек данных (ESP), но забираться от туда не будут. Польза от такого стека очевидна - создавать эксплоиты на переполнении стека станет сложнее, а детектироваться существующие станут легче.
    * Команда разветвления fork - что-то наподобии jmp, но код по адресу будет выполнять дополнительным ядром (т.е. текущий поток пройдет мимо), до команды halt. Эксплуатировать эффективно такую команду будет можно в архитектуре Larabee, когда много упрощенных ядер.
     
  14. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    alpet
    Ну первое мне тоже в голову приходила, не пойму почему так не сделают. А второе не вкурил доконца, нужны ли такие замуты.
     
  15. alpet

    alpet Александр

    Публикаций:
    0
    Регистрация:
    21 сен 2004
    Сообщения:
    1.221
    Адрес:
    Russia
    SPA
    Программистам, для элементарной многопоточной обработки данных, приходится выполнять избыточную работу (если не используются готовые библиотеки), и получающиеся решения в итоге не всегда оптимальны (как правило это пул потоков, и простенький менеджер заданий). Суть моего нововведения, передать эту задачу отчасти компилятору.
    В простейшей реализации операция fork будет иметь два параметра - адрес обработчика задания, и параметр данных для обработчика (например ссылка на класс). Обработчик будет получать собственный контекст CPU, и фактически не будет обрываться операционной системой (если не задействовать синхронизирующие механизмы) - ядро процессора будет для него выделенным.
    Код (Text):
    1.  void JOBFUNC  Handler(PVOID64 pData)
    2.  {
    3.     // здесь выполняется обработка данных pData, и отправляется сообщение о завершении обработки, после чего миниядро ЦП высвобождается
    4.  }
    5.  
    6.  void main()
    7.  {  
    8.     FRAME  frames[20];
    9.     ....
    10.     for (int n = 0; n < 19; n ++)
    11. sys_fork(&Handler, &frames[n]);
    12.  
    13.  }
     
  16. alpet

    alpet Александр

    Публикаций:
    0
    Регистрация:
    21 сен 2004
    Сообщения:
    1.221
    Адрес:
    Russia
    Почему-то правка поста недоступна, допишу здесь:
    Вобщем такая штука в условиях относительно небольших объемов работы (обработка кадра видеоигры), имхо может упростить разработку более производительного кода. Хотя процессор для этого потребуется сложный - придется следить за тем, чтобы не кончились свободные ядра, и приостанавливать
    выполнение операции fork в случае исчерпания их количества (можно так-же устанавливать флажки, или возбуждать исключение).
     
  17. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    можно добавить аппаратное разделение на задачи и потоки;
    каждая задача может иметь несколько потоков; при инициализации, задача имеет 0 потоков, т.е. потоком не является.
     
  18. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    Удивительно уродский броузер ие. Кто-то тут все требовал доказательств его уродскости. Так вот. Написал ответ. Не проверил есть-ли поключение к сети и отправил. Месага, что нет конекта. Подключился, вернулся назад, а поста-то моего уже нету, не вспомнинает, только поучения умные пишет. Как я ненавижу дюже умных очкариков, хоть сам очкарик. Блин. Все настроение испортил. Напишу завтра когда лисицу поставлю, ато счас свет вырубят.
     
  19. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    utf-8. Perevedite poj na normalinyi

    Гђ”Гђ»Г‘Џ Г‘ЂГђ°Гђ±ГђѕГ‘‚Г‘‹ Г‘Ѓ Гђ±ГђёГ‘‚ГђѕГђІГ‘‹ГђјГђё ГђїГђѕГђ»Г‘ЏГђјГђё ГђїГ‘ЂГђёГђґГђВµГ‘‚Г‘ЃГ‘Џ ГђІГђІГђВµГ‘ЃГ‘‚Гђё Г‘ЃГђїГђВµГ‘†Г‘†ГђВµГђїГђё, ГђВєГ‘ЂГђѕГђјГђВµ Г‘‚ГђѕГђіГђѕ, ГђёГ‘ЃГђїГђѕГђ»Г‘ЊГђ·ГђѕГђІГђ°ГђЅГђёГђВµ ГђЅГђВµГђїГђѕГђ»ГђЅГ‘‹Г‘… Г‘ЃГђ»ГђѕГђІ (8 Гђ±ГђёГ‘‚, 16 Гђ±ГђёГ‘‚ ...) ГђѕГ‘‡ГђВµГђЅГ‘Њ Г‘ЂГђ°Г‘ЃГђїГ‘ЂГђѕГ‘ЃГ‘‚Г‘ЂГђ°ГђЅГђВµГђЅГђѕ. Гђ?ГђјГ‘…Гђѕ ГђёГђјГђВµГђВµГ‘‚ Г‘ЃГђјГ‘‹Г‘ЃГђ» ГђѕГђ±Г‘ЉГђВµГђґГђВµГђЅГђёГ‘‚Г‘Њ ГђёГ‘… Гђё Г‘ЂГђ°Г‘ЃГ‘ЃГђјГђѕГ‘‚Г‘ЂГђВµГђІ ГђїГђѕГђ»ГђЅГђѕГђВµ Г‘ЃГђ»ГђѕГђІГђѕ ГђВєГђ°ГђВє ГђІГђ°Г‘ЂГђёГђ°ГђЅГ‘‚ ГђЅГђВµГђїГђѕГђ»ГђЅГђѕГђіГђѕ/Гђ±ГђёГ‘‚ГђѕГђІГђѕГђіГђѕ ГђїГђѕГђ»Г‘Џ ГђёГђ·Гђ±Гђ°ГђІГђёГ‘‚Г‘ЊГ‘ЃГ‘Џ ГђѕГ‘‚ ГђВєГ‘ѓГ‘‡Гђё Г‘ЃГђїГђВµГ‘†ГђВєГђѕГђјГђ°ГђЅГђґ Гђё ГђґГђѕГђ±Гђ°ГђІГђёГ‘‚Г‘Њ Г‘‚ГђѕГђ»Г‘ЊГђВєГђѕ ГђѕГђґГђЅГ‘ѓ-ГђґГђІГђВµ ГђґГђ»Г‘Џ ГђїГ‘ЂГђѕГ‘ЃГ‘‚ГђѕГ‘‚Г‘‹ Г‘ЂГђ°Гђ±ГђѕГ‘‚Г‘‹ Г‘Ѓ ГђІГђЅГ‘ѓГ‘‚Г‘ЂГђВµГђЅГђЅГђёГђј Г‘„ГђѕГ‘ЂГђјГђ°Г‘‚ГђѕГђј ГђїГђѕГђ»ГђВµГђ№.

    ГђљГђѕГђјГђ°ГђЅГђґГ‘ѓ D = S1 & !S2 ГђІГђІГђВµГ‘ЃГ‘‚Гђё Гђ»ГђВµГђіГђВєГђѕ. Гђ­Г‘‚Гђѕ ГђїГ‘ЂГђѕГ‘ЃГ‘‚Гђѕ ГђВєГ‘ѓГ‘ЃГђѕГђВє xor, ГђїГ‘ѓГ‘ЃГ‘‚Г‘‹ГђВµ ГђјГђВµГ‘ЃГ‘‚Гђ° ГђІ Г‘ЃГђїГђёГ‘ЃГђВєГђВµ ГђВєГђѕГђјГђ°ГђЅГђґ еÑЃГ‘‚Г‘Њ.

    ГђџГ‘ЂГђВµГђґГ‘ЃГ‘‚Гђ°ГђІГђ»Г‘ЏГ‘‚Г‘Њ true ГђВєГђ°ГђВє -1 ГђјГ‘‹Г‘ЃГђ»Г‘Њ ГђёГђЅГ‘‚еÑЂГђВµГ‘ЃГђЅГђ°Г‘Џ.

    ГђћГ‘‚ГђВєГђ°Гђ·Г‘‹ГђІГђ°Г‘‚Г‘ЊГ‘ЃГ‘Џ ГђѕГ‘‚ Гђ»ГђѕГђіГђёГ‘‡ГђВµГ‘ЃГђВєГђёГ‘… ГђВєГђѕГђјГђ°ГђЅГђґ ГђЅГђВµГ‘‚ Г‘ЃГђјГ‘‹Г‘ЃГђ»Гђ°, Г‘‚ГђВє ГђѕГђЅГђё Г‘ѓГђґГђѕГђ±ГђЅГ‘‹, Гђ° Г‘ЂГђ°Г‘ЃГ‘…ГђѕГђґГ‘‹ ГђЅГђ° ГђЅГђёГ‘… ГђјГђёГђЅГђёГђјГђ°Гђ»Г‘ЊГђЅГ‘‹.

    Гђ”еÐ№Г‘ЃГ‘‚ГђІГђёГ‘‚еÐ»Г‘ЊГђЅГђѕ, Гђ·Гђ°ГђґГ‘ѓГђјГ‘‹ГђІГђ°ГђВµГ‘‚Г‘ЃГ‘Џ ГђјГђЅГђѕГђіГђѕГ‘ЏГђґГђВµГ‘ЂГђЅГђ°Г‘Џ Г‘ЃГђёГ‘ЃГ‘‚еÐјГђ°, Гђ° Г‘‚ГђѕГ‘‡ГђЅГђВµГђВµ ГђјГђЅГђѕГђіГђѕГђ°Гђ»Г‘ѓГ‘?ГђЅГђ°Г‘Џ. ГђџГ‘ЂГђёГ‘‡ГђВµГђј ГђВєГђѕГђ»ГђёГ‘‡ГђВµГ‘ЃГ‘‚ГђІГђѕ Гђ°Гђ»Г‘ѓ ГђјГђѕГђ¶ГђВµГ‘‚ ГђїГђѕ Гђ¶ГђВµГђ»Гђ°ГђЅГђёГ‘Ћ ГђјГђВµГђЅГ‘ЏГ‘‚Г‘ЊГ‘ЃГ‘Џ ГђѕГ‘‚ 1 ГђґГђѕ ГђґГђѕГ‘ЃГ‘‚Гђ°Г‘‚ГђѕГ‘‡ГђЅГђѕ Гђ±ГђѕГђ»Г‘ЊГ‘?ГђѕГђіГђѕ Г‘‡ГђёГ‘ЃГђ»Гђ°, Г‘ЃГђВєГђ°Гђ¶ГђВµГђј ГђВє ГђїГ‘ЂГђёГђјГђВµГ‘ЂГ‘ѓ 65535. ГђџГђѕГ‘ЌГ‘‚ГђѕГђјГ‘ѓ ГђІГђ°Гђ¶ГђЅГђ° ГђїГ‘ЂГђѕГ‘ЃГ‘‚ГђѕГ‘‚Гђ° Гђ°Гђ»Г‘ѓ. Гђ’еÐґГ‘Њ ГђІ ГђЅГђВµГђіГђѕ ГђґГђѕГђ»Гђ¶ГђЅГ‘‹ ГђІГђ»ГђВµГђ·Г‘‚Г‘Њ еÑ‰ГђВµ Гђё ГђїГ‘ЂГђѕГ‘‚ГђѕГђВєГђѕГђ»Г‘ЊГђЅГ‘‹ГђВµ Гђ±Гђ»ГђѕГђВєГђё Гђё ГђґГђѕГђ»Гђ¶ГђЅГђѕ Гђ±Г‘‹Г‘‚Г‘Њ ГђґГђВµГ‘?еÐІГђѕ.

    ГђЅГђВµ Г‘ЃГђѕГђІГ‘ЃГђВµГђј ГђїГђѕГђЅГ‘ЏГ‘‚ГђЅГђѕ ГђїГ‘ЂГђѕ Г‘ЂГђ°Гђ·ГђґГђВµГђ»ГђВµГђЅГђёГђВµ ГђЅГђ° Гђ·Гђ°ГђґГђ°Г‘‡Гђё Гђё ГђїГђѕГ‘‚ГђѕГђВєГђё. Гђ’ Г‘‡ГђВµГђј Г‘‚Г‘ѓГ‘‚ ГђїГђѕГђ»Г‘ЊГђ·Гђ°?

    ГђїГ‘ЂГђѕ Г‘ЃГђґГђІГђёГђіГђё Гђё Г‘„Гђ»Гђ°ГђіГђё ГђїГђѕГ‘‚ГђѕГђј. Гђ—Гђ°ГђІГ‘‚Г‘ЂГђ°.
     
  20. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    угу, интересный топик и нечего не разобрать. модераторы, переведите пожалуйста!