Способи адресації 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)
Рис.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