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

User Tag List

Страница 4 из 20 ПерваяПервая 12345678 ... ПоследняяПоследняя
Показано с 31 по 40 из 192

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

  1. #31
    Master
    Регистрация
    19.04.2013
    Адрес
    г. Чебоксары
    Сообщений
    546
    Спасибо Благодарностей отдано 
    14
    Спасибо Благодарностей получено 
    137
    Поблагодарили
    106 сообщений
    Mentioned
    8 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Manwe Посмотреть сообщение
    Стало быть, надо их выправлять перед началом.
    А кто мешает? Добавляем модификаторы:
    Код:
    PUSHA:  MOV #5,PUCN$
            MOV (PC)+,(PC)
            .WORD 10046
    PUMD$:  MOV R0,-(SP)
            ADD #100,PUMD$
            DEC (PC)+
    PUCN$:  .WORD 5
            BPL PUMD$
    
    POPA:   MOV #5,POCN$
            MOV (PC)+,(PC)
            .WORD 12605
    POMD$:  MOV (SP)+,R5
            DEC POMD$
            DEC (PC)+
    POCN$:  .WORD 5
            BPL POMD$
    Получаем ещё более бесполезного монстра.
    С моей точки зрения, ничего лучше, чем метод подсмотренный в ПЗУ БОС БК11М не придумать.
    Код:
    ;вызов так: JSR R5,PUSHA, сохраняем все регистры
    ;но через R5 нельзя передать параметр функции, чтобы было можно, есть более сложный метод
    PUSHA:  MOV     R4,-(SP)
            MOV     R3,-(SP)
            MOV     R2,-(SP)
            MOV     R1,-(SP)
            MOV     R0,-(SP)
            ;MOV    R5,-(SP) ;это - чтобы и в R5 можно было
            ;MOV    14(SP),R5       ;передавать параметры
            ;CALL   @(SP)+
            CALL    (R5)
            MOV     (SP)+,R0
            MOV     (SP)+,R1
            MOV     (SP)+,R2
            MOV     (SP)+,R3
            MOV     (SP)+,R4
            MOV     (SP)+,R5
            RETURN
    
    ;пример использования
    SUBR:   JSR R5,PUSHA ;сохраняем все регистры выполняем функцию
            ...
            ...
            RETURN ;выход и восстановление всех регистров

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

  3. #32
    Veteran Аватар для Manwe
    Регистрация
    06.12.2017
    Адрес
    г. Москва
    Сообщений
    1,722
    Спасибо Благодарностей отдано 
    167
    Спасибо Благодарностей получено 
    403
    Поблагодарили
    256 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Очевидно, практического смысла это не имеет. Только из любви к искусству Быстрее и короче написать пять раз MOV Rn,-(SP). А если такая процедура есть в ПЗУ, то ещё быстрее и короче обратиться к ней.
    manwe.pdp-11.ru

  4. #33
    Veteran
    Регистрация
    22.03.2018
    Адрес
    г. Усть-Каменогорск, Казахстан
    Сообщений
    1,396
    Спасибо Благодарностей отдано 
    86
    Спасибо Благодарностей получено 
    170
    Поблагодарили
    136 сообщений
    Mentioned
    21 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Я в другой теме как-то затупил... спрашивал, оказалось, что тот монстр был PUSHA...POPA.. но весьма навороченный и и порожденный ЯВУ.
    Но натолкнуло на мысль, что можно сделать процедуру для этого...

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

    Просто я наивно полагал, что на супер-пупер ортогональном процессоре. за многие годы сложились какие-то шаблоны программирования

  5. #34
    Guru
    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    7,002
    Спасибо Благодарностей отдано 
    287
    Спасибо Благодарностей получено 
    631
    Поблагодарили
    531 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Давно всё уже изобретено DEC и помещено в SYSLIB
    Код:
    	CALL	$SAVAL
    ;;
    $SAVAL::
    	MOV	R4,-(SP)	;Save R4
    	MOV	R3,-(SP)	;Save R3
    	MOV	R2,-(SP)	;Save R2
    	MOV	R1,-(SP)	;Save R1
    	MOV	R0,-(SP)	;Save R0
    	MOV	12(SP),-(SP)	;Get the return address
    	MOV	R5,14(SP)	;Save R5
    	CALL	@(SP)+	;Call the caller
    	MOV	(SP)+,R0	;Restore R0
    	MOV	(SP)+,R1	;and R1
    	MOV	(SP)+,R2	;and R2
    	MOV	(SP)+,R3	;and R3
    	MOV	(SP)+,R4	;and R4
    	MOV	(SP)+,R5	;and R5
    	RETURN

  6. #35
    Guru
    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    7,002
    Спасибо Благодарностей отдано 
    287
    Спасибо Благодарностей получено 
    631
    Поблагодарили
    531 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от hobot Посмотреть сообщение
    из одной паставки
    Из одной пАставки для этой п/п не требуется - мало того, что она практически во всех SYSLIB-ах, так ещё и ОЧЕНЬ древняя, не удивлюсь, если и в DOS/BATCH-11 найдётся.
    Цитата Сообщение от hobot Посмотреть сообщение
    sysmac.zip
    Нужна именно SYSLIB.OBJ или SYSLIB.OLB - она там в оттранслированном виде. SYSMAC здесь не причём - некоторые, как обычно, не в теме

  7. #36
    Veteran
    Регистрация
    22.03.2018
    Адрес
    г. Усть-Каменогорск, Казахстан
    Сообщений
    1,396
    Спасибо Благодарностей отдано 
    86
    Спасибо Благодарностей получено 
    170
    Поблагодарили
    136 сообщений
    Mentioned
    21 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Исходники имеются? Все что я видел про RT11 сплошные макросы.., что не очень интересно особенно в приложении к БК10

  8. #37
    Guru
    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    7,002
    Спасибо Благодарностей отдано 
    287
    Спасибо Благодарностей получено 
    631
    Поблагодарили
    531 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от S_V_B Посмотреть сообщение
    Исходники имеются?
    Как минимум для RT-11 5.04 и 5.07 гуляют по сети дистры с исходниками. А с макросами советую сдружиться, потому как в чём то более менее серьёзном - серьёзно экономят время, а если правильные создать - то и понимание логики работы программы

  9. #38
    Veteran Аватар для Manwe
    Регистрация
    06.12.2017
    Адрес
    г. Москва
    Сообщений
    1,722
    Спасибо Благодарностей отдано 
    167
    Спасибо Благодарностей получено 
    403
    Поблагодарили
    256 сообщений
    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

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

    Oleg N. Cher (04.12.2021)

  11. #39
    Veteran
    Регистрация
    22.03.2018
    Адрес
    г. Усть-Каменогорск, Казахстан
    Сообщений
    1,396
    Спасибо Благодарностей отдано 
    86
    Спасибо Благодарностей получено 
    170
    Поблагодарили
    136 сообщений
    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

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

    По умолчанию

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

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

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

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

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

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

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

Ваши права

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