Введение
Команды в некоторых языках программирования высокого уровня, альбом «Белый город».
the White Town album
В вычислительной технике PEEK и POKE — это команды, используемые в некоторых языках программирования высокого уровня для доступа к содержимому конкретной ячейки памяти, адресуемой по её адресу. PEEK извлекает байт, расположенный по указанному адресу памяти, а POKE записывает байт в указанную ячейку памяти. Эти команды впервые появились в мониторах машинного кода, таких как монитор DECsystem 10, и особенно тесно связаны с языком программирования BASIC, хотя они также присутствуют в других языках, таких как Pascal и COMAL. По своей роли эти команды сопоставимы с указателями в языке C и некоторых других языках программирования. Одно из самых ранних, если не самое первое, упоминание этих команд в BASIC встречается в Altair BASIC. Команды PEEK и POKE были разработаны для ранних персональных компьютеров для решения различных задач, особенно для изменения специальных аппаратных регистров, отображенных в память, чтобы управлять определенными функциями компьютера, такими как устройства ввода-вывода. Кроме того, программисты могли использовать эти команды для копирования программного обеспечения или даже для обхода логики работы программы (например, для изменения игровой программы, чтобы позволить пользователю жульничать). Сегодня непосредственный доступ к памяти компьютера на таком низком уровне с использованием языка высокого уровня, как BASIC, встречается редко. Поэтому команды PEEK и POKE обычно считаются устаревшими. Термины "peek" и "poke" иногда используются в неформальной речи программистов для обозначения доступа к памяти в целом.
these commands are particularly associated with the BASIC programming language, though some other languages such as Pascal and COMAL also have these commands. These commands are comparable in their roles to pointers in the C language and some other programming languages. One of the earliest references to these commands in BASIC, if not the earliest, is in Altair BASIC. The PEEK and POKE commands were conceived in early personal computing systems to serve a variety of purposes, especially for modifying special memory mapped hardware registers to control particular functions of the computer such as the input/output peripherals. Alternatively programmers might use these commands to copy software or even to circumvent the intent of a particular piece of software (e. g. manipulate a game program to allow the user to cheat). Today it is unusual to control computer memory at such a low level using a high level language like BASIC. As such the notions of PEEK and POKE commands are generally seen as antiquated. The terms peek and poke are sometimes used colloquially in computer programming to refer to memory access in general.
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.