Задачка о новом процессоре

Тема в разделе "WASM.A&O", создана пользователем Black_mirror, 6 июн 2008.

  1. UTeX

    UTeX New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2007
    Сообщения:
    584
  2. UTeX

    UTeX New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2007
    Сообщения:
    584
  3. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    UTeX
    Респект!
    Black_mirror
    Бери в руки учебник по оси zx81 или её сорсы и изучай.
     
  4. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    UTeX
    Clerk
    У вас похоже плохо с чувством юмора, а кроме этого вы не читалиИсторию одного байта. Прочитайте там 3й и 4й абзац. Там как раз написано про отсутствие вычитания. Если бы у этой задачи не было бы красивого решения, то я бы не стал её сюда отправлять. Попробуйте сначала сделать операцию NOT. А потом подумайте о том, как можно это оптимизировать если изменить формат хранения чисел.
     
  5. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Учи, пока не поймёшь, не пиши сей бред!:
    ftp://ftp.worldofspectrum.org/pub/sinclair/books/CompleteSpectrumROMDisassemblyThe.txt
    ftp://ftp.worldofspectrum.org/pub/sinclair/books/SpectrumShadowROMDisassembly.doc
     
  6. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Black_mirror Даешь еще подобных задачек, помоему о кроме тебя на такое еще the Svin способен, но он уже поутих ! ;)
     
  7. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.243
    вполне возможно что разработчики чего-то не договаривают - я не верю, что собралась некая группа дебилов и собрала нахЪ никому не нужный проц. вероятность сего практически на нуле:))))
     
  8. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    UbIvItS
    Конечно не договаривают, когда начальство узнало что сделали разработчики, то главного архитектора сразу уволили, а другие до сих пор еще не сознались, что они не знают как нужно хранить числа чтобы эффективно выполнять вычитание :)
    В общем вычитания нет (а так же SBB и NEG), NOT и XOR тоже нет, а всяких NAND, NOR, ANDN, ORN никогда и не было. Умножения тоже нет, то есть A+B*(-1) сделать не выйдет. Но можно хранить числа так, чтобы недостающие операции можно было реализовать "эффективно" за счёт тех что есть.

    Неужели никто не умеет обходиться без вычитания?!!
     
  9. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.243
    Black_mirror
    может быть и можно, но, скорей всего, по памяти ж.... будет:))
     
  10. UTeX

    UTeX New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2007
    Сообщения:
    584
  11. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    UTeX
    Это обычный процессор, частично совместимый с x86, только у него отсутствует команда вычитания(и еще несколько). А так он складывает беззнаковые числа разрядностью N и формирует N разрядов суммы и флаг переноса С. Но 32х разрядные числа для решения нашей задачи не самый эффективный формат, хотя в итоге всё придётся сводить к их сложению (и к другим существующим операциям).
     
  12. UTeX

    UTeX New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2007
    Сообщения:
    584
  13. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    UTeX
    Все проблемы решаются и без SUB, XOR, NOT, NEG, главное хорошую структуру данных подобрать. А сложение по модулю есть - по модулю 256, 65536 или 4294967296 в зависимости от разрядности операндов 8, 16 или 32 :)
     
  14. UTeX

    UTeX New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2007
    Сообщения:
    584
  15. UTeX

    UTeX New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2007
    Сообщения:
    584
  16. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    UTeX
    Я уже писал, что NOT REG можно сделать за 8 команд без всяких циклов, а если изменить формат хранения чисел, то будет еще меньше.
    Если мы храним знак отдельно, то пусть у нас
    A = '+', 5
    B = '-', 8
    как получить С=A+B в таком же формате, то есть C='-',3 ?
    Хотя хранить знак отдельно это уже ощутимый прогресс, до этого почему-то ни у кого не возникало идеи представить число ввиде отличном от того что понимает процессор :)
     
  17. UTeX

    UTeX New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2007
    Сообщения:
    584
  18. UTeX

    UTeX New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2007
    Сообщения:
    584
  19. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    Вот здесь. Только я не буду говорить как, нельзя лишать людей такого удовольствия, пусть думают :)
     
  20. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    ну если без циклов и формат менять, то можно извратиться и операции проводить в 1-ричном формате. Те через 32-х битную переменную содержащую беззнаковые числа от 0 до 31. (при переполнениях - нулится)

    sub ecx,ebx
    ==
    mov eax,1
    shl eax,cl
    mov cl,bl
    shr eax,cl
    bsf ecx,eax
    jnz short @f
    mov ecx,0
    @@:


    not ecx ; один из вариантов
    ==
    mov eax,80000000h
    shr eax,cl
    bsf ecx,eax
    jnz short @f
    mov ecx,0
    @@:


    neg ecx
    ==
    not ecx
    inc ecx

    пока все.