Задачи, решаемые на ЭВМ, не сводятся к обработке отдельного элемента данных с помощью одной операции. Напротив, они требуют обработки многих элементов данных (например, массива или блока данных), которые занимают отдельные ячейки памяти. Программа может выполнять одну и ту же операцию над содержимым ячеек, причем выполнять ее многократно с помощью программных циклов.
Например, необходимо найти сумму ряда чисел. При этом задача состоит в том, чтобы осуществить суммирование нескольких чисел сразу. Эти числа могут представлять собой совокупности входных сигналов, находящихся под управлением системы, число изделий (или число сообщений), изготовленных (или принятых) за определенный промежуток времени. Предположим, что сумма не превышает 65535 и для ее хранения достаточно одной 16-битовой ячейки памяти.
В программе суммирования ряда чисел для Intel 80x86 использованы следующие исходные данные и обозначения:
0117 – адрес ячейки памяти, где указана длина массива.
cx - счетчик, указатель длины массива.
|
|
bx - адресный указатель данных.
ах - регистр-аккумулятор.
0119 - адрес ячейки памяти, где хранится первый элемент массива.
100 – адрес начала программы.
Таблица 2.
Программа сложения ряда чисел
Адрес | Машинный код | Мнемокод | Метка | Комментарий |
BE1701 | mov si,0117 | Загрузка счётчика | ||
AD | Lodsw | |||
8BC8 | Mov cx,ax | |||
BB1901 | Mov bx,0119 | Загрузка адресного указателя | ||
2BC0 | Sub ax,ax | Обнуление ax | ||
010B | Add ax,[bx] | Сложение элемента массива с ax | ||
010D | Dec cx | Уменьшение счётчика | ||
010E | Je 0115 | Сложение элементов закончено? | ||
83C302 | Add bx,0002 | Переход к следующему адресу | ||
EBF6 | Jmp 010B | Организация цикла | ||
CD20 | Int 20 | M1 | Окончание программы | |
Данные | ||||
Данные | ||||
011B | Данные | |||
01D | Данные |
Исходные данные см. Приложение 2.
В большинстве случаев точность вычислений, обеспечиваемая одной ячейкой памяти, недостаточна. Поэтому рассмотрим арифметику для чисел, занимающих несколько ячеек.Задача состоит в том, чтобы сложить два числа длиной более 16 бит каждое. Исходные числа располагаются в области памяти таким образом, что сначала идут младшие разряды, а затем более старшие. Полученную сумму необходимо поместить в те ячейки памяти, где хранилось первое число
В программе суммирования двух длинных чисел для Intel 80x86 использованы следующие исходные данные и обозначения:
0003 - длина чисел в битах;
cx - счетчик, указатель длины чисел;
di - адресный указатель первого слагаемого;
0115 - адрес ячейки памяти, где хранится младший байт первого числа;
|
|
si - адресный указатель второгослагаемого;
011B - адрес ячейкипамяти, где хранится младший байт второго числа;
100 - адрес начала программы.
Таблица 3.
Программа сложения длинных чисел
Адрес | Машинный код | Мнемокод | Метка | Комментарий |
B90300 | mov cx,0003 | Загрузка счётчика | ||
BF1501 | mov di,0115 | Загрузка адресного указателя 1-го числа | ||
BE1B01 | mov si,011B | Загрузка адресного указателя 2-го числа | ||
8B05 | mov ax,[di] | M1 | Загрузка 1-го операнда в ax | |
010B | adc ax,[si] | Сложение | ||
010D | AB | stosw | Запоминание результата сложения | |
010E | inc si | Увеличение si на единицу | ||
010F | inc si | – “ – “ – | ||
dec cx | Уменьшение счётчика на единицу | |||
75F6 | jne 0109 | Организация цикла | ||
CD20 | int 20 | Окончание программы | ||
FF | Данные | |||
FF | Данные | |||
FF | Данные | |||
FF00 | Данные | |||
011A | Данные | |||
011C | Данные | |||
011E | Данные | |||
Данные |
Исходные данные см. Приложение 3.