Введение

Команды в некоторых языках программирования высокого уровня, альбом «Белый город».

В вычислительной технике PEEK и POKE — это команды, используемые в некоторых языках программирования высокого уровня для доступа к содержимому конкретной ячейки памяти, адресуемой по её адресу. PEEK извлекает байт, расположенный по указанному адресу памяти, а POKE записывает байт в указанную ячейку памяти. Эти команды впервые появились в мониторах машинного кода, таких как монитор DECsystem 10, и особенно тесно связаны с языком программирования BASIC, хотя они также присутствуют в других языках, таких как Pascal и COMAL. По своей роли эти команды сопоставимы с указателями в языке C и некоторых других языках программирования. Одно из самых ранних, если не самое первое, упоминание этих команд в BASIC встречается в Altair BASIC. Команды PEEK и POKE были разработаны для ранних персональных компьютеров для решения различных задач, особенно для изменения специальных аппаратных регистров, отображенных в память, чтобы управлять определенными функциями компьютера, такими как устройства ввода-вывода. Кроме того, программисты могли использовать эти команды для копирования программного обеспечения или даже для обхода логики работы программы (например, для изменения игровой программы, чтобы позволить пользователю жульничать). Сегодня непосредственный доступ к памяти компьютера на таком низком уровне с использованием языка высокого уровня, как BASIC, встречается редко. Поэтому команды PEEK и POKE обычно считаются устаревшими. Термины "peek" и "poke" иногда используются в неформальной речи программистов для обозначения доступа к памяти в целом.

16- и 32-битные версии

Поскольку большинство ранних домашних компьютеров использовали 8-битные процессоры, значения PEEK или POKE находятся в диапазоне от 0 до 255. Для установки или чтения 16-битного значения на таких машинах требуются две команды, например, для чтения 16-битного целого числа по адресу A, а затем для записи 16-битного целого числа V по адресу A. Некоторые версии BASIC, даже на 8-битных машинах, имеют команды для чтения и записи 16-битных значений из памяти. BASIC XL для 8-битных компьютеров Atari использует префикс "D" (от "double" – двойной): DPEEK и DPOKE. Восточногерманские "малые компьютеры" KC85/1 и KC87 используют обозначения DEEK и DOKE. Sinclair QL имеет PEEK W и POKE W для 16-битных значений и PEEK L и POKE L для 32-битных значений. ST BASIC для Atari ST использует традиционные имена, но позволяет определять 8/16/32-битные сегменты памяти и адреса, определяющие размер данных. Для одноплатных компьютеров на базе ARM была разработана утилита peekpoke для командной строки Linux. peekpoke – это инструмент командной строки Linux для чтения и записи в системную память. Его основное назначение – взаимодействие с аппаратными периферийными устройствами из пользовательского пространства: чтение или изменение состояния, а также дамп содержимого регистров.

Общее применение POKE

"POKE" иногда используется для обозначения любых прямых манипуляций с содержимым памяти, а не только через BASIC, особенно среди тех, кто начинал изучать программирование на 8-битных микрокомпьютерах конца 1970-х – начала 1980-х годов. BASIC часто был единственным доступным языком на этих машинах (на домашних компьютерах он обычно был встроен в ROM), и поэтому самым очевидным и простым способом программирования на машинном языке было использование BASIC для записи значений машинных кодов непосредственно в память с помощью команды POKE. Подобное низкоуровневое программирование обычно было вызвано отсутствием доступа к ассемблеру. Примером обобщенного использования POKE и PEEK является Visual Basic для Windows, где DDE можно реализовать с помощью ключевого слова LinkPoke.