ASS_continue

Мар 13, 2017 // By:maximios // No Comment



Процедури або підпрограми оформлюються за допомогою спеціальних директив початку та кінця процедури, що визначає тип цієї процедури.

<ім’я> PROC [<тип>]; NEAR | FAR

PF за замовченнямNEAR

кінець процедури — <ім’я> ENDP

RET – код повернення.

Тип процедури визначає тип повернення NEAR або FAR.

В умовах високого рівня існує 2 типа підпрограм процедури (PROCEDURE) та функцій (FUNCTION).

Підпрограмафункція повертає в основну програму тільки одне значення, яке за узгодженням в мовах програм передається через регістр-акумулятор (безпосереднє значення або його адреса). Тому функція використовується, як елемент виразу, які в мовах програм використовують значення цієї функції через регістр-акумулятор АХ.

Команди пересилок даних:

MOV <DEST>, <SOURCE>

(операнд (операнд-

приймальник) джерело)

Операнд – джерело пересувається в операнд приймальника.

Регістр – регістр SRR

Регістр – пам’ять             R – SR

Память – регістр             R – П

Регістр – безпосередній операнд П – R

Память – безпосередній операнд

Сегментний регістр – безпосередній операнд забороняється      (PSP)

MOV AX, DATA

MOV DS, AX

Команда MOV не змінює ознак результату.

Команда обміну даних

XCHG <On1>, <On2>

Формати

Регістр — пам’ять

Регістр – регістр

Память – регістр

При виконанні цієї команди вміст операндів, що вказані обмінюються місцями

Команди введення/виведення:

INкоманда введення.

AL, <N порту> не >255

В залежності від типу контролера використовуються дані розміром в байт або слово.

При використанні цієї команди дані із регістра порта контролера пересувається а акумулятор.

Команди виведення (OUT)

OUT <N порту>, AX(AL)

При виконанні вміст регістра акумулятора пересилається у відповідний порт.

Ці команди не змінюють ознак результату, використовують для обслуговування повільних зовнішніх пристроїв.

У більшості операторів Assembler операнди мають бути сумісними за типом, вони повинні мати тип байт або слово, але є виключення – IN,OUT.

Команди завантаження адрес:

LEAзавантаження дійсної адреси.

Команда LEA має постбайтну структуру.

За допомогою команди LEA можна скласти 3 операнда : LEA AX, 15 [BX,SI]

LDSзавантажує повну адресу операнда в один із регістрів загального призначення (внутрішня сегментна адреса) та в один із сегментів регістрів.

LDS      rsp,<adress>

LES      rzp,<address>

PUSH      <op>

POP      <op>

 

PUSHF

POPF

INT         PUSHF

            CALL   FAR    <adress>

 

 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

 

Beg_dig dw 9,05 H

    Mov AX, beg_dig

SHL AX, 4 AH

ADD AL AH   

Команди арифметичного зсуву відрізняються від команд логічного зсуву тим, що особливим чином обробляють знаковий розряд операнда:

SAL вліво

SAR – вправо

SAL аналогічно SHL за виключенням того, що в разі зміни знаку, то встановлюється прапорець CF.

 

 

 

 

 

Усі команди можна використовувати для цілочисельного множення або ділення на ступінь двійки.

Перевага – виконується швидше.

Циклічний зсув:

Ці команди зберігають усі команди, що приймають участь у зсуві.

Підгрупи:

• Звичайний циклічний зсув;

• Через прапорець переносу.

ROR –праворуч

ROL – ліворуч

 

Обмін двох половинок AX : AH : AL

MOV CL,8

ROR AX, CL

 

 

 

Команди циклічних зсувів через прапорець переносу відрізняються від простих тил, що розряд, який висувається справа або зліва за межі операнда спочатку попадає у прапорець CL.

 

 

 

 

 

 

 

;Поворот розрядів:

XOR BX, BХ

MOV CL,16

L1: 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> <кількість зсувів>

                                                                              

 

   Перетворення розпакованого десяткового коду в упакований:

 

 

 

 

 

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

 

 


Leave a Comment

Your email address will not be published.