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

User Tag List

Страница 21 из 32 ПерваяПервая ... 171819202122232425 ... ПоследняяПоследняя
Показано с 201 по 210 из 312

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

  1. #201
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    7,869
    Спасибо Благодарностей отдано 
    660
    Спасибо Благодарностей получено 
    1,862
    Поблагодарили
    1,062 сообщений
    Mentioned
    22 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    ass (шутники) по картинке понравился, но увы есть отличия в синтаксисе от tasm и справка в 7ке не смотрится.

    Цитата Сообщение от perestoronin Посмотреть сообщение
    А здесь есть страничка с документацией онлайн
    Этот файл есть в архиве

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

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    Этот файл есть в архиве
    Благодарю, все еще в поиске исходника tasm или хотя бы linux версии, на данный момент нашел вот такой архив, в нем есть документация в pdf по программированию для процессора 6502, думаю может быть полезна для тех, кто разрабатывает версию программы расчета числа Пи под процессор 6502 (NES, Агаты, Анюша, Apple 1).
    Левенталь 6502 Подпрограммы на ассемблере (книга на английском).
    в том же архиве находится и сам tasm 3.2, но с таблицей только для 6502.
    Подумалось, что наверное не так сложно будет мне расковырять tasm с целью получить fork в исходниках, а сами таблички-то просто текстовые файлы, их можно использовать будет без изменений в авторской редакции.
    tasm мега компилятор с ассемблера, и сразу под массу процессоров, среди которых есть почти все нужные нам ретро-процессоры.
    Не представляется сложным написать самим таблички под какие-то другие более экзотичные процессоры , для этого и программирование даже знать и не нужно

    Не особенно тщательно искал но на той же страничке проекта много чего выложено, может еще что-то найдется в тех архивах уникальное, как к примеру выше упомянутая версия книги Левенталя для 6502, дайте знать и мне.

    Ждем теперь оптимизированную версию расчета чиста Пи по неоптимальному алгоритму и для процессора 6502
    Последний раз редактировалось perestoronin; 01.01.2016 в 13:53.

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

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

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

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    Пока нормальные люди отдыхают, некоторые занимаются всякими странными делами
    100 - 2.8168 сек
    1000 - 286.8624 сек - 4 мин 46.8624 сек
    Как вижу, деление работает с любым делителем до 2^16, это действительно необходимо? Уменьшение диапазона в два раза позволит выкинуть половину кода, а из оставшейся половину условных переходов. Вроде бы алгоритму "краника" деления на числа до 2^15 хватает для вычисления 4930 десятичных знаков.

  4. #204
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    7,869
    Спасибо Благодарностей отдано 
    660
    Спасибо Благодарностей получено 
    1,862
    Поблагодарили
    1,062 сообщений
    Mentioned
    22 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от perestoronin Посмотреть сообщение
    Ждем теперь оптимизированную версию расчета чиста Пи по неоптимальному алгоритму и для процессора 6502
    Судя по времени работы текущая версия litwr весьма оптимизирована:
    Цитата Сообщение от litwr Посмотреть сообщение
    Собрал такие данные для 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
    Цитата Сообщение от perestoronin Посмотреть сообщение
    Не представляется сложным написать самим таблички под какие-то другие более экзотичные процессоры
    Это большой плюс tasma, который перевешивает (для меня) его недостатки.

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

    Цитата Сообщение от blackmirror Посмотреть сообщение
    Как вижу, деление работает с любым делителем до 2^16, это действительно необходимо?
    Да, старший бит делителя бывает единичным. Диапазоны чисел я проверял, в умножении учет диапазона хорошо помог, а в делении, к сожалению, нет.

    Цитата Сообщение от blackmirror Посмотреть сообщение
    Уменьшение диапазона в два раза позволит выкинуть половину кода, а из оставшейся половину условных переходов.
    ? Не могу сообразить, за счет чего можно выкинуть половину кода при уменьшении диапазона в два раза. На каждый бит делимого приходится 8 строк.

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

    Цитата Сообщение от blackmirror Посмотреть сообщение
    Вроде бы алгоритму "краника" деления на числа до 2^15 хватает для вычисления 4930 десятичных знаков.
    Это Вы наверно про исходный, а здесь то "4х циферный"
    Последний раз редактировалось ivagor; 01.01.2016 в 15:51. Причина: исправил опечатки и ошибки

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

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    весьма оптимизирована
    весьма вероятно что это так, но цифры уж очень близки к версии для 8080, поэтому думаю что это именно весьма неоптимизированная версия, при равной частоте с 8080, должна получаться версия быстрее для 6502.
    Цитата Сообщение от ivagor Посмотреть сообщение
    а здесь то "4х циферный"
    память можно рассматривать и как массив байт и как массив бит, другое дело что обращение к памяти как к массиву бит потребует накладных расходов, тут нужно внимательно смотреть сколько выигрываем и сколько проиграем в производительности и объеме памяти.

    В дополнение старый список инструментов для компиляции программ под ретропроцессоры
    http://www.z80.info/z80sdt.htm

    Цитата Сообщение от perestoronin Посмотреть сообщение
    все еще в поиске исходника tasm
    увы ни исходника tasm, ни версию для linux, я не нашел, но зато нашел другой ассемблер и тоже управляемый таблицами и причем с исходными кодами самого ассемблера:
    http://www.penguin.cz/~niki/tdasm/
    думаю будет полезен и для Z80, тем более что таблица (хотя и неполная) для z80 прилагается, а полные таблицы и отсутствующие таблички можно попробовать портировать для tdasm из архива tasm, но форматы таблиц различны.
    PS. В целом мне кажется tdasm не дотягивает до уровня tasm, поэтому ищу исходники или версию tasm под linux дальше.

    еще наткнулся на vasm, тоже достоен внимания http://sun.hasenbraten.de/vasm/index.php?view=relsrc
    Последний раз редактировалось perestoronin; 01.01.2016 в 16:04.

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

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

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

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    ? Не могу сообразить, за счет чего можно выкинуть половину кода при уменьшении диапазона в два раза. На каждый бит делителя приходится 4 строки.
    Мой код начинает работать с R<B, и на каждом шаге остаток удваивается с добавлением очередного бита делимого, после чего к нему либо прибавляется либо вычитается B, чтобы |R| оставался меньше B, а далее можно обрабатывать следующий бит. Если B<2^15, то |R|<2^15 на каждом шаге, и после удвоения переполнения произойти не может, а условный переход требуется только чтобы отследить момент, когда сложение с B нужно заменить вычитанием. А вот если |R|>=2^15, то здесь требуется дополнительное ветвление, чтобы правильно отследить знак после добавления/вычитания B.

  7. #207
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    7,869
    Спасибо Благодарностей отдано 
    660
    Спасибо Благодарностей получено 
    1,862
    Поблагодарили
    1,062 сообщений
    Mentioned
    22 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    В версии для 8080 "удвоенное" количество кода вызвано отсутствием команды HL=HL+RP+флаг переноса. В вариантах для 8085 и z80 код почти как у Вас, только с переходами по переносу, а не знаку.

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

    Цитата Сообщение от ivagor Посмотреть сообщение
    На каждый бит делителя приходится 8 строк.
    Поправлюсь - на каждый бит делимого

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

    Цитата Сообщение от ivagor Посмотреть сообщение
    Да, старший бит делителя бывает единичным.
    Уф, это я опять про делимое, а не про делитель. Максимальный делитель для 1000 - 6999, для 100 - 699. Не думаю, что это можно использовать для сокращения процедуры при расчете 1000 или 100 цифр. Вот если бы делимое, которое я как раз имел в виду, тогда другое дело.
    Последний раз редактировалось ivagor; 01.01.2016 в 16:01.

  8. #208
    Guru
    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,852
    Спасибо Благодарностей отдано 
    84
    Спасибо Благодарностей получено 
    235
    Поблагодарили
    171 сообщений
    Mentioned
    9 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от perestoronin Посмотреть сообщение
    Хотел бы уточнить, а где этот инструмент можно скачать ?
    Я скачивал с официальной странички, сейчас уже не открывается, но есть в веб-архиве.

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

    По умолчанию

    Цитата Сообщение от b2m Посмотреть сообщение
    сейчас уже не открывается
    а другие на ретро-железках еще и деньги зарабатывают, с каждой копии своей программы по 100 сантиков:
    http://www.cdadapter.com/cross32.htm
    Вот нам и Licensing Best Practices в действии.
    Последний раз редактировалось perestoronin; 01.01.2016 в 16:31.

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

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

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

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    В версии для 8080 "удвоенное" количество кода вызвано отсутствием команды HL=HL+RP+флаг переноса.
    8080 гадость конечно редкостная, но даже для него с делением не всё так плохо:
    #define ADC8(a,b) do{a=(a&255)+(b&255)+C; C=a>>8; a&=255;}while(0)
    #define ADD16(a,b) do{a=(a&65535)+(b&65535); C=a>>16; a&=65535;}while(0)
    //BC - делитель, должен быть в диапазоне от 256 до 32768
    //DE = -BC
    //HL < BC - старшие два байта делимого
    //SP - младший байт делимого расширенный нулём
    //A - частное
    //деление производится по формуле A=HL*256/BC; HL=HL*256%BC; HL+=SP; if(HL>=BC) {HL-=BC; ++A;}
    void div_8080(int &hl, int &a, int &bc){
    int sp=a;
    int de=-bc;
    int C=0;

    ADD16(hl,hl); ADD16(hl,de); if(!C) goto A1;
    S1: ADC8(a,a); ADD16(hl,hl); ADD16(hl,de); if(!C) goto A2;
    S2: ADC8(a,a); ADD16(hl,hl); ADD16(hl,de); if(!C) goto A3;
    S3: ADC8(a,a); ADD16(hl,hl); ADD16(hl,de); if(!C) goto A4;
    S4: ADC8(a,a); ADD16(hl,hl); ADD16(hl,de); if(!C) goto A5;
    S5: ADC8(a,a); ADD16(hl,hl); ADD16(hl,de); if(!C) goto A6;
    S6: ADC8(a,a); ADD16(hl,hl); ADD16(hl,de); if(!C) goto A7;
    S7: ADC8(a,a); ADD16(hl,hl); ADD16(hl,de); if(!C) goto A8;
    S8: ADC8(a,a); ADD16(hl,sp); ADD16(hl,de); if(!C) goto A9;
    S9: ADC8(a,0);
    return;
    A1: ADC8(a,a); ADD16(hl,hl); ADD16(hl,bc); if(C) goto S2;
    A2: ADC8(a,a); ADD16(hl,hl); ADD16(hl,bc); if(C) goto S3;
    A3: ADC8(a,a); ADD16(hl,hl); ADD16(hl,bc); if(C) goto S4;
    A4: ADC8(a,a); ADD16(hl,hl); ADD16(hl,bc); if(C) goto S5;
    A5: ADC8(a,a); ADD16(hl,hl); ADD16(hl,bc); if(C) goto S6;
    A6: ADC8(a,a); ADD16(hl,hl); ADD16(hl,bc); if(C) goto S7;
    A7: ADC8(a,a); ADD16(hl,hl); ADD16(hl,bc); if(C) goto S8;
    A8: ADC8(a,a); ADD16(hl,sp); if(C) goto S9;
    A9: ADD16(hl,bc);
    return;
    }

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

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

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

Эту тему просматривают: 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

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

Ваши права

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