Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lect1_ass.DOC
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
318.46 Кб
Скачать

Лекція №6

Команди зсуву:

Усі команди зсуву переміщують розряди операнда ліворуч за схемою в залежності від коду команди.

СТРУКТУРА ТА СИНТАКСИС:

<мнемоніка команди> <ОП> <кількість зсувів>

Кількість зсувів для цієї групи можна задати двома способами: статично (фіксоване значення), динамічно – занесення заздалегідь значення кількості зсувів у регістр CL (0 ).

МП з метою оптимізації сприймає лише молодші 5 розрядів, реальна кількість зсувів

В останніх моделях МП є додаткові команди, що дозволяють виконувати зсуви до 64 розрядів.

Усі команди зсуву змінюють прапорець переносу CL. По мірі зсуву операндів за межі операнда вони також дублюються у прапорці CL.

За принципом виконання поділяються:

  • Команди лінійного зсуву;

  • Команди циклічного зсуву.

Команди лінійного зсуву:

  1. Черговий розряд, що зсувається переміщується у CL.

  2. Попередній біт, що був зсунутий втрачається.

Команди лінійного зсуву розділяються на:

  • Команди логічного лінійного зсуву; SHL (лів.) SHR (прав.)

  • Команди арифметичного лінійного зсуву. SHL (лів.) SHR (прав.)

СF

СF

Старші розряди заповнюються Ø

B

.

.

.

eg_dig dw 9,05 H

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 Ø

.

.

.

MOV CX,4

.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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]