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

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

Сообщение UAVpilot » 15 ноя 2019, 23:24

Professor Lampochkin писал(а):Шина совместима с Электроника-60, как я понял, ближайший доступный "родственник" НЦ-31 -компьютеры БК :)
Только в НЦ (в отличии от БК) в 2 раза больше регистров из которых 2 регистра сегментные (РБД1, РБД2), и соответственно, чуть другая система команд.
Наконец-то понял, причем тут восьмеричная система- легко в уме переводить в двоичную и "собирать" команды по таблицам !!!

БК - это дальний младший родственник семейства PDP-11, Электроника-60 - клон PDP-11/06).
И система счисления восьмеричная именно по тому, что поля команд занимали по 3 бита. Студентам предлагал получить зачёт сразу за семестр за написание программы, которая чистит всю память, программа должна состоять из одной ассемблерной инструкции. :)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
UAVpilot
Мастер
 
Сообщения: 20305
Зарегистрирован: 17 апр 2012, 14:58
Откуда: Москва
Репутация: 4856
Заслуга: c781c134843e0c1a3de9
Медальки:
Настоящее имя: Сергей

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

Сообщение Professor Lampochkin » 16 ноя 2019, 15:38

T00T писал(а):Делал на AtMega, но проще наверное уже на плисине. Хотя проект можно доделать.

На AtMega доступнее, а с учётом готовности на 90% грех не доделать ! :)

UAVpilot писал(а):Студентам предлагал получить зачёт сразу за семестр за написание программы, которая чистит всю память, программа должна состоять из одной ассемблерной инструкции.

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

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

Сообщение UAVpilot » 16 ноя 2019, 23:00

Professor Lampochkin писал(а):Что-то вроде movsb ? Признавайтесь ! :)

Нет. :)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
UAVpilot
Мастер
 
Сообщения: 20305
Зарегистрирован: 17 апр 2012, 14:58
Откуда: Москва
Репутация: 4856
Заслуга: c781c134843e0c1a3de9
Медальки:
Настоящее имя: Сергей

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

Сообщение Professor Lampochkin » 17 ноя 2019, 12:43

UAVpilot писал(а):Нет.


Тогда, наверное, команда перехода на стандартную подпрограмму очистки памяти, расположенную в ПЗУ ? :)
Professor Lampochkin
Кандидат
 
Сообщения: 48
Зарегистрирован: 17 июл 2018, 00:11
Репутация: 0
Настоящее имя: Лампочкин

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

Сообщение UAVpilot » 17 ноя 2019, 18:39

Professor Lampochkin писал(а):Тогда, наверное, команда перехода на стандартную подпрограмму очистки памяти, расположенную в ПЗУ ? :)

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

P.S. Из пяти курсов (по ~60 чел) такой зачёт получили только 6 человек... :)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
UAVpilot
Мастер
 
Сообщения: 20305
Зарегистрирован: 17 апр 2012, 14:58
Откуда: Москва
Репутация: 4856
Заслуга: c781c134843e0c1a3de9
Медальки:
Настоящее имя: Сергей

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

Сообщение Professor Lampochkin » 17 ноя 2019, 22:54

UAVpilot писал(а):Из пяти курсов (по ~60 чел) такой зачёт получили только 6 человек...


Ого..
Пойду достану БКшку и почитаю мануалы...
P.S.В кодах для БК писать пока что не приходилось :)
Professor Lampochkin
Кандидат
 
Сообщения: 48
Зарегистрирован: 17 июл 2018, 00:11
Репутация: 0
Настоящее имя: Лампочкин

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

Сообщение merkwurdigliebe » 17 ноя 2019, 23:55

mov -(pc),-(pc) ?
merkwurdigliebe
Мастер
 
Сообщения: 413
Зарегистрирован: 17 дек 2013, 22:14
Откуда: Москва
Репутация: 396
Медальки:

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

Сообщение UAVpilot » 18 ноя 2019, 00:01

merkwurdigliebe писал(а):mov -(pc),-(pc) ?

Нет, эта просто ничего не сделает. :)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
UAVpilot
Мастер
 
Сообщения: 20305
Зарегистрирован: 17 апр 2012, 14:58
Откуда: Москва
Репутация: 4856
Заслуга: c781c134843e0c1a3de9
Медальки:
Настоящее имя: Сергей

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

Сообщение merkwurdigliebe » 18 ноя 2019, 01:59

да ну ладно ;) не поленился, скачал эмулятор ДВК:
dvk.png
dvk.png (4.5 Кб) Просмотров: 3253
merkwurdigliebe
Мастер
 
Сообщения: 413
Зарегистрирован: 17 дек 2013, 22:14
Откуда: Москва
Репутация: 396
Медальки:

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

Сообщение UAVpilot » 18 ноя 2019, 02:42

Не очень понял скриншот. Насколько помню (более 30 лет всё таки прошло) эта команда саму себя запишет в ячейку, в которой она и находится, этим всё и закончится.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
UAVpilot
Мастер
 
Сообщения: 20305
Зарегистрирован: 17 апр 2012, 14:58
Откуда: Москва
Репутация: 4856
Заслуга: c781c134843e0c1a3de9
Медальки:
Настоящее имя: Сергей

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

Сообщение merkwurdigliebe » 18 ноя 2019, 03:11

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

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

при выполнении команды PC указывает на следующее слово. первый аргумент -(PC) уменьшает PC на 2 и считывает содержимое по этому адресу, т.е. опкод самой команды. второй аргумент опять уменьшает - на предыдущее слово и записывает туда опкод. и выполнение продолжается с этой предыдущей ячейки. и так задним ходом до нулевого адреса, потом переполнение, прерывание при попытке записи в 177776, не помню по какому вектору, адрес обработчика - 014747, снова прерывание по нечетному адресу, и по кругу... наверное как-то так :)
merkwurdigliebe
Мастер
 
Сообщения: 413
Зарегистрирован: 17 дек 2013, 22:14
Откуда: Москва
Репутация: 396
Медальки:

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

Сообщение UAVpilot » 18 ноя 2019, 04:27

А мне помнилось, что -(PC) не меняет сам PC... Ну не суть.
Как-то так, но нужно нулями. :)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
UAVpilot
Мастер
 
Сообщения: 20305
Зарегистрирован: 17 апр 2012, 14:58
Откуда: Москва
Репутация: 4856
Заслуга: c781c134843e0c1a3de9
Медальки:
Настоящее имя: Сергей

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

Сообщение merkwurdigliebe » 19 ноя 2019, 18:43

ну я сдаюсь. с интересом жду разгадки. но, по-моему, что-то тут нечисто ;)
merkwurdigliebe
Мастер
 
Сообщения: 413
Зарегистрирован: 17 дек 2013, 22:14
Откуда: Москва
Репутация: 396
Медальки:

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

Сообщение UAVpilot » 19 ноя 2019, 23:22

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

Можно попробовать вспомнить ещё задачек, даже безотносительно конкретных процессоров... Если интересно, то в отдельную тему, и это туда перенести можно.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
UAVpilot
Мастер
 
Сообщения: 20305
Зарегистрирован: 17 апр 2012, 14:58
Откуда: Москва
Репутация: 4856
Заслуга: c781c134843e0c1a3de9
Медальки:
Настоящее имя: Сергей

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

Сообщение merkwurdigliebe » 20 ноя 2019, 00:58

видимо jsr pc,-(pc). ага, прикольно.
только юзерский стек в rt-11 по дефолту начинался c адреса 1000, перед пользовательской программой. и чет я не уверен, что даже после аппаратного сброса процессора SP устанавливался на конец памяти. откуда процессор может знать где она заканчивается? и если в эмуляторе двк при загруженной rt-11 нажать холт - SP=121422. что совсем не конец.
так что не совсем чисто, сорри ;)
merkwurdigliebe
Мастер
 
Сообщения: 413
Зарегистрирован: 17 дек 2013, 22:14
Откуда: Москва
Репутация: 396
Медальки:

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

Сообщение UAVpilot » 20 ноя 2019, 14:36

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

После сброса SP=0157777 (дальше регистры периферии), PC=0. А для пользовательских задач в RT-11 так, как указано в параметрах сборки "ядра", по дефолту там действительно было 01000.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
UAVpilot
Мастер
 
Сообщения: 20305
Зарегистрирован: 17 апр 2012, 14:58
Откуда: Москва
Репутация: 4856
Заслуга: c781c134843e0c1a3de9
Медальки:
Настоящее имя: Сергей

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

Сообщение Professor Lampochkin » 20 ноя 2019, 18:40

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


Гениально ! :)
Эх,жаль зачёт не получил... :)

UAVpilot писал(а):Можно попробовать вспомнить ещё задачек, даже безотносительно конкретных процессоров... Если интересно, то в отдельную тему, и это туда перенести можно.

Создал тему http://www.cnc-club.ru/forum/viewtopic.php?f=38&t=26121
Ждём там обещанные задачи :)
Professor Lampochkin
Кандидат
 
Сообщения: 48
Зарегистрирован: 17 июл 2018, 00:11
Репутация: 0
Настоящее имя: Лампочкин

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

Сообщение Professor Lampochkin » 20 ноя 2019, 19:10

UAVpilot писал(а):Можно попробовать вспомнить ещё задачек, даже безотносительно конкретных процессоров... Если интересно, то в отдельную тему, и это туда перенести можно.

http://www.cnc-club.ru/forum/viewtopic.php?f=41&t=1469&p=538153#p538153

Хотим еще задачек ! :)
Professor Lampochkin
Кандидат
 
Сообщения: 48
Зарегистрирован: 17 июл 2018, 00:11
Репутация: 0
Настоящее имя: Лампочкин

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

Сообщение UAVpilot » 20 ноя 2019, 21:50

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

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

Есть некий абстрактный процессор с простым набором команд. Есть два регистра, содержащие некие значения. Нужно поменять местами их значения затратив на это не более 3 инструкций/команд. Никакие другие регистры, аккумуляторы, память и т.п. не доступны. Команды обмена значениями регистров нет.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
UAVpilot
Мастер
 
Сообщения: 20305
Зарегистрирован: 17 апр 2012, 14:58
Откуда: Москва
Репутация: 4856
Заслуга: c781c134843e0c1a3de9
Медальки:
Настоящее имя: Сергей

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

Сообщение calabr » 21 ноя 2019, 00:56

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


2 регистра rX и rY
1) rX = rX XOR rY
2) rY = rX XOR rY
3) rX = rX XOR rY
Я хоть и злодей конечно, но нужно быть вежливым злодеем!
Аватара пользователя
calabr
Мастер
 
Сообщения: 296
Зарегистрирован: 04 янв 2019, 15:19
Откуда: Киев
Репутация: 40
Настоящее имя: Calabr

След.

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

Кто сейчас на конференции

Зарегистрированные пользователи: _vit, alexrubdoc, ART_ME, Андрей Г., Bing [Bot], Google [Bot], ivlav, kms, liskispb, LorenLaz, Mikhgen, Okser, pegas13, R6MF49T2, UAVpilot, xvovanx, Yandex [bot], шпиндель

Reputation System ©'