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
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Вот такая маленькая фича на заметку. Привычная конструкция разборок с битом C:А это вариант конструкции при которой (например из-за нехватки регистров) на вершине стека делаются некие вычисления которые в случае успеха применяются, а в случае ошибки нужно извлекать перед выходом:Код:TST (PC)+ ;ОЧИСТКА C 100$: SEC ;УСТАНОВКА C RETURN ;ВЫХОДКод:ADD (SP)+,VAR ;ПРИМЕНЕНИЕ РЕЗУЛЬТАТА TST (PC)+ ;ОЧИСТКА C 100$: COM (SP)+ ;УСТАНОВКА C RETURN
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
Там нечего особенно понимать. (РС)+ это 27-я адресация, в общем случае автоинкрементная, но для счётчика команд имеющая особое название непосредственная. При ней проц тестирует (то есть устанавливает флаги N и Z, а V и С всегда сбрасывает) слово непосредственно за командой, увеличивая заданный регистр - в данном случае счётчик команд. Программистская фишка здесь в том, что тестируемое слово является операндом для операции по адресу .=100$-2 (там лежит TST #261, которая всегда сбрасывает С), но операцией по адресу .=100$, которая всегда устанавливает С. Точно так же, кстати, она могла бы устанавливать и V, если бы там было SEV. И точно так же она могла бы устанавливать Z, если бы там было SEZ. И 4-й раз точно так же она могла бы устанавливать N, если бы там было SEN. Но в RT11 принято передавать флаг ошибки в С, а приведённые две строчки - это классика жанра.
Всего доброго.
Евгений.
Я не понял смысла этого - зачем после очистки C его опять устанавливать?
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)