Программирование на Ассемблере
Если же используется команда BLE, то
ветвление будет корректно работать и для отрицательных чисел. Команды BEQ и BNE могут применяться не только при сравнениях. Используя их
можно, например, определять состояния некоторого набора битов заданного
слова:
... AND.B #%00001111,D1 ;проверяет биты по маске
BEQ SMALLER ;ветвление, если ни один из четырех
;младших битов не установлен
CMP.B #%00001111,D1
BEQ ALL
;ветвление, если младшие четыре бита
;установлены Команда AND выполняет побитовое сравнение операндов по следующей схеме:
если в какой-либо позиции биты обоих операндов установлены, то в
соответствующий бит результата записывается 1, в противном случае - 0.
Результат записывается на место второго операнда (в нашем примере D1),
старое содержимое которого теряется. Таким образом, результат команды AND в
нашем примере будет содержать в младших четырех битах копию соответствующих
битов регистра D1, а в старших битах - нули. Такая техника называется маскированием (наложением маски). В приведенном
нами примере команда AND выполняет маскирование младших четырех битов
регистра D1. Конечно, Вы можете использовать любые другие битовые
комбинации. Если все биты результата команды AND нулевые, то устанавливается флаг нуля
(Z-flag) и срабатывает ветвление BEQ. Иначе, по команде CMP производится
сравнение этого результата с числом %00001111, и если имеет место равенство
(а это означает, что младшие 4 бита исходного содержимого D1 были
установлены), то выполняется второе ветвление BEQ. Другие коды условий тоже могут использоваться для разных целей.
Забегая вперед скажем, что помимо использования с CMP, условия CC и CS
могут служить для определения содержимого бита, \"вытолкнутого\" командами
сдвига (ROL, ROR итд.). Прежде чем перейти к описанию набора команд процессора MC68000, дадим еще
одну полезную рекомендацию:
С помощью пакета ассемблер + отладчик (например, Devpac или AssemPro) можно
легко исследовать влияние команд на флаги.
|