Максимальное количество бит, которое вы можете сдвинуть длинным словом в 68000
Это может быть что-то очень глупое, но я хотел бы задать этот вопрос, чтобы прояснить ситуацию в моей голове.
Я делаю отличное руководство по сборке 68k ( ссылка). Все идет хорошо, но я не понимаю одну вещь. Позвольте мне процитировать:
Вы можете сдвигать, используя один регистр данных в качестве размера сдвига, например:
lsl.l d0,d1
Теперь в этом примере d1 смещен влево на число, содержащееся в d0. Мы притворимся, что в d0 содержится 0000010F.
Для исходного операнда только байт считывается как счетчик сдвига. Поскольку d0 содержит 0000010F, используется только 0F. Таким образом, длинное слово d1 сдвигается влево на 0F бит.
Максимальное количество битов, на которое вы можете сдвинуться, зависит от выбранного вами размера:
.b for byte gives a maximum shift of $08 bits. .w for word gives a maximum shift of $10 bits. .l for long-word gives a maximum shift of $1F bits.
И вот оно: почему для работы с байтом и 16-битным словом вы можете использовать полную длину (0x08 для байта и 0x10 для 16-битного слова), а для 32-битного длинного слова только 0x1F? Разве это не должно быть 0x20 для 32-битного длинного слова, следовательно?
Во всяком случае, я не вижу байт сдвига точки на 8 бит, так как это всегда даст 0x00 в качестве результата.
Тем не менее я не понимаю это исключение для длинного слова в этом уроке.
Любая помощь приветствуется.
1 ответ
Вы можете использовать только до 0x1F для размера сдвига, потому что в длинном слове 32 бита, поэтому есть только 31 бит, на который вы можете сдвинуть бит самого младшего разряда, прежде чем вы полностью исчерпаете места для сдвига битов.
Что касается того, почему процессор или, по крайней мере, ассемблер не примет 0x20 в качестве числа бит для сдвига, это было дизайнерское решение, независимо от того, кто разработал чип или ассемблер. Помните, если ассемблер является привратником, если вы не редактируете двоичные файлы вручную. Если ассемблер не принимает код, на самом деле не имеет значения, принимает ли его чип, если вы не редактируете двоичный файл вручную.