- •Регістри загального призначення
- •Лічильник команд, регістри прапорців
- •Особливості звернення до пам’яті:
- •Переривання
- •Загальний алгоритм виконання машинної команди
- •Введення/виведення даних
- •Лекція №4
- •Лекція №5
- •Лекція №6
- •Команди обробки рядків даних
- •Вилучення елементу з таблиці
- •Вставка елемента у таблицю
- •Лінійний пошук
- •Команди управління процесором
Команди обробки рядків даних
Ці команди використовують регістри SI та DI, в яких попередньо мають бути записані адреси операндів джерела та приймальника відповідно (згідно замовчень). Якщо прапорець DF встановлений в 1, то регістри SI та DI зменшуються (автодекремент), інакше збільшуються (автоінкремент) на 1 в разі обробки байт або на 2 (4) при обробці слів.
M
OVS пересилка
LODS завантаження REP
STOS запис
CMPS порівняння REPE/REPZ,
SCAS сканування REPNE/REPNZ
Команди однобайтні, мають два варіанти синтаксису. У першому варіанті в кінці мнемоніки ставиться літера B або W в залежності від того, що обробляється – байти чи слова. Наприклад, команда MOVSW виконує пересилку слів, а команда LODSB – завантаження байтів. У другому варіанті використовуються фіктивні операнди. Наприклад, команда CMPS ES:BYTE PTR [SI], [DI] використовується для порівняння рядків даних та вказує на відміну замовчення щодо сегментного регістру даних. Команди обробки рядків даних використовуються головним чином з командою-префіксом повтору для їх циклічного виконання. Кількість повторів має бути попередньо підготовлена в регістрі СХ. При кожному повторі цих команд з префіксом регістр СХ зменшується на 1. Перші три команді з наведеного списку не змінюють ознак результату і використовують команду-префікс REP. Останні дві команди змінюють ознаки результату і використовують команди-префікси з рівнозначними мнемоніками REPE/REPZ або REPNE/REPNZ.
len equ 10
atab dw tab
aetab dw etab
tab db ‘Іванов ’,10
db ‘Смірнов ’,11
tab1 db ‘Сідоров ’,12
db ‘Петренко ’,13
db ‘Середенко’,15
etab equ $
elem db ‘Міроненко’,20
Вилучення елементу з таблиці
CLD
MOV DI, OFFSET TAB1
LEA SI, LEN [DI]
MOV CX, ETAB – TAB1 - len
REP MOVSB
SUB AETAB, LEN
Вставка елемента у таблицю
STD
MOV CX, ETAB – TAB1
MOV SI, AETAB
DEC SI
LEA DI, LEN [SI]
REP MOVSB ; РОЗСУНЕННЯ
CLD
MOV DI, OFFSET TAB1
MOV SI, OFFSET ELEM
MOV CX, LEN
REP MOVSB ; ВСТАВКА
Для перших трьох мнемонік може використовуватись команда-префікс повтору REP для двох останніх REPNE / REPNZ
Пропуск пробілів:
BUF DB ‘ QWERTY’
EBUF EQU $
BUF_LEN EQU EBUF - BUF
.
.
MOV CХ, BUF_LEN
MOV DI, OFFSET BUF
MOV AL, ‘
’
REPE SCASB
Лінійний пошук
len equ 16
tab db ‘Іванов ’,’41-95-66’
db ‘Петров ’,’13-55-64’
db ‘Сідоров ’,’83-61-32’
db ‘Петренко ’,’37-21-42’
etab equ $
LKEY equ 8
elem db ‘Сідоров ’
; лінійний пошук
MOV AX, DS
MOV ES, AX
MOV SI, OFFSET TAB
MOV CX, 4
CLD
CYCL: PUSH SI
PUSH CX
MOV DI, OFFSET ELEM
MOV CX, LKEY
REPE CMPSB
POP CX
POP SI
JE LYES
ADD SI, LEN
LOOP CYCL
; ЕЛЕМЕНТ ВІДСУТНІЙ
LYES:
