Вопрос по машинным командам PDP-11 (need help)

Atari, Commodore, Apple и т.д.
Гость

Вопрос по машинным командам PDP-11

Сообщение Гость » 23.11.2017,20:16

need help

Привет!

Если кто разбирается, или, ещё лучше, обладает возможностью оперативно проверить, то прошу подсказать результат выполнения примера на ассемблере (машинных кодах) PDP-11.

Пример 1 (пока один, но, возможно, будут добавляться):
[font=Courier]
CMP #177777, R0
BHIS label
[/font]

Вопрос 1: верно ли, что при любом значении R0 здесь всегда будет происходить ветвление?
// я думаю, что всегда, т.к. 0xFFFF выше-или-равно любого беззнакового 16-разрядного числа
// что меня смущает? ну, если это так, то я нашёл багу -- что было бы, вообще, подозрительно странно
// да, мнемоника "BHIS" == "BCC", если что

Спасибо!

MM
Advanced Member
Сообщения: 5896
Зарегистрирован: 02.08.2013,22:13
Откуда: Павловский Посад Мск.обл.
Контактная информация:

Вклад в сообщество

Сообщение MM » 23.11.2017,20:34

Мурмулятор ДВК господина Патрона и DESS.SAV V5.00 из собрания господина Хобота в помощь.
Эксперементировать в адресе 000400 , переключаясь в пульт и обратно в DESS.

Почему именно Мурмулятор - а где Вы видели ДВК с QWERT клавой ?!
Коллекционирование радиодеталей : http://collectingrd.kxk.ru/

Аватара пользователя
alecv
Advanced Member
Сообщения: 6993
Зарегистрирован: 05.10.2004,11:13
Откуда: Санкт-Петербург
Контактная информация:

Вклад в сообщество

Сообщение alecv » 23.11.2017,22:27

xoiss Сравнение - это вычитание (Compares values by subtracting the destination from the source)

в SIMH
При R0=1 получается -1-1=-2 устанавливается флаг N
При R0=0 получается -1-0=-1 устанавливается флаг N
При R0=-1 получается -1-(-1)=0 устанавливается флаг Z
При R0=-2 получается -1-(-2)=1 никакие флаги не устанвливаются

_Patron_
Member
Сообщения: 174
Зарегистрирован: 19.12.2012,18:49
Откуда: Москва

Сообщение _Patron_ » 23.11.2017,23:08

xoiss писал(а):прошу подсказать результат выполнения примера на ассемблере (машинных кодах) PDP-11
Если заглянуть в описание команд PDP-11 - результат можно попробовать предсказать.

Гость

Сообщение Гость » 24.11.2017,00:06

alecv писал(а):xoiss Сравнение - это вычитание (Compares values by subtracting the destination from the source)
в SIMH
При R0=1 получается -1-1=-2 устанавливается флаг N
При R0=0 получается -1-0=-1 устанавливается флаг N
При R0=-1 получается -1-(-1)=0 устанавливается флаг Z
При R0=-2 получается -1-(-2)=1 никакие флаги не устанвливаются
в результате выполнения команды CMP все четыре арифметических флага получают какое-либо конкретное значение -- либо 0, либо 1
правильно ли я понимаю результаты выполненного Вами эксперимента, что флаг C во всех четырёх случаях был равен 0 ? (остался равен 0, либо стал равен 0)

собственно, похоже, та функция, из которой я взял этот участок кода, было просто дезактивирована программистами
изначально в ней было условие типа if (c < x) dosomething(), где c - была константа, x - типа unsigned long
... похоже, они заменили его заглушкой вроде if (UINT64_MAX < x) dosomething(), чтобы dosomething() никогда не вызывалось

// исходник был на ассемблере, конечно же, -- т.е. пример на Си - это лишь псевдокод

... и тем не менее очень странно, что это выключили
речь идёт о функции в составе секьюрной процедуры RSX-11M -- нормализация 64-битного числа по модулю (2^64)-59

Ок, спасибо!

Гость

Сообщение Гость » 24.11.2017,00:15

_Patron_ писал(а):xoiss написал:
прошу подсказать результат выполнения примера на ассемблере (машинных кодах) PDP-11
Если заглянуть в описание команд PDP-11 - результат можно попробовать предсказать.
Да, спасибо за ссылку. Описания у меня есть, причём с подробными примерами.
Кроме того, машкоды PDP-11 я выучил ещё в 1991-1992 г.г.
... просто давно не практиковался именно с этим ассемблером, а тут вдруг возникла экстранеобходимость.
Осваивать SimH, командную строку и тулчейны в RSX-11M уж очень не хочется, т.к. задача однократная.
... а какого-либо ДВК или УК-НЦ под рукой нет, чтоб проверить -- вот и спросил, если у кого натуральная машинка есть, то из-под монитора это проверить 2-3 минуты.

Собсна, по описаниям то я вопросов не имею -- в них русско-английским по белому всё ясно написано
... мой вопрос был - так, на всякий случай, вдруг я что-то концептуально упустил.

Впрочем, пока суть да дело, выяснилось, что 99.9% там код сознательно исказили, чтоб бага была...
... но зачем - пока не понятно.

Гость

Сообщение Гость » 24.11.2017,00:21

MM писал(а):Мурмулятор ДВК господина Патрона и DESS.SAV V5.00 из собрания господина Хобота в помощь.
Эксперементировать в адресе 000400 , переключаясь в пульт и обратно в DESS.
Почему именно Мурмулятор - а где Вы видели ДВК с QWERT клавой ?!
спасибо! :)

Аватара пользователя
alecv
Advanced Member
Сообщения: 6993
Зарегистрирован: 05.10.2004,11:13
Откуда: Санкт-Петербург
Контактная информация:

Вклад в сообщество

Сообщение alecv » 24.11.2017,08:58

xoiss писал(а):в результате выполнения команды CMP все четыре арифметических флага получают какое-либо конкретное значение — либо 0, либо 1
правильно ли я понимаю результаты выполненного Вами эксперимента, что флаг C во всех четырёх случаях был равен 0 ? (остался равен 0, либо стал равен 0)
Да, правильно. Если флаг не упомянут - он устанавливается в ноль. Команда CMP устанавливает все флаги в соответствии с результатом операцией, т.е. все флаги "новые".

Не факт что SIMH прямо так уж на 100% корректен, но считается эталонным эмулятором PDP-11 (и проходит все перфоленточные тесты).

Mixa
Member
Сообщения: 183
Зарегистрирован: 07.08.2009,23:44
Откуда: Москва

Сообщение Mixa » 24.11.2017,16:02

BHIS после сравнения с 177777 смысла не имеет, нафига такой пример?

Гость

Сообщение Гость » 24.11.2017,17:41

Mixa писал(а):BHIS после сравнения с 177777 смысла не имеет, нафига такой пример?
прочитайте чуть выше в моих комментах

Mixa
Member
Сообщения: 183
Зарегистрирован: 07.08.2009,23:44
Откуда: Москва

Сообщение Mixa » 25.11.2017,10:52

А погрепайте исходники целиком, там должны быть еще места со странным условием перехода после CMP #177777, Rn или CMP Rn, #177777

Ответить