- •Регістри загального призначення
- •Лічильник команд, регістри прапорців
- •Особливості звернення до пам’яті:
- •Переривання
- •Загальний алгоритм виконання машинної команди
- •Введення/виведення даних
- •Лекція №4
- •Лекція №5
- •Лекція №6
- •Команди обробки рядків даних
- •Вилучення елементу з таблиці
- •Вставка елемента у таблицю
- •Лінійний пошук
- •Команди управління процесором
Лекція №6
Команди зсуву:
Усі команди зсуву переміщують розряди операнда ліворуч за схемою в залежності від коду команди.
СТРУКТУРА ТА СИНТАКСИС:
<мнемоніка команди> <ОП> <кількість зсувів>
Кількість зсувів для цієї групи можна
задати двома способами: статично
(фіксоване значення), динамічно –
занесення заздалегідь значення кількості
зсувів у регістр CL (0
).
МП з метою оптимізації сприймає лише
молодші 5 розрядів, реальна кількість
зсувів
В останніх моделях МП є додаткові команди, що дозволяють виконувати зсуви до 64 розрядів.
Усі команди зсуву змінюють прапорець переносу CL. По мірі зсуву операндів за межі операнда вони також дублюються у прапорці CL.
За принципом виконання поділяються:
Команди лінійного зсуву;
Команди циклічного зсуву.
Команди лінійного зсуву:
Черговий розряд, що зсувається переміщується у CL.
Попередній біт, що був зсунутий втрачається.
Команди лінійного зсуву розділяються на:
Команди логічного лінійного зсуву; SHL (лів.) SHR (прав.)
Команди арифметичного лінійного зсуву. SHL (лів.) SHR (прав.)
СF
СF
Старші розряди
заповнюються Ø
B
. . .
Mov AX, beg_dig
SHL AX, 4 AH
ADD AL AH
Команди арифметичного зсуву відрізняються від команд логічного зсуву тим, що особливим чином обробляють знаковий розряд операнда:
SAL - вліво
SAR – вправо
SAL - аналогічно SHL за виключенням того, що в разі зміни знаку, то встановлюється прапорець CF.
Усі команди можна використовувати для цілочисельного множення або ділення на ступінь двійки.
Перевага – виконується швидше.
Циклічний зсув:
Ці команди зберігають усі команди, що приймають участь у зсуві.
Підгрупи:
Звичайний циклічний зсув;
Через прапорець переносу.
ROR –праворуч
R
Зсув праворуч
OL
– ліворуч
Зсув
ліворуч
Обмін двох половинок AX : AH : AL
MOV CL,8
ROR AX, CL
Команди циклічних зсувів через прапорець переносу відрізняються від простих тил, що розряд, який висувається справа або зліва за межі операнда спочатку попадає у прапорець CL.
CF
;Поворот розрядів:
XOR BX, BХ
MOV CL,16
L
1:
RCL AX,1
старший розряд у CF
RCR BX,1
LOOP L1
Приклад: Підрахунок кількості одиниць
XOR dx,dx
MOV CX,16
L1: ROR AX,1
JNC L3
INC DX
L3: LOOP L1
Розширені команди зсуву:
В моделях МП існують моделі починаючи з і386.
SHLD – лівий
SHRD – правий
<ОП1> <ОП2> <кількість зсувів>
SHLD
Перетворення розпакованого десяткового коду в упакований:
UNPCK _BCD LABEL dword
Dig_BCD dB 2,4,3,6
PCR_BCD DD Ø
. . .
.386 MOV EAX, dig_BCD ;32-х розрядні регістри почи -
M1: SHL EAX,4 ; наються з букви Е
SHLD PCK_BCD, EAX, 4
SHL EAX, 4
LOOP M1
PCK_BCD 2436
Результат: PCK_BCD = 00002436
Вставка розрядів у рядок розрядів починаючи з певного розряду:
Bit_str dd 11010111B ;рядок для вставки
P_STR dd ØFFFFØØØØH ; рядок, що встановлюємо
.386
MOV EAX, P_STR
ROR bit_str, 8
SHR bit_str, 16
SHLD bit_str, EAX, 16
ROL bit_str, 8
Команда перекодування XLAT - виконує перекодування коду байта в регістрі AL згідно таблиці перекодування. Адреса таблиці перекодування повинна попередньо бути завантажена в регістр BX. Код в регістрі AL буде використовуватись як зміщення відносно адреси початку таблиці перекодування. В прикладі нижче показано перекодування коду символу ’В’ (42h) в код 3Eh. В таблиці TABL умовно показано, що із зміщенням 42h розміщений код 3Eh.
TABL DB 10 DUP (0),………3Eh…….
.
.
MOV AL, “B”
MOV BX, OFFSET TABL
XLAT
TAB1 DB ‘0123456789ABCDEF’
MOV BX, OFFSET TAB1
XLAT
