User Tag List

Показано с 1 по 10 из 229

Тема: Написание программ для БК0010

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #11

    Регистрация
    06.12.2017
    Адрес
    г. Москва
    Сообщений
    1,724
    Спасибо Благодарностей отдано 
    167
    Спасибо Благодарностей получено 
    406
    Поблагодарили
    257 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Народ спрашивал программу печати числа в 10-ой системе счисления.
    Этой теме посвящена одна глава из книги «Хакеры» – очень вдохновляющая, советую прочитать!
    Я попытался воссоздать эту программу:

    Код:
    ; Decimal by Manwe
    ; input:  R0 - number to print
    ; output: R1 - pointer to text string
    
    DECIM:  MOV #NUMBER,R1 ; pointer to output text string
            CLRB -(R1)     ; end of text marker
            MOV #10.,R4
    1:      MOV #-1.,R5
    2:      INC R5         ; counter of 10s
            SUB R4,R0
            BHIS 2         ; branch if higher or same
            ADD #72,R0     ; #10. + '0' ASCII code
            MOVB R0,-(R1)  ; store R0 to text string
            MOV R5,R0      ; let's count next how many 10s in number of 10s
            BNE 1
            RET            ; returns text string pointer in R1
    
    .BLKB 6
    NUMBER:
    Смысл программы, конечно, не в скорости, а в минимальном размере.

    Скрытый текст


    Хакерская эстетика программирования

    Так произошло и с программой печати десятичных чисел. Это была подпрограмма, иногда использовавшаяся в других программах. Она позволяла транслировать двоичные числа, которыми оперировал компьютер, в обычные десятичные цифры. По словам Сандерса, эта проблема являлась «своего рода павлиньим хвостом в программировании, и если вы могли написать рабочую программу печати десятичных чисел, то вы знали о компьютере достаточно, чтобы расправить хвост и называть себя, в некотором роде, программистом. А если вы были в состоянии написать действительно хорошую процедуру, то вы могли бы попробовать называть себя хакером». Проблема превратилась в нечто большее, чем просто состязание, окончательный бамминг (bumming на хакерском жаргоне - выкидывание "лишних" команд) процедуры печати десятичных чисел превратился для хакеров в своеобразные поиски Святого Грааля.

    В течение нескольких месяцев было изготовлено множество версий процедуры печати десятичных чисел. Если программист был непроходимо глуп или был полным идиотом и совершенным «лузером», то подпрограмма конверсии отняла бы у него около сотни команд. Но любой хакер, стоивший своего имени, мог уместить ее в меньший объем. В конечном счете, попеременно убирая инструкции то в одном, то в другом месте, процедуру уменьшили до примерно пятидесяти инструкций.

    После этого дела приняли серьезный оборот. Хакеры тратили многие часы, пытаясь найти путь, как можно было бы сделать все то же самое, но при помощи меньшего количества кода. Это стало больше чем соревнованием - это стало настоящим крестовым походом. Сколько бы сил не было потрачено, никто не был в состоянии преодолеть барьер из пятидесяти команд. Возник вопрос: а можно ли вообще сделать ее меньше? И есть ли предел, ниже которого бамнуть программу просто нельзя?

    Среди многих, кто пытался решить эту головоломку, был парень по фамилии Дженсен, высокий и тихий хакер из Мэйна. Он обычно тихо сидел в Клудж Комнате (Kluge Room - пристанище хакеров в Массачусетском Технологическом Институте конца 50-ых и начала 60-ых годов) и покрывал своими каракулями распечатки с таким же невозмутимым спокойствием, как живущий в лесной глуши человек неспешно обстругивает ножом деревяшку, сидя на завалинке перед своим домом. Дженсен всегда пытался найти способ как сжать свои программы в объеме и увеличить их скорость. Его код, на первый взгляд, представлял собой беспорядочную последовательность логических и арифметических команд, часто вызывающих производство различных расчетов в разных частях одного и того же 18-битного слова (компьютер TX-0 использовал 18-разрядные слова). Если коротко, то его стиль программирования состоял из удивительных вещей и волшебных трюков.

    До Дженсена существовала некоторая устоявшаяся точка зрения, что единственным логическим алгоритмом для процедуры печати десятичных чисел является последовательное вычитание, при котором использовались таблицы степеней числа 10 так, чтобы результирующее число попадало в соответствующие столбцы цифр. Дженсен как-то догадался, что таблица со степенями десятки была не нужна. Он придумал алгоритм, который позволял конвертировать числа обратным образом, а при помощи хитрого программного фокуса печатать их в нужном порядке. Кроме того, было дано сложное математическое доказательство всего этого, которое становилось понятным только после того, как хакеры увидели программу Дженсена, пришпиленную к доске объявлений, из которой было видно, что ему удалось преодолеть лимит длины программы для печати десятичных чисел. В ней было сорок шесть команд. Все присутствовавшие, с отпавшими челюстями уставились на код. Марж Сандерс потом припоминала, что хакеры, впервые за много дней, вели себя необычно тихо.

    «Мы поняли, что дошли до логического конца»,- сказал позднее Боб Сандерс, - «Это была Нирвана».



    Автор: Стивен Леви
    Перевод: Андрей Лукин
    [свернуть]
    Последний раз редактировалось Manwe; 04.06.2019 в 13:39.
    manwe.pdp-11.ru

    Этот пользователь поблагодарил Manwe за это полезное сообщение:

    Oleg N. Cher(04.12.2021)

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

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

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

Похожие темы

  1. написание простейшей демки для тренировки
    от AAA в разделе Для начинающих
    Ответов: 121
    Последнее: 22.05.2012, 18:06
  2. написание музыки на Dendy.
    от s1moncpu в разделе Nintendo
    Ответов: 27
    Последнее: 25.05.2007, 05:34
  3. написание музыки на Dendy.
    от s1moncpu в разделе Музыка
    Ответов: 2
    Последнее: 16.05.2007, 10:59
  4. Тестирование программ
    от Vitamin в разделе Программирование
    Ответов: 5
    Последнее: 23.01.2005, 21:46

Ваши права

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