Относительная адресация
Относительную адресацию, для расчета действительного адреса перехода (effective address -EA), используют все команды условных переходов. CPU рассчитывает адрес назначения условного перехода суммируя байт (со знаком), следующий за операционным кодом, с содержимым счетчика команд. Если условия перехода истинны, то PC загружается рассчитанным действительным адресом (EA). Если условия перехода ложны, то CPU выполняет следующую команду. Смещение является байтом дополнения до двух со знаком, что обеспечивает диапазон перехода от -128 до 127 байтов от адреса ячейки, следующей за командой перехода.
Четыре новых операционных кода переходов тестируют биты N, Z и V (переполнение) для определения соответствующего знака операнда. Этими новыми операционными кодами являются команды BLT, BGT, BLE и BGE и они разработаны для использования в операциях знаковой арифметики.
Большинство ассемблеров автоматически рассчитывают смещение и проверяют пространство перехода.
В таблице 9 приведен перечень команд, использующих относительную адресацию.
В приведенном ниже примере используются две команды относительной адресации: BLT (перейти, если меньше, с учетом знака) и BRA (переходить всегда). В этом примере содержимое аккумулятора сравнивается с величиной -2 (со знаком). Поскольку величина #1 больше -2, то переход к TAG не происходит.
Машинный код Метка Операция Операнд Комментарий
A601 TAG LDA #1 ;A = 1
A1FE CMP #-2 ; Сравнение с -2
91FA BLT TAG ; Переход, если значение A меньше -2
20FE HERE BRA HERE ; Переход в любом случае
Таблица 9. Команды относительной адресации
Мнемоника |
Команда |
BCC |
Перейти, если перенос очищен (Branch if Carry Clear) |
BCS |
Перейти, если перенос установлен (Branch if Carry Set) |
BEQ |
Перейти, если равно (Branch if Equal) |
BGE |
Перейти, если больше или равно, с учетом знака (Branch if Greater Than or Equal (Signed)) |
BGT |
Перейти, если больше, с учетом знака (Branch if Greater (Signed)) |
BHCC |
Перейти, если полуперенос очищен (Branch if Half-Carry Clear) |
BHCS |
Перейти, если полуперенос установлен (Branch if Half-Carry Set) |
BHI |
Перейти, если больше (Branch if Higher) |
BHS (BCC) |
Перейти, если больше или равно (Branch if Higher or Same) |
BIH |
Перейти, если линия прерывания на высоком уровне (Branch if Interrupt Line High) |
BIL |
Перейти, если линия прерывания на низком уровне (Branch if Interrupt Line Low) |
BLE |
Перейти, если меньше или равно, с учетом знака (Branch if Less Then or Equal (Signed)) |
BLO (BCS) |
Перейти, если меньше (Branch if Lower) |
BLS |
Перейти, если меньше или равно (Branch if Lower or Same) |
BLT |
Перейти, если меньше, с учетом знака (Branch if Less Then (Signed)) |
BMC |
Перейти, если маска прерывания очищена (Branch if Interrupt Mask Clear) |
BMI |
Перейти, если минус (Branch if Minus) |
BMS |
Перейти, если маска прерывания установлена (Branch if Interrupt Mask Set) |
BNE |
Перейти, если не равно (Branch if Not Equal) |
BPL |
Перейти, если плюс (Branch if Plus) |
BRA |
Переходить всегда (Branch Always) |
BRCLR |
Перейти, если бит n памяти очищен (Branch if Bit n in Memory Clear) |
BRSET |
Перейти, если бит n памяти установлен (Branch if Bit n in Memory Set) |
BRN |
Не переходить никогда (Branch Never) |
BSR |
Перейти в подпрограмму (Branch to Soubroutine) |
|