КОПИРОВАНИЕ МАССИВОВ
5.3.1. ПЕРЕСЫЛКА ИНФОРМАЦИИ С КОНЦА МАССИВА
Необходимость перемещения информации, начиная со старших адресов, т. е. с конца массива, возникает в том случае, когда адрес начала массива-приемника принадлежит области конца массива-источника (рис.
5.3,а). Программа пересылки имеет следующий вид:
Возрастание адресов
Рис. 5.3. Схемы расположения массивов в памяти:
а — при пересылке с конца массива-источника; б — при пересылке с начала массива-
источника
В программе предусмотрено сохранение значений входных параметров путем записи их в стек. Перед выполнением цикла непосредственного перемещения вычисляются адреса последних байтов массива-источника и
массива-приемника, что осуществляется путем сложения адреса начала массива и его длины командой DAD. Полученные адреса используются как начальные значения для указателей записи и чтения. Пересылка выполняется побайтно, после каждой пересылки значение указателей декрементируется. Таким образом, первым будет переписан последний байт заполняемого массива, затем — предпоследний и т. д.
5.3.2. ПЕРЕСЫЛКА ИНФОРМАЦИИ С НАЧАЛА МАССИВА
Если адрес начала массива-источника принадлежит области памяти массива-приемника* пересылку массива необходимо начинать с младших адресов (рис. 5.3,6). Программа пересылки имеет вид:
Структура программы аналогична структуре программы КОПІ, но отсутствуют фрагменты, в которых вычисляются адреса последних байтов массива-источника и массива-приемника, так как перемещение начинается с младших адресов и начальными значениями указателей являются значения соответствующих входных параметров. После каждой пересылки значения указателей инкрементируются. Если области памяти, занимаемые
массивом-источником и массивом-приемником, не пересекаются, перемещение выполняется корректно как программой КОП1, так и программой КОП2. Предпочтительнее пользоваться программой КОП2, так как она короче и выполняется быстрее.
5.5.