Способи адресації Програмування, уроки та приклади

Programm.ws - це сайт, на якому ви можете почитати літературу з мов програмування, а також подивитися приклади працюючих програм на С++, асемблері, паскалі і багато іншого.

Програмування - у звичайному розумінні, це процес створення комп'ютерних програм. У вузькому значенні (так зване кодування) під програмуванням розуміється написання інструкцій - програм - конкретною мовою програмування (часто за вже наявним алгоритмом - планом, методом вирішення поставленого завдання). Відповідно, люди, які цим займаються, називаються програмістами (на професійному жаргоні – кодерами), а ті, хто розробляє алгоритми – алгоритмістами, фахівцями предметної галузі, математиками. У більш широкому значенні під програмуванням розуміють весь спектр діяльності, пов'язаний із створенням та підтримкою в робочому стані програм - програмного забезпечення ЕОМ. Точніший сучасний термін — «програмна інженерія» (також інакше «інженерія ПЗ»). Сюди входять аналіз та постановка задачі, проектування програми, побудова алгоритмів, розробка структур даних, написання текстів програм, налагодження та тестування програми (випробування програми), документування, налаштування (конфігурування), доопрацювання та супровід.

Глава 2. Основи програмування

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, завантажується в СГ

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

mov DX,offset mes ;Адреса рядка посилається в DX

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-е знайоме місце екрану

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

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

mov BX,2000 ;Зміщення до середини екрану

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

mov BX,2000 ;Зміщення до середини екрану

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

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

mov D1,2000; Зміщення до середини екрану

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

mov BX,2000 ;Зміщення до середини екрану

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

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

mov byte ptr ES:2000,'!' ;Виведемо символ у середину екрану

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 (СХ разів)

[ВХ][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 разів)

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