User Tag List

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

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

Комбинированный просмотр

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

    Регистрация
    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)

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

  3. #2

    Регистрация
    22.03.2018
    Адрес
    г. Усть-Каменогорск, Казахстан
    Сообщений
    1,411
    Спасибо Благодарностей отдано 
    91
    Спасибо Благодарностей получено 
    180
    Поблагодарили
    139 сообщений
    Mentioned
    21 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Manwe Посмотреть сообщение
    Смысл программы, конечно, не в скорости, а в минимальном размере.
    Плохо жить без DIV

    MOV #6,R0
    MOV #<DecStr+6>,R1
    1$:
    CLR R2
    DIV #10.,R2
    INC R3
    MOVB R3,-(R1)
    MOV R2,R3
    SOB R0,1$
    БK 0010-01, БК 11М, БК11М+,МС 0511 (УКНЦ)х3, Atari 65XE, Commodore 64, AMIGA 500 (HDD), ZX EVO

  4. #3

    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    7,515
    Спасибо Благодарностей отдано 
    345
    Спасибо Благодарностей получено 
    715
    Поблагодарили
    597 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Вот так правильней
    Цитата Сообщение от S_V_B Посмотреть сообщение
    Код:
    ;
    ; Input: R3
    ;
    		MOV	#6,R0
    		MOV	#<DecStr+6>,R1
    1$:
    		CLR	R2
    		DIV	#10.,R2
    ;		INC	R3
    		ADD	#'0, R3
    		MOVB	R3,-(R1)
    		MOV	R2,R3
    		SOB	R0,1$

  5. #4

    Регистрация
    22.03.2018
    Адрес
    г. Усть-Каменогорск, Казахстан
    Сообщений
    1,411
    Спасибо Благодарностей отдано 
    91
    Спасибо Благодарностей получено 
    180
    Поблагодарили
    139 сообщений
    Mentioned
    21 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Hunta Посмотреть сообщение
    Вот так правильней
    согласен
    БK 0010-01, БК 11М, БК11М+,МС 0511 (УКНЦ)х3, Atari 65XE, Commodore 64, AMIGA 500 (HDD), ZX EVO

  6. #5

    Регистрация
    03.09.2018
    Адрес
    г. Орёл
    Сообщений
    68
    Спасибо Благодарностей отдано 
    1
    Спасибо Благодарностей получено 
    4
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Manwe Посмотреть сообщение
    Народ спрашивал программу печати числа в 10-ой системе счисления.
    Деление на 10 и печать остатка от деления - это же классика.
    Только деление сделано вычитанием.

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

    Цитата Сообщение от S_V_B Посмотреть сообщение
    Плохо жить без DIV
    Вот-вот

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

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

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

Ваши права

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