Способи адресації 1

inc СН; Плюс 1 до вмісту СН


push DS; DS зберігається в стеку


xchg ВХ, ВР; ВХ і ВР обмінюються вмістом


mov ES, АХ; Вміст АХ пересилається в ES

mov АН, 40h; Число 40h завантажується в АН


mov AL, '*'; Код ASCII символу "* 'завантажується в AL


int 21h; Команда переривання з аргументом 21h


limit = 528; Число 528 отримує позначення limit


mov CX, limit; Число, позначене limit, завантажується в СХ


mes db "Урок 1 '; Рядок символів


meml dw 0; Слово пам'яті містить 0


mem2 db 230; Байт пам'яті містить 230


; Сегмент команд
inc meml; Вміст слова meml збільшується на 1


mov DX, meml; Вміст слова з ім'ям menu завантажується в DX


mov AL, mem2; Вміст байта з ім'ям mem2 завантажується в АL


mov ES, AX; Відправимо його в ES


mov byte ptr ES: 0, '. '; Відправимо символ на 1-е знакоместо екрану


mov byte ptr ES: 2, '. '; Відправимо символ на 2-е знакоместо екрану

mov byte ptr ES: 0, '. '

mov word ptr ES: 0, '!'

mov AL, '!' mov ES: 0, AL

Тут операндом-джерелом служить регістр AL, розмір якого (1 байт) відомий, і розмір операнда-приймача визначати не треба. Зрозуміло, команда

повинна була б переслати число 10 в число 6, що, зрозуміло, позбавлене сенсу і виконано бути не може. команда ж


mov byte ptr ES: [ВХ], '. '; Символ на екран


mov byte ptr [ВХ], '. '; Символ на екран

До речі, цей фрагмент трохи ефективніший за попередній в сенсі витрачання пам'яті. Через відсутність в коді останньої команди префікса заміни сегмента він займає на 1 байт менше місця.
Регістри ВХ, SI і DI в даному застосуванні абсолютно рівнозначні, і з однаковим успіхом можна скористатися будь-яким з них:


mov byte ptr [DI]. '. '; Символ на екран


mov byte ptr ES: [BX]. '. '; Символ на екран

можна використовувати одну


mov DI, 80 * 2 * 24; Зсув до нижній частині екрана


mov byte ptr ES: [DI], 'О'; Символ на екран


mov byte ptr ES: 2 [DI], 'К'; Запишемо символ в наступну позицію


mov byte ptr ES: 4 [DI], '. '; Запишемо символ в наступну позицію


push DS; В стек завантажуються значення


push ES; трьох регістрів,


push SI; переданих підпрограмі


call mysub; Виклик підпрограми mysub,


; Використовує ці параметри


mov АХ, 2 [ВР],; Читаємо в АХ останній параметр (SI)


mov ВХ, 4 [ВР]; Читаємо в ВХ попередній параметр (ES)


mov CX, 6 [BP]; Читаємо в СХ перший параметр (DS)

Способи адресації 1

Рис.2.15. Стан стека після завантаження в нього трьох параметрів і переходу на підпрограму


mov SI, 0; Початкове значення індексу елемента в масиві


mov АХ, 0; Перше число-заповнювач


mov СХ, 10000; Число кроків в циклі (завжди в СХ)


fill: mov array [SI], AX; Занесення числа в елемент масиву


inc AX; Інкремент числа-заповнювача


add SI, 2; Зсув в масиві до наступного слова


loop fill; Повернення на мітку fill (СХ раз)

[ВХ] [SI] (мається на увазі DS: [BX] [SI])


[ВХ] [DI] (мається на увазі DS: [BX] [DI])


[ВР] [SI] (мається на увазі SS: [BP] [SI])


[ВР] [DI] (мається на увазі SS: [BP] [DI])


mov SI, 0; Початкове значення індексу


; Елемента в масиві


mov АХ, 0; Перше число-заповнювач


mov CX, 10000; Число кроків в циклі


fill: mov [BX] [SI], AX; Відправимо число в масив


inc AX; Інкремент числа-заповнювача


add SI, 2; Зсув в масиві до наступного слова


loop fill; На мітку fill (CX раз)

sims db "QWERTYUIOP<>'


mov BX, 12; Число байтів в рядку

mov BX, off set sym

Схожі статті