параметр (тут він відсутній, значить береться значення за замовчуванням 57) і кількість символів у кожному рядку (тут 132, можливо від 60 до 132, по замовчуванням - 80).
Page без параметрів здійснює переклад друку на нову сторінку і збільшення на 1 номера сторінки лістингу. Ці директиви можуть бути відсутні.
. Масиви в Асемблері
Масиви в мові Асемблера описуються директивами визначення даних, можливо з використання конструкції повторення DUP.
Наприклад, x dw 30 dup (?)
Так можна описати масив чисел, що складається з 30 елементів довжиною в слово, але в цьому описі не вказано як нумеруються елементи масиву, тобто це може бути
[0 .. 29] і x [1 .. 30] і x [k .. 29 + k].
Якщо в задачі жорстко не обумовлена ??нумерація елементів, то в Асемблері зручніше рахувати елементи від нуля, тоді адресу будь-якого елемента буде записуватися найбільш просто: адреса (x [i])=x + (type x) * i
У загальному вигляді, коли перший елемент має номер k, для одновимірного масиву буде: адреса (x [i])=x + (type x) * (i - k)
Для двовимірного масиву - A [0 .. n - 1, 0 .. m - 1] адресу (i, j) - го елемента можна обчислити так: адреса (A [i, j]) =A + m * (type A) * i + (type A) * j
З урахуванням цих формул для запису адреси елемента масиву можна використовувати різні способи адресації. Для описаного вище масиву слів, адресу його i-го елемента дорівнює: x + 2 * i=x + type (x) * i,
тобто адреса складається з двох частин: постійної x і змінної 2 * i, залежною від номера елемента масиву. Логічно використовувати адресацію пряму з індексуванням:
x - зміщення, а 2 * i - в регістрі модификаторе SI або DI - x [SI]
Для двовимірного масиву, наприклад:
A DD n DUP (m Dup (?)); A [0 .. n - 1, 0 .. m - 1] отримаємо:
адресу (A [i, j])=A + m * 4 * i + 4 * j,
Тобто маємо в адресі постійну частину А і дві змінних m * 4 * i і 4 * j, які можна зберігати в регістрах. Два модифікатора є в адресації по базі з індексуванням, наприклад: A [BX] [DI].
Запишемо фрагмент програми, в якій в регістр AL записується кількість рядків матриці X DB 10 dup (20 dup (?)), в яких початковий елемент повторюється хоча б один раз.
----------------------------------
mov AL, 0; кількість шуканих рядків
mov CX, 10; кількість повторення зовнішнього циклу
mov BX, 0; початок рядка 20 * i
m1: push CX
mov AH, X [BX]; 1-й елемент рядка в AH
mov CX, 19; кількість повторень внутрішнього циклу
mov DI, 0; номер елемента в рядку (j)
m2: inc DI; j=j + 1AH, X [BX] [DI]; A [i, 0]=A [i, j] m2; перший не повторився? Перехід на m2
jne L; не було в рядку рівних перший? Перехід на L
inc AL; перший повторився, збільшуємо лічильник рядків
L: pop CX; відновлюємо CX для зовнішнього циклу
add BX, 20; в BX початок насту...