Вопрос по машинным командам PDP-11 (need help)
Вопрос по машинным командам PDP-11
need help
Привет!
Если кто разбирается, или, ещё лучше, обладает возможностью оперативно проверить, то прошу подсказать результат выполнения примера на ассемблере (машинных кодах) PDP-11.
Пример 1 (пока один, но, возможно, будут добавляться):
[font=Courier]
CMP #177777, R0
BHIS label
[/font]
Вопрос 1: верно ли, что при любом значении R0 здесь всегда будет происходить ветвление?
// я думаю, что всегда, т.к. 0xFFFF выше-или-равно любого беззнакового 16-разрядного числа
// что меня смущает? ну, если это так, то я нашёл багу -- что было бы, вообще, подозрительно странно
// да, мнемоника "BHIS" == "BCC", если что
Спасибо!
Привет!
Если кто разбирается, или, ещё лучше, обладает возможностью оперативно проверить, то прошу подсказать результат выполнения примера на ассемблере (машинных кодах) PDP-11.
Пример 1 (пока один, но, возможно, будут добавляться):
[font=Courier]
CMP #177777, R0
BHIS label
[/font]
Вопрос 1: верно ли, что при любом значении R0 здесь всегда будет происходить ветвление?
// я думаю, что всегда, т.к. 0xFFFF выше-или-равно любого беззнакового 16-разрядного числа
// что меня смущает? ну, если это так, то я нашёл багу -- что было бы, вообще, подозрительно странно
// да, мнемоника "BHIS" == "BCC", если что
Спасибо!
- alecv
- Advanced Member
- Сообщения: 6993
- Зарегистрирован: 05.10.2004,11:13
- Откуда: Санкт-Петербург
- Контактная информация:
-
Вклад в сообщество
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 никакие флаги не устанвливаются
в SIMH
При R0=1 получается -1-1=-2 устанавливается флаг N
При R0=0 получается -1-0=-1 устанавливается флаг N
При R0=-1 получается -1-(-1)=0 устанавливается флаг Z
При R0=-2 получается -1-(-2)=1 никакие флаги не устанвливаются
Если заглянуть в описание команд PDP-11 - результат можно попробовать предсказать.xoiss писал(а):прошу подсказать результат выполнения примера на ассемблере (машинных кодах) PDP-11
в результате выполнения команды CMP все четыре арифметических флага получают какое-либо конкретное значение -- либо 0, либо 1alecv писал(а):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 никакие флаги не устанвливаются
правильно ли я понимаю результаты выполненного Вами эксперимента, что флаг C во всех четырёх случаях был равен 0 ? (остался равен 0, либо стал равен 0)
собственно, похоже, та функция, из которой я взял этот участок кода, было просто дезактивирована программистами
изначально в ней было условие типа if (c < x) dosomething(), где c - была константа, x - типа unsigned long
... похоже, они заменили его заглушкой вроде if (UINT64_MAX < x) dosomething(), чтобы dosomething() никогда не вызывалось
// исходник был на ассемблере, конечно же, -- т.е. пример на Си - это лишь псевдокод
... и тем не менее очень странно, что это выключили
речь идёт о функции в составе секьюрной процедуры RSX-11M -- нормализация 64-битного числа по модулю (2^64)-59
Ок, спасибо!
Да, спасибо за ссылку. Описания у меня есть, причём с подробными примерами._Patron_ писал(а):xoiss написал:Если заглянуть в описание команд PDP-11 - результат можно попробовать предсказать.прошу подсказать результат выполнения примера на ассемблере (машинных кодах) PDP-11
Кроме того, машкоды PDP-11 я выучил ещё в 1991-1992 г.г.
... просто давно не практиковался именно с этим ассемблером, а тут вдруг возникла экстранеобходимость.
Осваивать SimH, командную строку и тулчейны в RSX-11M уж очень не хочется, т.к. задача однократная.
... а какого-либо ДВК или УК-НЦ под рукой нет, чтоб проверить -- вот и спросил, если у кого натуральная машинка есть, то из-под монитора это проверить 2-3 минуты.
Собсна, по описаниям то я вопросов не имею -- в них русско-английским по белому всё ясно написано
... мой вопрос был - так, на всякий случай, вдруг я что-то концептуально упустил.
Впрочем, пока суть да дело, выяснилось, что 99.9% там код сознательно исказили, чтоб бага была...
... но зачем - пока не понятно.
- alecv
- Advanced Member
- Сообщения: 6993
- Зарегистрирован: 05.10.2004,11:13
- Откуда: Санкт-Петербург
- Контактная информация:
-
Вклад в сообщество
Да, правильно. Если флаг не упомянут - он устанавливается в ноль. Команда CMP устанавливает все флаги в соответствии с результатом операцией, т.е. все флаги "новые".xoiss писал(а):в результате выполнения команды CMP все четыре арифметических флага получают какое-либо конкретное значение — либо 0, либо 1
правильно ли я понимаю результаты выполненного Вами эксперимента, что флаг C во всех четырёх случаях был равен 0 ? (остался равен 0, либо стал равен 0)
Не факт что SIMH прямо так уж на 100% корректен, но считается эталонным эмулятором PDP-11 (и проходит все перфоленточные тесты).