Язык программирования Форт



         

Глава 6. Хранение чисел в памяти - часть 7


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

Перемещение и заполнение содержимого массивов

Предположим, что имеется два массива по 20 элементов каждый, 1DATA и 2DATA, и нужно сделать так, чтобы содержимое массива 1DATA было равно содержимому массива 2DATA. Можно проделать это следующим образом: 1DATA 2DATA 20 CMOVE

Слово CMOVE ожидает, что в стеке должно быть два адреса и число (адр1 адр2 n -- ), тогда оно перешлет n байтов, начиная с адреса адр1, на адрес адр2. Причем сделает это очень быстро. Первая буква в слове CMOVE ассоциируется со словом character, т.е. литера, поскольку это слово часто используется для пересылки байтов, представляющих литеры в литерных строках. Слово MOVE (переместить), которое имеется в Форт-79 и большинстве реализации, но отсутствует в Форт-83, действует так же, но пересылает указанное число ячеек, а не байтов. Таким образом, 10 MOVE действует так же, как 20 CMOVE

Слово CMOVE обрабатывает байт за байтом. Это значит, что байт из ячейки с адресом адр1 переносится в ячейку с адресом адр2, байт из ячейки с адресом адр1+1 переносится в адр2+1 и т.д. Теперь рассмотрим случай,.когда адр2 находится между адр1 и адр1+n, т.е. область, в которую производится копирование, перекрывается с областью, откуда производится копирование. Теперь допустим, что первый байт в массиве 1DATA равен 219. Если напечатать 1DATA 1DATA 1+ 19 CMOVE то число 219 будет скопировано из ячейки с адресом 0 в ячейку с адресом 1, затем из ячейки 1 в ячейку 2, затем из 2 в 3 и, наконец, из ячейки 18 в ячейку 19. Другими словами, массив 1DATA будет целиком заполнен байтами со значением 219. А теперь предположим, что нужно установить значения всех элементов массива равными 0. Можно сделать это с помощью CMOVE. Вам нужно просто установить первый элемент массива равным 0, а затем скопировать его во все остальные байты массива. Вот необходимая последовательность действий: 0 1DATA С! 1DATA 1DATA 1+ 19 CMOVE

Действие CMOVE, в данном случае неправильное, можно наглядно показать на диаграмме.


Содержание  Назад  Вперед