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



         

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


Предположим, что слово CMOVE применяется к 4 байтам, содержащим в начале числа 10,11,12,13, и оно перемещает байт с адресом 0 на адрес 1 и т.д. Процесс будет происходить так, как показано на диаграмме 10 11 12 13 10 10 12 13 10 10 10 13 10 10 10 10

А нам нужно, чтобы из байта с адресом 1 число переместилось в ячейку 2; исходное число байта с адресом 2- в ячейку с адресом 3 и т.д. без наложения байтов друг на друга. 'Это значит, что из начального массива 10 11 12 13 должен в конце получиться массив 10 10 11 12 13. Слово, которое позволяет сделать это, называется (в Форт-79 оно необязательное). Слово

В данном случае перемещение элементов массива производится байт за байтом, но наложения не происходит. Очевидно, слово

Имеется также слово FILL (заполнить), которое заполняет некоторую область памяти байтами с указанным значением. Также 1DATA 20 0 FILL заполнит 20 байтов нулями, начиная с адреса 1DATA. Слово FILL- используется, чтобы занести число в определенное число байтов, начиная с некоторого известного адреса. В MMSFORTH и некоторых версиях есть еще слово ERASE (стереть), которое заполняет память последовательностью из нулей.

Таким образом, программа для предыдущего примера эквивалентна следующей: 1DATA 20 ERASE

Еще одно слово в MMSFORTH BLANK (пробел) заполняет область памяти кодами ASCII "пробел". Это равносильно 32 FILL

Очевидно вы сами можете дополнить приведенные слова собственными, имеющими специфическое назначение.

Упражнения

1. Определите слово FILL (назовите его NEWFILL), используя слово CMOVE. 2. Определите слово ERASE (назовите его NEWERASE), используя слово FILL. 3. Определите слово INITIALIZE (инициализировать), чтобы установить все элементы массива чисел одинарной длины в нуль, т.е. 1DATA 7 INITIALIZE должно установить все семь элементов массива 1DATA в нуль. Определение тривиально. 4. Напишите слово ARR-COPY (копировать массив), которое бы копировало содержимое массива одинарных чисел длиной п элементов в другой массив такой же длины, т.е. 1DATA 2DATA 7 ARR-COPY должно скопировать массив 1DATA в массив 2DATA.


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