Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник по Микропроцессорам_МИА.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.67 Mб
Скачать

2. Программирование циклических процессов.

Программирование циклических процессов осуществляется с использованием либо команд переходов, либо - в случае счетных циклов - с использованием команд организации циклов.

  1. программирование итерационных циклов (цикл-пока):

с

ycl: cmp ...

jne com

<операции>

jmp cycl

com: ....

Пример.

Написать процедуру суммирования чисел от 1 до 10, используя итерационный цикл.

sum proc near

mov ax, 0 ; обнуление суммы

mov bx, 1 ; первое слагаемое

cycl: cmp bx, 10 ; слагаемое больше 10

jg continue ; выход из цикла

add ax, bx ; суммирование

inc bx ; следующее число

jmp cycl ; возврат в цикл

continue: ret ; выход, сумма - в ax

sum endp

  1. программирование счетных циклов:

mov cx, N

cycl: <операции>

loop cycl

com: .....

Пример.

Написать процедуру суммирования чисел от 1 до 10, используя счетный цикл.

sum proc near

mov ax, 0 ; обнуление суммы

mov bx, 1 ; первое слагаемое

mov cx, 10 ; загрузка счетчика

cycl: add ax, bx ; суммирование

inc bx ; следующее число

loop cycl ; возврат в цикл

continue: ret ; выход, сумма - в ax

sum endp

3. Моделирование одномерных массивов

М ассив во внутреннем представлении - это последовательность элементов в памяти, например:

A dw 10,13,28,67,0,-1 ; массив из 6 чисел длиной слово.

Программирование обработки выполняется с использованием адресного регистра, в котором хранится либо адрес текущего элемента, либо его смещение относительно начала массива. При переходе к следующему элементу адрес (или смещение) увеличивается на длину элемента.

Пример.

Написать процедуру, выполняющую суммирование массива из 10 чисел размером слово.

Вариант 1

(используется адрес):

Вариант 2

(используется смещение):

summas proc

summas proc

mov ax, 0

mov ax, 0

lea bx, MAS

mov bx, 0

mov cx, 10

mov cx, 10

cycl: add ax, [bx]

cycl: add ax, MAS [bx]

add bx, 2

add bx, 2

loop cycl

loop cycl

ret

ret

summas endp

summas endp

Второй вариант позволяет получать более наглядный код и потому является предпочтительным.

В том случае, если элементы просматриваются непоследовательно, адрес элемента может рассчитываться по его номеру: Aисп=Aначала+(<номер>-1)*<длина элемента>. Полученный по формуле адрес записывается в один из адресных регистров (BX, BP, DI, SI) и используется для доступа к элементу.

Пример.

Написать процедуру, которая извлекает из массива, включающего 10 чисел размером слово, число с номер n (n£10).

n_mas proc

mov bx, N ; номер числа

dec bx ; вычитаем 1

sal bx, 1 ; умножили на длину (сдвинули влево на 1)

mov ax, MAS [bx] ; результат в ax

ret

n_mas endp