|
|
8(495)909-90-01
8(964)644-46-00
pro@sio.su
|
|
Раздел: Документация0 ... 71 72 73 74 75 76 77 ... 195 RET Возврат из подпрограммы Операция | SP = SP + 2(3); PC = STACK | Код операции | 1001 0101 0000 1000 | | | | 1 слово (2 байта) | Операнды | Нет операндов | Описание | Возврат из подпрограммы. Выполняет возврат в была вызвана | то место, откуда подпрограмма | Регистр SREG | I | T | H | S | V | N | Z | С | - | - | - | - | - | - | - | - | Число тактов | 4(в моделях с PC < 16 битов) 5(в моделях с PC > 16 битов) | | rcall routine ; | Вызвать | подпрограмму | | | Пример | routine push | rl4 | ; Сохранить rl4 | | | | | pop ret | r!4 | ; | Восстановить rl4 Возврат из подпрограммы | |
RETI Возврат из подпрограммы обработки прерывания Операция | SP = SP + 2(3); PC | = STACK | | | | | | Код операции | 10010101 0001 1000 | | | | | 1 слово (2 байта) | Операнды | Нет операндов | Описание | Возврат из подпрограммы обработки прерывания. Выполняет возврат в то место, в котором выполнение программы было прервано в результате возникновения прерывания. Следует обратить внимание, что контекст программы (регистр состояния SREG) не сохраняется при вызове подпрограммы обработки прерывания и соответственно не восстанавливается при выходе из нее. В связи с этим сохранение и восстановление этого регистра необходимо выполнять самостоятельно | Регистр SREG | I | T | H | S | V | N | Z | С | 1 | - | - | - | - | - | - | - | Число тактов | 4(в моделях с PC < 16 битов) 5(в моделях с PC > 16 битов) | Пример | extint: push | rO | Сохранить rO | | | | | | pop rO reti ; | Восстановить rO Возврат из подпрограммы | | |
RJMPk Относительный безусловный переход Операция | РС = РС + к+1; | Код операции | 1100 kkkk kkkk kkkk 1 слово (2 байта) | Операнды | -2047 < к < 2047 | Описание | Команда относительного безусловного перехода. Выполняет переход по адресу, равному сумме содержимого счетчика команд и константы к. На практике вместо числовых значений смещения используются метки (см. пример) | Регистр SREG | I Т H S V N Z С | ------- | Число тактов | 2 | Пример | cpi г16, $42 ; Сравнить г1б с числом $42 brne error ; Перейти, если г1б * $42 rjmp ok ; Безусловный переход error: add rl6, rl7 ; Прибавить rl6 к rl7 inc rl6 ; rl6 = rl6 + 1 ok: |
ROL Rd Сдвиг влево через перенос Операция | С <- Ь7...............................ЬО <- С | Код операции | 0001 1 ldd dddd dddd 1 слово (2 байта) | Операнды | 0 < d < 31 | Описание | Сдвигает содержимое регистра Rd влево на один бит. В бит Ь0 заносится содержимое флага С регистра SREG, а бит Ь7 загружается в флаг С. В комбинации с командой LSL данная команда может использоваться для умножения многобайтных чисел (как знаковых, так и беззнаковых) на два. Эквивалентна команде ADC Rd, Rd. Значение флага Vравно «Исключающему ИЛИ» флагов N и С после сдвига | Регистр SREG | I Т H S V N Z С | --<=><=><=><=><=><=> | Число тактов | 1 | Пример | ; Умножить регистровую пару г19:г18 на 2: lsl г18 ; г18 = г18 * 2 rol г19 ; г!9:г18 - 16-битное целое |
ROR Rd Сдвиг вправо через перенос Операция | С -► Ь7...............................ЬО -► С | Код операции | 1001 010d dddd 0111 1 слово (2 байта) | Операнды | 0<d < 31 | Описание | Сдвигает содержимое регистра Rd вправо на один бит. В бит Ь7 заносится содержимое флага С регистра SREG, а бит ЬО загружается в флаг С. В комбинации с командой ASR данная команда может использоваться для деления многобайтных знаковых чисел на два, а в комбинации с командой LSR — для деления многобайтных беззнаковых чисел на два. Значение флага V равно «Исключающему ИЛИ» флагов N и С после сдвига | Регистр SREG | I Т Н S V N Z С | - | — о о о о о | Число тактов | 1 | Пример | lsr г19 гог г18 asr г17 гог г1б | ; Разделить регистровую пару г19:г18 на 2 ; г19:г18 - 16-битное целое без знака ; Разделить регистровую пару г17:г16 на 2 ; г17:г16 - 16-битное целое со знаком |
SBC Rd, Rr Вычитание с заемом Операция | Rd = Rd | -Rr-C | | | | | | | Код операции | 0000 10rd dddd rrrr | | | | | 1 слово (2 байта) | Операнды | 0 d 31,0<r< 31 | Описание | Вычитает из регистра Rd содержимое регистра Rr. Если флаг переноса С установлен, полученная разность уменьшается на 1. Результат помещается в регистр Rd. Если результат вычитания не равен нулю, флаг нуля Z сбрасывается в 0, в противном случае он остается без изменений | Регистр SREG | I | Т | Н | S | V | N | Z | С | - | - | <=> | <=> | <=> | <=> | <=> | <=> | Число тактов | 1 | Пример | ; Вычитание регистровой пары Rl:R0 из R3:R2 sub r2,r0 ; Вычесть младшие байты sbc гЗ, rl ; Вычесть старшие байты с учетом переноса | 0 ... 71 72 73 74 75 76 77 ... 195
|
|