User Tag List

Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 276

Тема: Практическое программирование в среде RT-11 на ассемблере.

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

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

    Регистрация
    28.11.2016
    Адрес
    г. Санкт-Петербург
    Сообщений
    9
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ну что, вроде ожили? Чего было-то? Форум в воскресенье висел или лежал?

    Цитата Сообщение от Titus Посмотреть сообщение
    Ааа) PC же перескакивает команду SEC автоинкрементом)
    Ну, PDP-шники, вы извращенцы) А такие методы адресации этому лишь способствуют)
    Пардон, месье, я вижу — Вы в нашем деле новичок и ещё не успели познать всю радость извращений! А что Вы скажете на пару_строк кода 8080?:
    Код:
    error    EQU noerror+1
    noerror: CPI 37h
             RET
    Как Вы думаете, куда будет передано управление по метке error и какой такой метод адресации использован в команде по метке noerror?
    Правда, у 80-го процессора есть однобайтные команды условного возврата из подпрограмм, так что ему будет дешевле написать условный возврат, нежели вышеприведённый код. А с вызовом подпрограмм уже не так: у 11-го процессора вызов занимает 4 байта, а у 8080 — три, что, казалось бы, даёт ему экономию кода в 25%. Но!!! Вы верно заметили про "такие методы адресации"! В 11-м процессоре есть такие методы адресации, которые требуют при вызове подпрограммы всего 2-х байтов кода, так что при их использовании 8080 уже отстаёт по краткости кода, причём на 33%. Однако и это не всё!
    Практическая польза при программировании в среде RT-11 на ассемблере заключается в возможности вызовов подпрограмм вообще без команд вызова подпрограмм, а просто по именам! Вот пример такого кода, который типа печатает на экране результат А*В+D/F:
    Код:
         F_MUL А, В, С ; вызов подпрограммы умножения А и В с занесением результата в С
         F_DIV D, E, F ; вызов подпрограммы деления D на E с занесением результата в F
         F_ADD C, F, G ; вызов подпрограммы сложения C и F с занесением результата в G
         F_TYPE G      ; вызов подпрограммы печати G на экране
    Где-то поодаль находятся коды подпрограмм F_MUL, F_DIV, F_ADD (она же F_SUB) и F_TYPE, а также переменные.
    Программистская фишка здесь заключается в настройке регистра (например, R4) на начало такого блока "данных" и завершении каждой из подпрограмм командой не RET, a JMP @(R4)+, так что указанный регистр выполняет функцию как бы счётчика команд, если считать F_MUL (и прочие) командами, а не именами подпрограмм. Но поскольку и эти "команды", и данные к ним находятся вперемежку, то этот же регистр выполняет функцию и как бы указателя стека, только растущего не вниз, а вверх, как и счётчик команд. Как Вам, месье, понравится такое извращение?
    На самом деле я всего лишь привёл упрощённый пример куска фортрановского кода от RT11, который, впрочем, без упрощений не стеснялся применять и в своих ассемблерных программах. Понятно, что в вычислительных задачах количество вызовов наиболее ходовых подпрограмм (+, -, * и /, а также присвоения и преобразования данных) столь велико, что экономия по одному слову памяти на каждый вызов, а, главное, экономия времени от неиспользования обычного стека (как это было бы при обычных вызовах CALL) получается весьма заметной.
    Всего доброго.
    Евгений.

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

  3. #2

    Регистрация
    27.05.2009
    Адрес
    СССР, Новосибирск
    Сообщений
    5,850
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    289
    Поблагодарили
    233 сообщений
    Mentioned
    30 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Eats Посмотреть сообщение
    у 11-го процессора вызов занимает 4 байта
    Ну не всегда - зависит от того как вызывать

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

    Цитата Сообщение от form Посмотреть сообщение
    как вызывать
    Кстати, повторюсь - где-то уже писал, но напомнить фичу не помешает
    Код:
    	JSR	R0,@PC
    	JSR	R1,@PC
    	JSR	R2,@PC
    	...
    Правильно, это сохранение регистров в стеке, при том не меняя C,V,Z,N в PSW
    Последний раз редактировалось form; 05.12.2016 в 15:43.
    PDP-11/83, Электроника МС0511 (УК-НЦ), DECserver 90M
    Q-Bus: H9278-A, DLV11-J, DZQ11, DHV11, DELQA-M, LPV11, CQD-420/TM, DRV11
    PMI: KDJ11-BF, MSV11-JE
    VT220, CM7209

  4. #3

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,373
    Спасибо Благодарностей отдано 
    1,695
    Спасибо Благодарностей получено 
    2,214
    Поблагодарили
    868 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Eats Посмотреть сообщение
    Пардон, месье, я вижу — Вы в нашем деле новичок и ещё не успели познать всю радость извращений! А что Вы скажете на пару_строк кода 8080?:
    Код:

    error EQU noerror+1
    noerror: CPI 37h
    RET

    Как Вы думаете, куда будет передано управление по метке error и какой такой метод адресации использован в команде по метке noerror?
    Не спрашивайте меня такие сложные вопросы)

  5. #4

    Регистрация
    27.05.2009
    Адрес
    СССР, Новосибирск
    Сообщений
    5,850
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    289
    Поблагодарили
    233 сообщений
    Mentioned
    30 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    сложные вопросы
    Сложные вопросы можно даже в RT-11 организовать
    Код:
    .TY TEST.MAC
            .TITLE  TEST
            .MCALL  .EXIT,.PRINT
    
            .PSECT  CODE,I
    TEXT:   .ASCIZ  /I=D/                   ;XXX EVEN
    
    START:  .PRINT  #TEXT                   ;PRINT
            .EXIT                           ;EXIT
    
            .PSECT  DATA,D
            .ASCIZ  /I<>D/
    
            .END    START
    
    
    .MAC TEST
    
    .LIN TEST/RUN
    I=D
    
    .LIN TEST/RUN/ID
    I<>D
    
    .
    А мой любимый "сложный" вопрос - про фортран: CALL SUB(1) - объяснить что делает данный оператор
    Большинство знакомых программеров (даже тех кто знает фортран с далеких времен) отвечает неправильно (хотя с появлением всякого дерьма вроде g77 их ответ можно принять)
    PDP-11/83, Электроника МС0511 (УК-НЦ), DECserver 90M
    Q-Bus: H9278-A, DLV11-J, DZQ11, DHV11, DELQA-M, LPV11, CQD-420/TM, DRV11
    PMI: KDJ11-BF, MSV11-JE
    VT220, CM7209

  6. #5

    Регистрация
    28.11.2016
    Адрес
    г. Санкт-Петербург
    Сообщений
    9
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от form Посмотреть сообщение
    А мой любимый "сложный" вопрос - про фортран: CALL SUB(1) - объяснить что делает данный оператор
    Большинство знакомых программеров (даже тех кто знает фортран с далеких времен) отвечает неправильно
    Холмс и Ватсон летят на воздушном шаре, поднялись уже высоко - за облака. Ватсон не выдержал и спрашивает:
    - Холмс, как Вы думаете, где мы находимся?
    - В корзине воздушного шара, дорогой Ватсон, - невозмутимо ответил Холмс.

    Вот у Вас как код написан неряшливо, так же неряшливо Вы и вопрос пытаетесь задать. Обратите внимание: он у Вас даже не заканчивается вопросительным знаком! А ведь известно: какой вопрос, такой и ответ. По-моему, такая неаккуратность нехороша для программиста, выглядит как неуважение к остальным...
    Всего доброго.
    Евгений.

  7. #6

    Регистрация
    27.05.2009
    Адрес
    СССР, Новосибирск
    Сообщений
    5,850
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    289
    Поблагодарили
    233 сообщений
    Mentioned
    30 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Eats Посмотреть сообщение
    Обратите внимание: он у Вас даже не заканчивается вопросительным знаком!
    Что правильно если внимательно прочитать как он написан

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

    Цитата Сообщение от hobot Посмотреть сообщение
    передаёт ей входящий параметр = 1
    Здесь и заключается ошибка
    То есть конечно 1 в качестве параметра передается, но есть нюанс - у фортрана аргументы векторные. С точки зрения паскаля можно считать, что они всегда var, а это уже совсем другая песня

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

    Цитата Сообщение от Eats Посмотреть сообщение
    Вот у Вас как код написан неряшливо
    Разумеется не неряшливый код "был, но дискеты потерялись, а потому примеров не дам"?
    PDP-11/83, Электроника МС0511 (УК-НЦ), DECserver 90M
    Q-Bus: H9278-A, DLV11-J, DZQ11, DHV11, DELQA-M, LPV11, CQD-420/TM, DRV11
    PMI: KDJ11-BF, MSV11-JE
    VT220, CM7209

  8. #7

    Регистрация
    30.08.2011
    Адрес
    Зеленоград
    Сообщений
    7,161
    Спасибо Благодарностей отдано 
    2,979
    Спасибо Благодарностей получено 
    373
    Поблагодарили
    310 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от form Посмотреть сообщение
    но есть нюанс - у фортрана аргументы векторные.
    Ты в теме ПАСКАЛЬ И МАКРО-11 когда обсуждался опрос клавиатуры и системная библиотека фортрана уже
    упоминал об этом. На самом деле, если Фортран под RT-11 такой мощный, почему до сих пор отдельной темы нет?
    Исходники на нём так или иначе (для примеров) в архиве и сети есть, от простых до сложных.
    Архив программ для УК-НЦ, ДВК и БК.

    Ищу игру "СТРАНА МОНСТРОВ" [monstr.sav] для ДВК.

  9. #8

    Регистрация
    27.05.2009
    Адрес
    СССР, Новосибирск
    Сообщений
    5,850
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    289
    Поблагодарили
    233 сообщений
    Mentioned
    30 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от hobot Посмотреть сообщение
    почему до сих пор отдельной темы нет?
    А смысл делать тему если никто фортран не использует видимо?
    А есть желание - так все описания и фортрана для разных систем и системных подпрограмм доступны...
    PDP-11/83, Электроника МС0511 (УК-НЦ), DECserver 90M
    Q-Bus: H9278-A, DLV11-J, DZQ11, DHV11, DELQA-M, LPV11, CQD-420/TM, DRV11
    PMI: KDJ11-BF, MSV11-JE
    VT220, CM7209

  10. #9

    Регистрация
    30.08.2011
    Адрес
    Зеленоград
    Сообщений
    7,161
    Спасибо Благодарностей отдано 
    2,979
    Спасибо Благодарностей получено 
    373
    Поблагодарили
    310 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от form Посмотреть сообщение
    А мой любимый "сложный" вопрос - про фортран: CALL SUB(1) - объяснить что делает данный оператор
    Я попытку ответа сделаю основываясь на опыте ПАСКАЛЬ + МАКРО11 и сторонние obj библиотеки,
    такая команда вызывает глобальную процедуру (функцию) SUB и передаёт ей входящий параметр = 1.

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

    Цитата Сообщение от Eats Посмотреть сообщение
    Вот у Вас как код написан неряшливо
    в чём вы видите неряшливость кода? вы листинги Корчагина видели ? )))
    Архив программ для УК-НЦ, ДВК и БК.

    Ищу игру "СТРАНА МОНСТРОВ" [monstr.sav] для ДВК.

  11. #10

    Регистрация
    28.11.2016
    Адрес
    г. Санкт-Петербург
    Сообщений
    9
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от hobot Посмотреть сообщение
    Я попытку ответа сделаю основываясь на опыте ПАСКАЛЬ + МАКРО11 и сторонние obj библиотеки,
    такая команда вызывает глобальную процедуру (функцию) SUB и передаёт ей входящий параметр = 1.
    Я ж не просто так привёл анекдот про Холмса: строка CALL SUB(1) на самом деле не делает ничего. То есть вообще НИ-ЧЕ-ГО. Если кто-либо что-либо и делает, то:
    1. Процессор под управлением транслятора, генерируя объектный код.
    2. Процессор под управлением оттранслированной и скомпонованной программы, исполняя её код. Естественно, система команд этого кода должна совпадать с системой команд процессора. Ещё более естественно, что от строки исходного текста в исполняемом коде не остаётся ничего, даже если исходник был на языке ассемблера, не говоря уже о ЯВУ.

    Что же до фортрана, то в RT-11 (и её родителях) при передаче параметров он передаёт такой мощный блок этих параметров, что паскали и прочие ассемблеры нервно курят в сторонке. Начнём с того, что в разбираемом случае он передаёт подпрограмме две единицы. Кстати, именно из-за структуры этого блока длина имени подпрограммы фортрана ограничена 6-ю символами. И если мне не изменяет память (паскалеводы меня в случае чего поправят), то паскаль в RT11 требовал процессоров с плавающей арифметикой. Фортран же не только не требовал, но на процессоре 1801ВМ2 даже выполнял эти вычисления вчетверо быстрее паскаля. Правда, знающие люди сказали, что на оригинальном процессоре LSI-11 этих тормозов не было, но мой опыт работы ограничен только советскими ЧПУхами, а в них были только 1801ВМ1 да 1801ВМ2, да полная плата М2 от Электроники-60.
    в чём вы видите неряшливость кода?
    После ASCIZ ни разу нет выравнивания на границу слова. В первом разе это прокатило, поскольку получилась последовательность чётной длины. Во втором разе длина последовательности получилась нечётной, но поскольку это было в конце программы, то можно условно считать, что тоже прокатило. В любом случае транслятор поправил бы эту ошибку, от чего я и сказал не "ошибка", а именно "неряшливость". В 16-разрядной системе байтовая адресация - атавизм (вон, у 64-разрядного Крея и символьные, и целые, и плавающие, и комплексные данные имели разрядность 64 бита!), поэтому с ней надо быть поаккуратнее. Точно так же неряшливо товарищ задал и свой "сложный" вопрос, сложность которого заключается именно в неопределённости, расплывчатости, недосказанности его формулировки.
    Всего доброго.
    Евгений.

Страница 1 из 2 12 ПоследняяПоследняя

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

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

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

Похожие темы

  1. Арифметические процедуры на ассемблере
    от spensor в разделе Программирование
    Ответов: 27
    Последнее: 13.05.2017, 20:56
  2. Пишем на ассемблере под эмулятором
    от GM BIT в разделе Для начинающих
    Ответов: 76
    Последнее: 15.07.2016, 20:04
  3. try-catch на ассемблере z80
    от siril в разделе Программирование
    Ответов: 22
    Последнее: 30.10.2012, 21:17
  4. Продам книгу- AMIGA: программирование на ассемблере
    от Doctor Max в разделе Барахолка (архив)
    Ответов: 11
    Последнее: 01.03.2012, 00:35
  5. Подпрограмма на ассемблере в памяти?
    от jimled в разделе Программирование
    Ответов: 1
    Последнее: 29.11.2009, 06:46

Ваши права

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