Его-его. Задача компилятора - найти и показать программисту максимально возможное количество ошибочных и подозрительных ситуаций в его программе до этапа выполнения и даже до линковки. А ситуация, как минимум неоднозначная: на "больших" машинках это вылет по 4 вектору, на LSI-11 - вообще хрен поймет что, но наверняка не то, о чем думал программист, объявляя байт по нечетному адресу отдельной переменной. Как пример - тот самый PACM6. Будь эта проверка в Макро, эту ошибку убрали бы одной из первых.
ИМХО, все проще. Поначалу DEC'овцы облажались, забыли об этой проверке, позже объявили этот баг фичей и на этом успокоились.
В том PACM6 смещения были от 7-го регистра.
Вот-вот, явный намёк на "строгость" проверки. А на самом деле строгости-то и не оказалось. Вон, Система-360 молча выравнивала данные на нужную границу и не жужжала напоминаниями. У них там еще этих выравниваний аж 3 шт - на границу полуслова (2 байта), слова (4) и двойного слова (8), и даже нет отдельной директивы выравнивания, просто пишешь константу (описываешь поле) нужного типа и она автоматически выравнивается на нужную границу. А при неочевидной потребности выравнять (например, байт на границу двойного слова), писали константу нужного типа с коэффициентом повторения НОЛЬ.





Ответить с цитированием