Программистские задачки и хитрости

Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Программистские задачки и хитрости

Сообщение Serg »

Professor Lampochkin писал(а):Шина совместима с Электроника-60, как я понял, ближайший доступный "родственник" НЦ-31 -компьютеры БК :)
Только в НЦ (в отличии от БК) в 2 раза больше регистров из которых 2 регистра сегментные (РБД1, РБД2), и соответственно, чуть другая система команд.
Наконец-то понял, причем тут восьмеричная система- легко в уме переводить в двоичную и "собирать" команды по таблицам !!!
БК - это дальний младший родственник семейства PDP-11, Электроника-60 - клон PDP-11/06).
И система счисления восьмеричная именно по тому, что поля команд занимали по 3 бита. Студентам предлагал получить зачёт сразу за семестр за написание программы, которая чистит всю память, программа должна состоять из одной ассемблерной инструкции. :)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Professor Lampochkin
Кандидат
Сообщения: 55
Зарегистрирован: 17 июл 2018, 00:11
Репутация: 0
Настоящее имя: Лампочкин
Контактная информация:

Re: NC-31 ищу компаньона (программирование и электроника)

Сообщение Professor Lampochkin »

T00T писал(а):Делал на AtMega, но проще наверное уже на плисине. Хотя проект можно доделать.
На AtMega доступнее, а с учётом готовности на 90% грех не доделать ! :)
UAVpilot писал(а):Студентам предлагал получить зачёт сразу за семестр за написание программы, которая чистит всю память, программа должна состоять из одной ассемблерной инструкции.
Что-то вроде movsb ? Признавайтесь ! :)
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: NC-31 ищу компаньона (программирование и электроника)

Сообщение Serg »

Professor Lampochkin писал(а):Что-то вроде movsb ? Признавайтесь ! :)
Нет. :)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Professor Lampochkin
Кандидат
Сообщения: 55
Зарегистрирован: 17 июл 2018, 00:11
Репутация: 0
Настоящее имя: Лампочкин
Контактная информация:

Re: NC-31 ищу компаньона (программирование и электроника)

Сообщение Professor Lampochkin »

UAVpilot писал(а):Нет.
Тогда, наверное, команда перехода на стандартную подпрограмму очистки памяти, расположенную в ПЗУ ? :)
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: NC-31 ищу компаньона (программирование и электроника)

Сообщение Serg »

Professor Lampochkin писал(а):Тогда, наверное, команда перехода на стандартную подпрограмму очистки памяти, расположенную в ПЗУ ? :)
Тоже нет. :) Никакие подпрограммы не используются. Для работы нужны только процессор и очищаемая память.
Эта программа даже сама себя модифицирует, чтобы правильно выполнить задачу. :)

P.S. Из пяти курсов (по ~60 чел) такой зачёт получили только 6 человек... :)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Professor Lampochkin
Кандидат
Сообщения: 55
Зарегистрирован: 17 июл 2018, 00:11
Репутация: 0
Настоящее имя: Лампочкин
Контактная информация:

Re: NC-31 ищу компаньона (программирование и электроника)

Сообщение Professor Lampochkin »

UAVpilot писал(а):Из пяти курсов (по ~60 чел) такой зачёт получили только 6 человек...
Ого..
Пойду достану БКшку и почитаю мануалы...
P.S.В кодах для БК писать пока что не приходилось :)
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: NC-31 ищу компаньона (программирование и электроника)

Сообщение Serg »

merkwurdigliebe писал(а):mov -(pc),-(pc) ?
Нет, эта просто ничего не сделает. :)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
merkwurdigliebe
Мастер
Сообщения: 606
Зарегистрирован: 17 дек 2013, 22:14
Репутация: 579
Откуда: București
Контактная информация:

Re: NC-31 ищу компаньона (программирование и электроника)

Сообщение merkwurdigliebe »

да ну ладно ;) не поленился, скачал эмулятор ДВК:
dvk.png
dvk.png (4.5 КБ) 8205 просмотров
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: NC-31 ищу компаньона (программирование и электроника)

Сообщение Serg »

Не очень понял скриншот. Насколько помню (более 30 лет всё таки прошло) эта команда саму себя запишет в ячейку, в которой она и находится, этим всё и закончится.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
merkwurdigliebe
Мастер
Сообщения: 606
Зарегистрирован: 17 дек 2013, 22:14
Репутация: 579
Откуда: București
Контактная информация:

Re: NC-31 ищу компаньона (программирование и электроника)

Сообщение merkwurdigliebe »

ага, давно это было :)

скриншот:
смотрим адрес 100000 (/), записываем туда опкод mov -(r7),-(r7) - 014747
смотрим память выше с адреса 77770 - что-то там есть
запускаем с адреса 100000 (G) - оно виснет, прерываем кнопкой HALT эмулятора
снова смотрим память с адреса 77770 - теперь она заполнена опкодом этой команды

при выполнении команды PC указывает на следующее слово. первый аргумент -(PC) уменьшает PC на 2 и считывает содержимое по этому адресу, т.е. опкод самой команды. второй аргумент опять уменьшает - на предыдущее слово и записывает туда опкод. и выполнение продолжается с этой предыдущей ячейки. и так задним ходом до нулевого адреса, потом переполнение, прерывание при попытке записи в 177776, не помню по какому вектору, адрес обработчика - 014747, снова прерывание по нечетному адресу, и по кругу... наверное как-то так :)
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: NC-31 ищу компаньона (программирование и электроника)

