1. Если вы только начинаете программировать на ассемблере и не знаете с чего начать, тогда попробуйте среду разработки ASM Visual IDE
    (c) на правах рекламы
    Скрыть объявление

Придумай инструкцию x86!

Тема в разделе "WASM.HEAP", создана пользователем alpet, 22 июн 2005.

  1. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.383
    f13nd,

    ТС не ясно что собирает, похоже на полиморф. Можно кучу использовать инструкций, который не делают ничего; это зависит от их зависимостей в dfg. К примеру можно использовать математику, если контекст не связан с fpu. Задача совершенно не понятна. В идеале зная какие регистры используются далее, можно их использовать. Это обычная самая примитивная генерация мусора. Можно даже не думать про контекст, выгружая его через pusha. Но врядле это какой то будет иметь эффект, авер это пройдёт элементарно.
     
  2. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.328
    Насколько я понял, он хочет через исключения имитировать прерывания.
     
  3. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.383
    f13nd,

    Прерывание это событие в другом моде. Так что хз какая задача. Похоже на полиморф сборку, скажите если я не прав.
     
  4. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.328
    Он в соседней теме выдвинул предположение, что было бы здорово апи реализовать через прерывания, через сех проще всего это смоделировать.
     
  5. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.383
    f13nd,

    > реализовать через прерывания

    А что это значит ?
     
  6. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.328
    А не, он прерывания портами ввода-вывода хотел заменить https://wasm.in/threads/hardware-dos-machine.33486/ ну то же самое в принципе, забрать аргументы в обработчике исключений, отправить на обработку, продолжить исполнение.
     
  7. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.383
    f13nd,

    Пока он сам не скажет ты не узнаешь. Этот человек мыслит по своему :preved:
     
  8. Paguo_86PK

    Paguo_86PK Руслан

    Публикаций:
    0
    Регистрация:
    8 окт 2007
    Сообщения:
    907
    Адрес:
    Ташкент
    Елe догадался, о ком речь… :whistle2:
    (Гвоздями не пахло…)

    Идея уходит ещё в бородатые годы эпохи «РАДИО-86РК»…
    У него портов ввода-вывода вообще не было, так как всё проецировалось в память.
    И хотелось (хотя бы мысленно) провести эксперимент, где один РЛК имеет 256 портов через нормальные IN/OUT-инструкции, но вместо различных УВВ/ПДП и прочей элементарной лабуды каждый из 256 портов ссылается на свой другой РЛК из 256.
    То есть, имеется 32 компьютера «Специалист», 32 компьютера «Орион-128», 32 компьютера «ZX-Spectrum» и т.д…
    И всем этим хозяйством заведует один центральный РАДИО-86РК - компьютер №257!

    Скажем, читает он порт №34. Это - «Орион-128» второй из 32. Сам РАДИО-86РК через пин WAIT процессора уходит в ожидание…
    А в Орионе срабатывает прерывание, он может на экране у пользователя что-то спросить и ждать ответ.
    Когда пользователь ответит, результат через код вернётся обратно центральному РАДИО-86РК и сигнал WAIT снимется.
    Тем самым, при единственном чтении/записи порта центральный компьютер может уйти в ожидание на минуты/сутки/годы…

    Поэтому меня не пугает, что обработка исключений может занять миллиарды тактов на порт.

    Мне важно, чтобы процесс работал в совершенно чистой среде (без обратной PC-совместимости).
    Тем самым, ни портов (стандартных) быть не должно, ни FPU.
    А под портами должны скрываться другие (системные/прикладные) процессы.

    Допустим, порт №1296126547 (не забывайте: я читаю EDX целиком все 32 бита) адресует ПК на планете Марс (индекс порта в хексу переведите) и ответ может прийти минимум - только через 4 минуты (в хороших условиях). И это значит, что приложение при чтении этого порта может уйти в ожидание на несколько минут.
    Это плохо? Если программист - олух и его программа только и занимается Марсианскими-транзакциями, безусловно - да!
    Но если программист серьёзно всё спланировал, то 4 минуты простоя в сутки - это нормально.

    Но, боюсь, Вы вообще сейчас заблудились в моих «грёзах»…

    P.S.: Тайм-аут (переварите пока это)… :russian:
     
  9. Intro

    Intro Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    251
    Придумай инструкцию х86?
    Я бы сделал инструкцию типа COMISS для FPU, для условных переходов, а то как то геморрно сделано.
    Так же, обратную инструкцию для BT, т.е. установить бит в слове из флага CF.
    Flag32 flag = 0;
    flag.set(5, foo(param0));
    Кодируется одной инструкцией, а не кучей.
     
  10. Paguo_86PK

    Paguo_86PK Руслан

    Публикаций:
    0
    Регистрация:
    8 окт 2007
    Сообщения:
    907
    Адрес:
    Ташкент
    Нa заметку: MOV TR - Давно просто вызывают исключения.
    (Это для себя в рамках «эскейпно-портового» безобразия…)
     
  11. omne999666

    omne999666 Member

    Публикаций:
    0
    Регистрация:
    13 июл 2019
    Сообщения:
    109
    Адрес:
    Украина
    Загрузка DB :focus:
    Hello, world!
    Код (ASM):
    1. format mz
    2. use16               ;Генерировать 16-битный код
    3. org 100h            ;Программа начинается с адреса 100h
    4.     mov dx,hello    ;В DX адрес строки.
    5.     mov ah,9        ;Номер функции DOS.
    6.     int 21h         ;Обращение к функции DOS.
    7.  
    8.     mov ah,1
    9.     int 21h
    10.     mov ax,4C00h    ;\
    11.     int 21h         ;/ Завершение программы
    12. ;-------------------------------------------------------
    13. hello db 'Hello, world!$'
     
  12. НетРегистрации

    НетРегистрации Member

    Публикаций:
    0
    Регистрация:
    1 фев 2020
    Сообщения:
    56
    к #269 FCOMI(P) FUCOMI(P) ? и даже есть FCMOVcc все для стековых регистров.
     
  13. omne999666

    omne999666 Member

    Публикаций:
    0
    Регистрация:
    13 июл 2019
    Сообщения:
    109
    Адрес:
    Украина
    Ошибка: Переполнение
    Код (ASM):
    1. use16
    2. org 100h
    3.   mov al,[x]
    4.   add al,[y]
    5.   jo error
    6.   mov ah,09h
    7.   mov DX,ok_msg
    8.   int 21h
    9. exit:
    10.   mov ah,09h
    11.   mov DX,pak
    12.   int 21h
    13.   mov ah,08h
    14.   int 21h
    15.   mov ah,08h
    16.   int 21h
    17.   mov ax,4C00h
    18.   int 21h
    19. error:
    20.   mov ah,09h
    21.   mov DX,err_msg
    22.   int 21h
    23.   jmp exit
    24. ;-----------------------------------------------------
    25. x  db -89
    26. y  db -55
    27. err_msg  db 'Error: overflow detected',13,10,'$'
    28. ok_msg  db 'OK',13,10,'$'
    29. pak  db 'Press any key...$
     
  14. omne999666

    omne999666 Member

    Публикаций:
    0
    Регистрация:
    13 июл 2019
    Сообщения:
    109
    Адрес:
    Украина
    Придумал инструкцию Х.
    Код (ASM):
    1. use16
    2. org 100h
    3.     jmp start
    4. ;-------------------------------------------------------
    5. a dw 81
    6. b dw 273
    7. x dw ?
    8. ;-------------------------------------------------------
    9. start:
    10.      push 3
    11.      push [b]
    12.      push [a]
    13.      call primer
    14.      mov  [x],dx
    15.  
    16.      mov ax,4C00h
    17.      int 21h
    18.  
    19. ;--------------------------------------------------------
    20. primer:
    21.    push dx
    22.    mov  dx,dx
    23.    push dx
    24.  
    25.    mov ax,[bp+4]
    26.    add ax,[bp+6]
    27.    cwd
    28.    idiv word[bp+8]
    29.  
    30.    pop ax
    31.    pop dx
    32.    ret 6
     
  15. al79

    al79 Алексей

    Публикаций:
    0
    Регистрация:
    11 май 2006
    Сообщения:
    130
    Адрес:
    Екатеринбург
    Что тут придумывать?
    Я половину этих инструкций не знал:

    И вспоминаю, была тут когда то задача (тема) которая оказывается решалась одной инструкцией PEXT.
     
  16. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.328
    Эти инструкции не безумные, просто узкоспециализированные. Часть из них дико поздние (rdseed судя по всему с 2012 года), поэтому ради обратной совместимости они наверное вообще никем не используются. У того же pshufb просто адовый потенциал например для конвертирования BE-LE сразу нескольких полей (в ip например все в BE кодируется), но это sse3 и 2004 год.
     
  17. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    4.011
    Кстати, раньше вроде говорили, что собираются добавить отдельные инструкции для AES и GZIP алгоритмов прямо на проце. Это уже сделали или все еще планируют сделать или я что-то попутал?
     
  18. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.051
    Rel,
    aes давно уже есть.