Важная информация

User Tag List

Страница 20 из 32 ПерваяПервая ... 161718192021222324 ... ПоследняяПоследняя
Показано с 191 по 200 из 312

Тема: Вычисление числа Пи на ассемблере

  1. #191
    Master
    Регистрация
    16.12.2014
    Адрес
    г. Ожерелье
    Сообщений
    743
    Спасибо Благодарностей отдано 
    223
    Спасибо Благодарностей получено 
    40
    Поблагодарили
    39 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Удалось постигнуть некоторые рецепты оптимизации от уважаемого ivagor и всё заработало побыстрее. Конечно, вычесть быстрее, чем умножить. Собрал такие данные для 100, 1000 и 3000 цифр.
    Commodore 64/PAL - 4.03 - 393.5 - 3527
    Commodore 128/PAL - 2.2 - 208.6 - 1868
    Commodore +4/PAL - 1.92 - 183.3 - 1641
    Amstrad CPC6128 - 2.65 - 218.4 - 1934
    Всё выложил на сайте - http://litwr2.atspace.eu/retropc.html
    Версий для БК не правил - никто не тестирует. Версия для первых IBM PC совместимых вроде бы в руках уважаемого ivagor?
    Попробовал версию treediv на Амстраде: 2.89 и 264.9 на 100 и 1000. Опять поражает разница по 100 и 1000. В первом случае Амстрад быстрее всего на 9%, а во втором на 21. По частоте Амстрад быстрее (если считать частоту Вектора 2.33) на 37% и ещё нужно надбавить процентов 5-10 за большую скорость LD и INC. Есть ещё неизученные рецепты.
    Версия final_precise, если правильно понял, требует более 40 КБ непрерывной памяти - на Амстраде в бейсике такое без головной боли не сделаешь - надо в CP/M.
    Заметил разницу в скорости, если печатать не с первой строки, т.е. со скроллингом. На Амстраде (нет текстового режима) до 3%, на Коммодоре - менее одного.
    Цитата Сообщение от Titus Посмотреть сообщение
    специально оптимизированная под Z80
    Непонятно. Выложил один из лучших кодов для z80 и нужно ещё что-то? Оптимизацию - это к уважаемуму ivagor-y. Версию treediv для z80, как понял, выкладывать не надо. Где же данные по Спектруму?

    Цитата Сообщение от ivagor Посмотреть сообщение
    как переводите мнемоники 8080->z80
    Нашел в сети awk-сценарий (http://www.hytherion.com/beattidp/comput/z80cpm.htm) - он всё и делает. Только там беда с плюсами. Поэтому их сначала нужно заменить, например, на @, а потом обратно. Ещё почему-то sbb не воспринимает.

    Цитата Сообщение от ivagor Посмотреть сообщение
    Деление 32/16=(16;16) для z80
    На Амстраде JR быстрее JP. Но код очень впечатляет, собираюсь выложить его на профильной википедии. Эту версию DIV320 гораздо труднее приспособить для работы с любым BC. В прежней достаточно было поставить JR C, а теперь простого способа совсем не видно. Нужно указывать, что работает только если BC < $8000.

    Цитата Сообщение от perestoronin Посмотреть сообщение
    И на асме можно таким образом написать программу, что при том же алгоритме она будет медленнее аналогичной программы на Бейсике.
    Ну это будет что-то почти невероятное.
    Последний раз редактировалось litwr; 30.12.2015 в 21:12.

  2. #192
    Guru Аватар для Vslav
    Регистрация
    31.03.2013
    Адрес
    г. Киев
    Сообщений
    2,413
    Спасибо Благодарностей отдано 
    132
    Спасибо Благодарностей получено 
    755
    Поблагодарили
    353 сообщений
    Mentioned
    86 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от litwr Посмотреть сообщение
    Удалось постигнуть некоторые рецепты оптимизации от уважаемого ivagor и всё заработало побыстрее.
    ...
    Версий для БК не правил - никто не тестирует.
    Я бы на живых процессорах потестировал, скоро и до собственно БК надеюсь добраться.

  3. #193
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    7,840
    Спасибо Благодарностей отдано 
    653
    Спасибо Благодарностей получено 
    1,813
    Поблагодарили
    1,042 сообщений
    Mentioned
    22 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от litwr Посмотреть сообщение
    Нашел в сети awk-сценарий
    Круто, спасибо, работает!

    Цитата Сообщение от litwr Посмотреть сообщение
    вычесть быстрее, чем умножить.
    ?

    Цитата Сообщение от litwr Посмотреть сообщение
    На Амстраде JR быстрее JP
    Без тормозов в среднем условный jr скорее всего тоже будет быстрее jp, это я не додумал.

    Цитата Сообщение от litwr Посмотреть сообщение
    Ещё почему-то sbb не воспринимает
    Насколько вижу он просто забыл про sbb и не преобразует его.

    Цитата Сообщение от litwr Посмотреть сообщение
    Commodore +4/PAL - 1.92
    Ага, теперь быстрее 2 сек

    Цитата Сообщение от litwr Посмотреть сообщение
    Amstrad CPC6128 - 2.65
    Вектор с z80 и 6128 с вышеприведенной процедурой считают быстрее 2.5 сек, т.ч. определенно есть простор для оптимизации

  4. #194
    Veteran Аватар для perestoronin
    Регистрация
    25.11.2011
    Адрес
    г. Красногорск
    Сообщений
    1,389
    Спасибо Благодарностей отдано 
    16
    Спасибо Благодарностей получено 
    7
    Поблагодарили
    7 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от litwr Посмотреть сообщение
    что-то почти невероятное.
    Невероятно виртуальным может может указание города под Москвой и использование как домашнего сайта, сайта в доменной зоне ЕС, а остальное в очумелых руках вполне себе более "невероятное" (вполне себе в реальности).
    PS .Почему бы учебник по верстке и рекомендациям по эргономике сайтов не поковырять в перерывах между генерацией аналитики по ретро-железу?
    Пытался найти на сайте программки имеющие отношение к числу Пи, оказалось это не простой задачей с такой эргономикой и версткой. Может попроще можно сделать сайт и подобрать картинку для фона ?

    Ретрокладовая продажи

    продажи
    [свернуть]

  5. #195
    Member
    Регистрация
    25.11.2015
    Адрес
    г. Москва
    Сообщений
    192
    Спасибо Благодарностей отдано 
    12
    Спасибо Благодарностей получено 
    16
    Поблагодарили
    14 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Совершенный вариант деления для Z80

    Код вполне можно адаптировать и для других архитектур, требуются только ADD/ADC и условные переходы в зависимости от знака, переходы можно сделать и по флагу переноса, чуть сместив команды и метки. На входе BC - делитель меньше чем 0x8000, в регистрах HLA - делимое, которое должно быть меньше 256*BC, на выходе в HL будет остаток, а в A будет очередной байт частного, его можно сохранить и загрузить следующий чтобы продолжить деление. Делитель можно сделать и до 0xFFFF, но тогда полученный байт нужно конвертировать по таблице из 256 элементов.

    #define ADD(a,b) do{a+=(M&b); C=(a>>8)&1; S=(a>>7)&1; a&=M;}while(0)
    #define ADC(a,b) do{a+=(M&b)+C; C=(a>>8)&1; S=(a>>7)&1; a&=M;}while(0)

    void div_8(int &hl, int &a, int &bc){
    const int M=255;//такая маска чтобы не плодить макросов, hl и a могут быть разной разрядности
    int de=-bc&M;//для замены тормозного вычитания сложением
    int C=0,S=0;//флаги переноса и знака

    ADC(a,a); ADC(hl,hl); ADD(hl,de); if(S) goto A1;
    S1: ADC(a,a); ADC(hl,hl); ADD(hl,de); if(S) goto A2;
    S2: ADC(a,a); ADC(hl,hl); ADD(hl,de); if(S) goto A3;
    S3: ADC(a,a); ADC(hl,hl); ADD(hl,de); if(S) goto A4;
    S4: ADC(a,a); ADC(hl,hl); ADD(hl,de); if(S) goto A5;
    S5: ADC(a,a); ADC(hl,hl); ADD(hl,de); if(S) goto A6;
    S6: ADC(a,a); ADC(hl,hl); ADD(hl,de); if(S) goto A7;
    S7: ADC(a,a); ADC(hl,hl); ADD(hl,de); if(S) goto A8;
    S8: ADC(a,a);
    return;

    A1: ADC(a,a); ADC(hl,hl); ADD(hl,bc); if(!S) goto S2;
    A2: ADC(a,a); ADC(hl,hl); ADD(hl,bc); if(!S) goto S3;
    A3: ADC(a,a); ADC(hl,hl); ADD(hl,bc); if(!S) goto S4;
    A4: ADC(a,a); ADC(hl,hl); ADD(hl,bc); if(!S) goto S5;
    A5: ADC(a,a); ADC(hl,hl); ADD(hl,bc); if(!S) goto S6;
    A6: ADC(a,a); ADC(hl,hl); ADD(hl,bc); if(!S) goto S7;
    A7: ADC(a,a); ADC(hl,hl); ADD(hl,bc); if(!S) goto S8;
    A8: ADC(a,a); ADD(hl,bc);
    return;
    }

  6. #196
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    7,840
    Спасибо Благодарностей отдано 
    653
    Спасибо Благодарностей получено 
    1,813
    Поблагодарили
    1,042 сообщений
    Mentioned
    22 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    blackmirror, круто!

    Цитата Сообщение от blackmirror Посмотреть сообщение
    переходы можно сделать и по флагу переноса, чуть сместив команды и метки
    Даже не нужно ничего смещать

    - - - Добавлено - - -

    Цитата Сообщение от blackmirror Посмотреть сообщение
    для замены тормозного вычитания сложением
    У 8085 и 580ВМ1 вычитание не тормозное и с учетом того, что отпадает необходимость менять знак bc и становится не нужен самомодифицирующийся код для тасовки младших байт делимого получается быстрее, несмотря на то, что в ветках S перед adc a пришлось добавить stc. Сейчас в pi32 8085 догнал z80 (для 100 цифр, на 1000 все же z80 быстрее на 1 сек), по крайней мере с учетом векторовского торможения для обоих.
    Последний раз редактировалось ivagor; 31.12.2015 в 14:33.

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

  8. #197
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    7,840
    Спасибо Благодарностей отдано 
    653
    Спасибо Благодарностей получено 
    1,813
    Поблагодарили
    1,042 сообщений
    Mentioned
    22 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

Название:	pi100.gif 
Просмотров:	274 
Размер:	1.7 Кб 
ID:	55395Нажмите на изображение для увеличения. 

Название:	pi1000.gif 
Просмотров:	256 
Размер:	7.9 Кб 
ID:	55396
    100 - 2.8168 сек
    1000 - 286.8624 сек - 4 мин 46.8624 сек

    Часть меток в процедуре деления можно было убрать и заменить в командах переходов, но я поленился, т.к. на скорость это не влияет.
    Вложения Вложения
    Последний раз редактировалось ivagor; 01.01.2016 в 09:47.

  9. #198
    Veteran Аватар для perestoronin
    Регистрация
    25.11.2011
    Адрес
    г. Красногорск
    Сообщений
    1,389
    Спасибо Благодарностей отдано 
    16
    Спасибо Благодарностей получено 
    7
    Поблагодарили
    7 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    100 - 2.8168 сек
    Сразу не заметил, рекорд ставится с использованием такого инструмента как:
    tasm -b -85 pi32.asm
    Хотел бы уточнить, а где этот инструмент можно скачать ?
    На странице http://www.z80.info/z80sdt.htm есть расшифровка аббревиатуры tasm как:
    TASM table driven assembler Can assemble Z80 and a lot of other CPUs
    Ссылка на сборку под PC на той странице уже давно не актуальная
    Хотел спросить, может и исходники этого tasm где-то выложены?

    Также по тегу tasm нашел такой инструмент как http://metasm.cr0.org/
    https://code.google.com/p/metasm/source/browse/

    Кто-то уже пробовал его использовать? Как я понял его можно уставить и на сайт и использовать в онлайн для компиляции программ, он интегрируется с хипстерским ruby, что немаловажно, чтобы заинтересовать "свежую кровь" ретрожелезками. Попробую у себя где-нибудь развернуть.
    Последний раз редактировалось perestoronin; 01.01.2016 в 11:41.

    Ретрокладовая продажи

    продажи
    [свернуть]

  10. #199
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    7,840
    Спасибо Благодарностей отдано 
    653
    Спасибо Благодарностей получено 
    1,813
    Поблагодарили
    1,042 сообщений
    Mentioned
    22 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Когда у меня недавно были проблемы с архивным десктопом, тоже искал tasm32 - и не нашел. Про исходники не знаю.

  11. #200
    Veteran Аватар для perestoronin
    Регистрация
    25.11.2011
    Адрес
    г. Красногорск
    Сообщений
    1,389
    Спасибо Благодарностей отдано 
    16
    Спасибо Благодарностей получено 
    7
    Поблагодарили
    7 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    тоже искал tasm32 - и не нашел
    Благодарю, действительно table driven, сюда по компонентам.
    Правильное наименование TASM - the Telemark Assembler
    и по такому ключу находится у калькуляторщиков http://www.ticalc.org/archives/files...250/25051.html
    А также
    http://old-dos.ru/files/file_1385.html
    А здесь есть страничка с документацией онлайн
    http://www.cpcalive.com/docs/TASMMAN.HTM
    Также нашел полную версию документации в pdf.
    Эта pdf спрятана на сайте проекта sl100. На заметку, в состав борды SL100 входят модули и на Z80 и на 8080.

    Сказано что кроме DOS версии, есть еще и Linux сборка, а возможно и даже и исходники. Никому не попадались ?


    А здесь сказано, что был далее использован в новых разработках:
    http://tistory.wikidot.com/tasm
    In the early days of the TI community, TASM was the most popular assembler that was used by Z80 assembly programmers.

    Later it was superceded by IDE's such as Assembly Studio 8x and SPASM, however in some cases it is still used to this day.

    Assembly Studio 8x:
    описание
    http://tistory.wikidot.com/assembly-studio-8x
    Assembly Studio 8x v4.0
    A full featured Win32 assembler and IDE for z80 calculator
    а скачать дистрибутив можно по другой ссылке
    http://www.ticalc.org/archives/files...158/15892.html
    Есть контакты автора Jeremy Goetsch ([email protected])
    Проект судя по всему заброшен, вместе с доменом acz.org, может кто уже сталкивался с этим проектом и выпрашивал исходники у автора?

    SPASM:
    SPASM-ng is a z80 assembler with extra features to support development for TI calculators.
    https://github.com/alberthdev/spasm-ng

    Попутно откопал такое ретро-чудо, но уже для IBM360:
    http://www.jaymoseley.com/hercules/compilers/spasm.htm

    Пусть этот оффтопик побудет некоторое время в этой теме, позже его уберу в копилку знаний http://zx-pk.ru/wiki, кто-то же должен её пополнять .

    А здесь еще масса ретро-инструментов для ретро-процессоров упоминается, жаль что отчасти с битыми ссылками:
    http://wiki.nesdev.com/w/index.php/Tools
    Последний раз редактировалось perestoronin; 01.01.2016 в 13:21.

    Ретрокладовая продажи

    продажи
    [свернуть]

Страница 20 из 32 ПерваяПервая ... 161718192021222324 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Арифметические процедуры на ассемблере
    от spensor в разделе Программирование
    Ответов: 27
    Последнее: 13.05.2017, 20:56
  2. Мнемокоманды и числа.
    от ALKO в разделе Программирование
    Ответов: 0
    Последнее: 15.02.2014, 03:49
  3. try-catch на ассемблере z80
    от siril в разделе Программирование
    Ответов: 22
    Последнее: 30.10.2012, 21:17
  4. Определение числа сторон
    от mungo в разделе Внешние накопители
    Ответов: 1
    Последнее: 16.03.2012, 18:06

Метки этой темы

Ваши права

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