Сообщение Serg »

А мне помнилось, что -(PC) не меняет сам PC... Ну не суть.
Как-то так, но нужно нулями. :)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
merkwurdigliebe
Мастер
Сообщения: 606
Зарегистрирован: 17 дек 2013, 22:14
Репутация: 579
Откуда: București
Контактная информация:

Re: NC-31 ищу компаньона (программирование и электроника)

Сообщение merkwurdigliebe »

ну я сдаюсь. с интересом жду разгадки. но, по-моему, что-то тут нечисто ;)
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: NC-31 ищу компаньона (программирование и электроника)

Сообщение Serg »

Всё очень просто: JSR -(PC) или 004747 в кодах в первой ячейке памяти (адрес 000000) - вызов самое себя как подпрограмму, адрес возврата, т.е. 000000 записывается в стек, который по дефолту начинается с конца памяти. В конце концов стек заполнит всю память и по нулевому адресу запишется 000000, что процессор на очередном такте воспримет как HALT... :)

Можно попробовать вспомнить ещё задачек, даже безотносительно конкретных процессоров... Если интересно, то в отдельную тему, и это туда перенести можно.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
merkwurdigliebe
Мастер
Сообщения: 606
Зарегистрирован: 17 дек 2013, 22:14
Репутация: 579
Откуда: București
Контактная информация:

Re: NC-31 ищу компаньона (программирование и электроника)

Сообщение merkwurdigliebe »

видимо jsr pc,-(pc). ага, прикольно.
только юзерский стек в rt-11 по дефолту начинался c адреса 1000, перед пользовательской программой. и чет я не уверен, что даже после аппаратного сброса процессора SP устанавливался на конец памяти. откуда процессор может знать где она заканчивается? и если в эмуляторе двк при загруженной rt-11 нажать холт - SP=121422. что совсем не конец.
так что не совсем чисто, сорри ;)
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: NC-31 ищу компаньона (программирование и электроника)

Сообщение Serg »

Это безотносительно ОС, курс по архитектуре PDP-11 (СМ ЭВМ).
Да и курс по ОС был не по RT-11, а по RSX-11M.

После сброса SP=0157777 (дальше регистры периферии), PC=0. А для пользовательских задач в RT-11 так, как указано в параметрах сборки "ядра", по дефолту там действительно было 01000.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Professor Lampochkin
Кандидат
Сообщения: 55
Зарегистрирован: 17 июл 2018, 00:11
Репутация: 0
Настоящее имя: Лампочкин
Контактная информация:

Re: NC-31 ищу компаньона (программирование и электроника)

Сообщение Professor Lampochkin »

UAVpilot писал(а):Всё очень просто: JSR -(PC) или 004747 в кодах в первой ячейке памяти (адрес 000000) - вызов самое себя как подпрограмму, адрес возврата, т.е. 000000 записывается в стек, который по дефолту начинается с конца памяти. В конце концов стек заполнит всю память и по нулевому адресу запишется 000000, что процессор на очередном такте воспримет как HALT...
Гениально ! :)
Эх,жаль зачёт не получил... :)
UAVpilot писал(а):Можно попробовать вспомнить ещё задачек, даже безотносительно конкретных процессоров... Если интересно, то в отдельную тему, и это туда перенести можно.
Создал тему http://www.cnc-club.ru/forum/viewtopic.php?f=38&t=26121
Ждём там обещанные задачи :)
Professor Lampochkin
Кандидат
Сообщения: 55
Зарегистрирован: 17 июл 2018, 00:11
Репутация: 0
Настоящее имя: Лампочкин
Контактная информация:

PDP-11 и другие. Программирование.

Сообщение Professor Lampochkin »

UAVpilot писал(а):Можно попробовать вспомнить ещё задачек, даже безотносительно конкретных процессоров... Если интересно, то в отдельную тему, и это туда перенести можно.
http://www.cnc-club.ru/forum/viewtopic. ... 53#p538153

Хотим еще задачек ! :)
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Программистские задачки и хитрости

Сообщение Serg »

Перенёс посты в эту тему из-за чего стал ТС. :oops:
Если что, попрошу Nick'а как-нибудь вернуть авторство, сам не могу. Ну чтобы усугубить поменял и название темы. :) Предлагайте лучшие варианты.

Ну и вот вам ещё простенькая задачка пока чего поинтересней не вспомнил:

Есть некий абстрактный процессор с простым набором команд. Есть два регистра, содержащие некие значения. Нужно поменять местами их значения затратив на это не более 3 инструкций/команд. Никакие другие регистры, аккумуляторы, память и т.п. не доступны. Команды обмена значениями регистров нет.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
calabr
Мастер
Сообщения: 937
Зарегистрирован: 04 янв 2019, 15:19
Репутация: 146
Настоящее имя: Calabr
Откуда: Киев
Контактная информация:

Re: Программистские задачки и хитрости

Сообщение calabr »

UAVpilot писал(а):Есть некий абстрактный процессор с простым набором команд. Есть два регистра, содержащие некие значения. Нужно поменять местами их значения затратив на это не более 3 инструкций/команд. Никакие другие регистры, аккумуляторы, память и т.п. не доступны. Команды обмена значениями регистров нет.
2 регистра rX и rY
1) rX = rX XOR rY
2) rY = rX XOR rY
3) rX = rX XOR rY
Ответить

Вернуться в «Оффтоп»