Логика реализации" неродного " типа данных
Предположим, что аппаратное обеспечение компьютера содержит инструкцию :-
MOVE (source, dest, length) // Hardware instructions are presented using UPPERCASE letters
это копирует символьную строку длина байты из адреса, указанного источник по адресу, указанному дест.
Длина должна быть задана целым числом.
Пример этой инструкции-MOVE (один,б,3), который копирует три байта, начинающиеся в местоположении а, в три байта, начинающиеся в местоположении В.
ЗАПИСКА : Чтобы сослаться на местоположение, которое находится на 4 байта дальше a, нотация один[4] будет использоваться для ссылки на это место.
Кроме того, для ссылки на адрес, заданный путем добавления двоичных целочисленных констант байта в икс по адресу один, используется обозначение a[x].
Операция перемещения требует от программиста указания длины копируемой строки. Таким образом, его операнд является строкой фиксированной длины символа (длина строки должна быть известна).
Здесь строка фиксированной длины и двоичное целое число размером в байт могут рассматриваться как" родной "тип данных для этой"конкретной машины".
Проблема :
Теперь предположим, что мы хотим реализовать символьные строки различной длины на этой конкретной машине. То есть мы хотим дать возможность программистам использовать инструкцию
MOVEVAR (source,dest)
чтобы переместить символьную строку из источника местоположения в местоположение dest без необходимости указывать какую-либо длину.
Решение :
К осуществлять этот тип данных, мы должны сначала решить, как он должен быть представлен в памяти машины, а затем указать, как это представление должно быть обработано. Очевидно, что необходимо знать, сколько байтов должно быть перемещено для выполнения этой инструкции. Поскольку операция MOVEVAR не указывает это число, следовательно, это число должно содержаться в представлении самой символьной строки. Символьная строка переменной длины длины l может быть представлена непрерывным набором л+1 байт (л< 256). Первый байт содержит двоичное представление, а остальные байты содержат представления символов в строке.
Программа для реализации операции MOVEVAR может быть записана следующим образом :-
MOVE (source,dest,1); for (i=1; i<dest; i++) { MOVE(source[i], dest[i], 1); }
Источник проблемы: см. стр. 20
(Скриншот страницы)
мой вопрос :-
Может ли кто-нибудь объяснить логику этой реализации инструкции MOVEVAR, т. е. алгоритм реализации (как это работает ?)
Что я уже пробовал:
Я попытался найти объяснение, но не смог.