User Tag List

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

Тема: Программирование на УКНЦ как?

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

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

    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,807
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    149
    Поблагодарили
    80 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от form Посмотреть сообщение
    На этапе компиляции вычислить реальный адрес однако ну никак не получится если заранее неизвестен способ загрузки.
    Если автор программы хочет передавать в коде реальные адреса - его программа не может быть перемещаемой. Если же автор хочет передавать, например, смещения от начала программной секции сообщений - проблем с перемещаемостью не возникнет.

    Но по сути дела - нет принципиальной разницы между вызовом с передачей аргумента в коде или в регистре. И в том, и в другом случае правила одни и те же.

    Речь немного о другом - когда в программе используется передача аргументов в коде - это практически всегда означает их вычисление на этапе компиляции/компоновки. Иначе такой способ не имеет преимуществ.

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

  3. #2

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

    По умолчанию

    Цитата Сообщение от Patron Посмотреть сообщение
    Если автор программы хочет передавать в коде реальные адреса - его программа не может быть перемещаемой.
    Ась?
    То есть то, что такие проги есть и работают - пофигу. Их все-равно нет потому что не может быть?

    Цитата Сообщение от Patron Посмотреть сообщение
    Если же автор хочет передавать, например, смещения от начала программной секции сообщений - проблем с перемещаемостью не возникнет.
    MOV #LABEL,Rx ;ПРОБЛЕМА

    А писать программы когда нужно в аргументах передавать LABEL-START оправдано далеко не всегда. В частности для загрузки всяких драйверов в ПП совершенно неоправданно ибо лекго без всякой позиционнонезависимости все делается [/QUOTE]

    Цитата Сообщение от Patron Посмотреть сообщение
    Но по сути дела - нет принципиальной разницы между вызовом с передачей аргумента в коде или в регистре. И в том, и в другом случае правила одни и те же.
    Когда ты сам пишешь то, что вызываешь, ты можешь делать что хочешь. А если речь идет о EMT, надо полагать, что вызывается не твой обработчик EMT и передаешь ты ему то, что он просит, а не то, что тебе удобнее. И тут на этапе компиляции ничего вычислить не удастся если только это не частный случай - загрузка REL к примеру.

    Цитата Сообщение от Patron Посмотреть сообщение
    Речь немного о другом - когда в программе используется передача аргументов в коде - это практически всегда означает их вычисление на этапе компиляции/компоновки. Иначе такой способ не имеет преимуществ.
    Да, но при этом или программа грузитя/мапится всегда в одно место или реализован механизм перемещения (REL) либо ты сам пишешь так, чтобы оно не зависило от местоположения и в этом случае ты так или иначе довычисляешь адреса на ходу если нужно именно адрес знать (например строки).


    Для упрощения - приведите пример .PRINT когда все вычислено на этапе компиляции и работает при любом положении
    Последний раз редактировалось form; 01.12.2011 в 14:35.
    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

    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,807
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    149
    Поблагодарили
    80 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от form Посмотреть сообщение
    Да, но при этом или программа грузитя/мапится всегда в одно место или реализован механизм перемещения (REL) либо ты сам пишешь так, чтобы оно не зависило от местоположения и в этом случае ты так или иначе довычисляешь адреса на ходу если нужно именно адрес знать (например строки).
    Именно так.

  5. #4

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

    По умолчанию

    Цитата Сообщение от Patron Посмотреть сообщение
    Именно так.
    Так это я оговорил первой строчкой и все остальное относилось к случаю когда это не так
    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

    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,807
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    149
    Поблагодарили
    80 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от form Посмотреть сообщение
    Так это я оговорил первой строчкой и все остальное относилось к случаю когда это не так
    Если кого-то ( например - нас ) интересует, чем передача аргументов в коде отличается от передачи аргументов в регистре или в стеке, то единственное отличие - в размере кода.

    Когда аргументы могут быть вычислены на этапе компиляции/компоновки - их передача в коде позволяет экономить по одному слову на каждый случай передачи аргумента (для подпрограммы с 5-ю аргументами такого типа - при каждом вызове будет экономиться по 5 слов).

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

  7. #6

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

    По умолчанию

    Цитата Сообщение от Patron Посмотреть сообщение
    Если же аргументы должны вычисляться на этапе выполнения - их передача в коде не будет иметь никаких преимуществ и чаще всего будет занимать больше места, чем передача тех же аргументов в регистре или стеке.
    Ну так понятно, что вычислять адрес на этапе выполнения нужно только тогда когда это оправдано - в драйвере устройства например. Хотя начиная с 5.2 и без этого можно обойтись

    А способ передачи - это уже от фантазии зависит.
    В RSX к примеру есть два варианта вызова одних и тех же директив - либо все аргументы в стеке либо адрес этих самых аргументов в стеке - пользуй по обстоятельствам
    А с програмерской точки зрения есть еще третий вариант - второй случай, но список аргументов пишешь как в первом (кладется в psect)

    Я тут упоминал про РАФОС и RSXизм тех кто его делал - так вот там для всех макрокоманд с AREA также сделано - можно заготавливать блоки AREA, можно пихать их в PSECT
    Последний раз редактировалось form; 01.12.2011 в 15:21.
    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

    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,807
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    149
    Поблагодарили
    80 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от form Посмотреть сообщение
    Я тут упоминал про РАФОС и RSXизм тех кто его делал - так вот там для всех макрокоманд с AREA также сделано - можно заготавливать блоки AREA, можно пихать их в PSECT
    Но сделано довольно криво - не у всех аргументов отбрасываются '#', что приводит к помещению в текст программы описаний, несовместимых со стандартом MACRO-11, при том, что точно такие же вызовы обычного формата проходят без проблем.

    Например:
    Код:
    	000000	AREA:	.Read	BLOCK, #0, #BUF, #256., #0
    
    A	000000		.BYTE	#0,8.
    	000002		.WORD	0
    A	000004		.WORD	#BUF
    A	000006		.WORD	#256.
    A	000010		.WORD	#1
    
    	000012		.Read	#AREA, #0, #BUF, #256., #0
    
    	000012		MOV	#AREA,%0
    	000016		MOV	#0+<8.*^O400>,(0)
    	000022		CLR	2.(0)
    	000026		MOV	#BUF,4.(0)
    	000034		MOV	#256.,6.(0)
    	000042		MOV	#1,8.(0)
    	000050		EMT	^O375
    Можно заметить, что в первом вызове, при формировании блока аргументов - у последнего параметра ( счётчик слов #0 ) решётка была-таки отброшена.

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

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

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

Похожие темы

  1. Программирование на Эмуляторе. Возможно ли это?
    от Toxic в разделе Программирование
    Ответов: 10
    Последнее: 20.01.2008, 19:20
  2. Программирование Altera и JTAG
    от Mikka_A в разделе Несортированное железо
    Ответов: 7
    Последнее: 18.01.2008, 09:07
  3. Программирование и софтмейк на NES
    от Splinter в разделе Nintendo
    Ответов: 7
    Последнее: 30.06.2006, 04:31

Ваши права

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