Jump to content

Уиллер Джамп

« Прыжок Уиллера» — это тип методологии вызова подпрограмм , которая использовалась на некоторых ранних компьютерах, в которых отсутствовала аппаратная поддержка сохранения адреса возврата. Концепция была разработана Дэвидом Уилером во время работы над новаторской машиной EDSAC в 1950-х годах. [1] EDSAC не был создан с учетом подпрограмм, и у него не было подходящего регистра процессора или аппаратного стека , который мог бы позволить легко сохранить адрес возврата.

Решением Уиллера был особый способ написания кода подпрограммы. Для реализации последней строкой подпрограммы была инструкция «перейти по этому адресу», за которой обычно следует ячейка памяти. В подпрограмме Уиллера этому адресу обычно присваивалось фиктивное число, например 0.

Чтобы вызвать подпрограмму, адрес вызывающей стороны должен быть помещен в аккумулятор , а затем код перешел к начальной точке подпрограммы. Первые инструкции в процедуре будут вычислять адрес возврата на основе значения в аккумуляторе (обычно это следующая ячейка памяти, поэтому приращения будет достаточно), а затем записывать результат по заранее отведенному фиктивному адресу. Когда процедура выполняется, она естественным образом достигает конца процедуры, который теперь говорит «перейти к обратному адресу».

Поскольку запись в память — медленный процесс по сравнению с доступом к регистру, этот метод не особенно быстр. Он также не способен выражать рекурсию . [2] Добавление новых регистров для такого рода обязанностей было ключевой целью разработки EDSAC 2 .

Этот пример демонстрирует технику использования псевдоассемблера для простой байт-ориентированной машины на основе аккумулятора с одним регистром A:

 'prepare to call the subroutine
10 COPY PC TO A  ' copy the program counter (10) into the accumulator
11 JUMP          ' jump to...
12 70            ' ... location 70
... many more lines...
70 ADD CONST     ' add the following value to the accumulator...
71 3             ' ... three locations past the original PC value
72 STORE         ' store the value in the accumulator to...
73 91            ' ... the set-aside  memory location
... lines that perform the actual subroutine...
90 JUMP          ' return to...
91 0             ' ... which will be replaced by 13

Когда этот код завершится, инструкция JUMP по адресу 90 естественным образом вернется в позицию 13, следующую инструкцию после подпрограммы.

  1. ^ Хилл, Марк (2000). Чтения по компьютерной архитектуре . Профессиональное издательство Персидского залива. п. 3. ISBN  9781558605398 .
  2. ^ Профессор Дэвид Брейлсфорд, Шон Райли (6 февраля 2018 г.). Прыжок Уиллера . Компьютерфил; Школа компьютерных наук Ноттингемского университета, Великобритания . Проверено 30 марта 2023 г.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 3219c5102790c4abd7a320c97617dfc6__1680129720
URL1:https://arc.ask3.ru/arc/aa/32/c6/3219c5102790c4abd7a320c97617dfc6.html
Заголовок, (Title) документа по адресу, URL1:
Wheeler Jump - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)