PEEK a POKE - PEEK and POKE
![]() | tento článek potřebuje další citace pro ověření.Říjen 2015) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) ( |

v výpočetní, PEEK a POKE jsou příkazy používané v některých programovací jazyky na vysoké úrovni pro přístup k obsahu konkrétní paměťové buňky, na kterou odkazuje adresa paměti. PEEK získá bajt umístěný na zadané adrese paměti.[1]POKE nastaví bajt paměti na zadanou adresu.[2] Tyto příkazy vznikly monitory strojového kódu tak jako DECsystem-10 monitor;[3] tyto příkazy jsou zvláště spojeny s ZÁKLADNÍ programovací jazyk, i když některé další jazyky, jako např Pascal a COMAL mít také tyto příkazy. Tyto příkazy jsou ve svých rolích srovnatelné s ukazatele v Jazyk C. a některé další programovací jazyky.
Jeden z prvních odkazů na tyto příkazy v BASIC, pokud ne nejstarší, je v Altair BASIC[4]. Příkazy PEEK a POKE byly vytvořeny v časných osobních výpočetních systémech, aby sloužily k různým účelům, zejména k úpravě speciálních mapováno do paměti hardwarové registry k ovládání určitých funkcí počítače, jako jsou vstupní / výstupní periferie. Alternativně mohou programátoři použít tyto příkazy ke kopírování softwaru nebo dokonce k obcházení záměru konkrétního softwaru (např. Manipulovat s herním programem, aby uživatel mohl podvádět). Dnes je neobvyklé ovládat paměť počítače na tak nízké úrovni pomocí jazyka na vysoké úrovni, jako je BASIC. Jako takové pojmy PEEK a STRČIT příkazy jsou obecně považovány za zastaralé.
Podmínky nahlédnout a strčit jsou někdy hovorově používány v programování počítače k označení přístupu do paměti obecně.
Syntaxe výpisu
Funkce PEEK a příkazy POKE jsou obvykle vyvolány následujícím způsobem, buď v přímý režim (zadáno a provedeno v BASIC výzva ) nebo v nepřímém režimu (jako součást a program ):
integer_variable=PEEK(adresa)STRČITadresa,hodnota
The adresa a hodnota parametry mohou obsahovat komplex výrazy, pokud hodnocené výrazy odpovídají platným adresám paměti nebo hodnotám. Platný adresa v této souvislosti je adresa uvnitř počítače adresní prostor, zatímco platný hodnota je (obvykle) nepodepsaná hodnota mezi nulou a maximálním nepodepsaným počtem, který může obsahovat minimální adresovatelná jednotka (paměťová buňka).
Paměťové buňky a hardwarové registry
Umístění adres, které jsou POKEd nebo PEEKed, mohou odkazovat buď na běžné paměťové buňky, nebo na mapovaná paměť hardwarové registry z I / O jednotky nebo podpůrné čipy jako zvukové čipy a video grafické čipy, nebo dokonce do paměti mapované registry samotného CPU (což činí softwarové implementace výkonnými monitory strojového kódu a ladění / možné simulační nástroje). Jako příklad schématu řízení podpůrného čipu poháněného POKE je následující příkaz POKE zaměřen na konkrétní registr Commodore 64 je vestavěný VIC-II grafický čip, který způsobí, že okraj obrazovky zčerná:
STRČIT53280,0
Podobný příklad z 8bitová rodina Atari říká ANTIC ovladač displeje k převrácení veškerého textu vzhůru nohama:
STRČIT755,4
Rozdíl mezi stroji a důležitost a užitečnost pevných paměťových míst znamenal, že „paměťové mapy“ různých strojů byly důležitými dokumenty. Příkladem je Mapování Atari, který začíná na nule a mapuje celou 64 kB paměť 8bitových systémů Atari podle umístění.
PEEK a POKE v jiných ZÁKLADECH
North Star Computers, prodejce od začátku 80. let, nabídl svým NSDOS svůj vlastní dialekt jazyka BASIC operační systém. Z obavy o možné právní problémy přejmenovali příkazy ZKOUŠKA
a VYPLNIT
.[Citace je zapotřebí ] Existovaly také ZÁKLADNÍ dialekty, které místo toho používaly vyhrazená slova MEMW a MEMR.
BBC BASIC, použitý na BBC Micro a další Počítače žaludů stroje, klíčová slova neobsahovala PEEK a STRČIT ale použil otazník symbol (?), známý jako dotaz v BBC BASIC, pro obě operace, jako funkce a příkaz. Například:
>ZTLUMITW%4:REM rezervovat 4 bajty paměti, na které ukazuje celočíselná proměnná W%>?W%=42:REM konstanta úložiště 42; ekvivalent 'POKE W%, 42'>TISK?W%:REM vytiskne bajt, na který ukazuje W%; ekvivalent 'PRINT PEEK (W%)'42
32bitové hodnoty lze POKEd a PEEKed pomocí vykřičník symbol (!), známý jako prosit, s nejméně významným bajtem jako první (malý Endian ). Adresu lze navíc vyrovnat zadáním dotazu nebo dotazu po adresu a její následování s posunem:
>!W%=&12345678:REM ampersand (&) určuje šestnáctkové číslo>TISK~?W%,~W%?3:REM vlnovka (~) tiskne šestnáctkově7812
Řetězce textu lze podobným způsobem PEEKovat a POKEd pomocí Znak dolaru ($). Konec řetězce je označen Návrat vozíku znak (& 0D v ASCII ); při zpětném čtení se tento ukončovací znak nevrací. S znakem dolaru nelze použít vyrovnání.
>ZTLUMITS%20:REM rezervovat 20 bytů paměti, na které ukazuje S%>$S%=„MINCE PIES“:REM řetězec obchodu 'MINCE PIES', ukončený & 0D>TISK$(S%+6):REM načíst řetězec, označený & 0D spuštěný na S% + 6 bajtůPIES
16 a 32bitové verze
Jako nejčasnější domácí počítače používá 8bitové procesory, hodnoty PEEK nebo POKE jsou mezi 0 a 255. Nastavení nebo čtení 16bitové hodnoty na takových počítačích vyžaduje dva příkazy, jako napříkladPEEKA+256*PEEK(A+1)
číst 16bitové celé číslo na adrese A, a STRČITA,PROTI
následován STRČITA+1,PROTI/256
a uložit 16bitové celé číslo V na adresu A.
Některé BASICy, dokonce i na 8bitových počítačích, mají příkazy pro čtení a zápis 16bitových hodnot z paměti. BASIC XL pro 8bitová rodina Atari používá předponu „D“ (pro „dvojitý“): DPEEK
a DPOKE
Říká jim východoněmecký „Kleincomputer“ KC85 / 1 a KC87 DEEK
a DOKE
.[5]
The Sinclair QL má PEEK_W
a POKE_W
pro 16bitové hodnoty a PEEK_L
a POKE_L
pro 32bitové hodnoty. ST BASIC pro Atari ST používá tradiční názvy, ale umožňuje definovat 8/16/32 bitové segmenty paměti a adresy, které určují velikost.
POKE jako cheat
V kontextu her pro mnoho 8bitových počítačů mohli uživatelé načíst hry do paměti a před jejich spuštěním upravit konkrétní adresy paměti, aby ošidit, získání neomezeného počtu životů, imunity, neviditelnosti atd. Tyto úpravy byly provedeny pomocí příkazů POKE. The Commodore 64, ZX Spectrum a Amstrad CPC také povoleno hráčům s příslušnými kazetami nebo Multiface doplněk k pozastavení běžícího programu, zadání POKE a pokračování.
Například v Rytíř Lore pro ZX Spectrum, imunity lze dosáhnout pomocí následujícího příkazu:
STRČIT47196,201
V tomto případě hodnota 201 odpovídá a Instrukce RET, aby se hra vrátila z podprogramu dříve před spuštěním Detekce kolize.
Časopisy jako např Váš Sinclair zveřejněné seznamy takových POKE pro hry. Takové kódy byly obecně identifikovány zpětným inženýrstvím strojového kódu k vyhledání adresy paměti obsahující požadovanou hodnotu, která se týkala například počtu životů, detekce kolizí atd.
Používání cheatu „POKE“ je v moderních hrách obtížnější, protože mnoho z nich obsahuje opatření proti podvádění nebo ochraně proti kopírování, která brání úpravám paměťového prostoru hry. Moderní operační systémy prosazují virtuální paměť schémata ochrany pro odepření přístupu externího programu k nesdílené paměti (například samostatné tabulky stránek pro každou aplikaci, tedy nepřístupné paměťové prostory).
Obecné použití POKE
„POKE“ se někdy používá k označení jakékoli přímé manipulace s obsahem paměti, nikoli pouze prostřednictvím jazyka BASIC, zejména u lidí, kteří se naučili práci na počítači 8-bit mikropočítače konce 70. a začátku 80. let. BASIC byl často jediným jazykem dostupným na těchto strojích (na domácí počítače, obvykle přítomné v ROM ), a tedy zřejmý a nejjednodušší způsob programování jazyk stroje bylo použít BASIC k vyzvednutí operační kód hodnoty do paměti. Dělat tolik nízkoúrovňového kódování, jako je toto, obvykle přišlo z nedostatečného přístupu k assembler.
Příklad obecného použití POKE a PEEK je v Visual Basic pro Windows, kde DDE lze dosáhnout pomocí LinkPoke klíčové slovo.
Viz také
Reference
- ^ „PEEK“. Microsoft QuickBasic 4.5 Advisor. Microsoft. 1990. Archivovány od originál dne 2011-05-16. Citováno 2007-12-28.
- ^ "STRČIT". Microsoft QuickBasic 4.5 Advisor. Microsoft. 1990. Archivovány od originál dne 2011-05-16. Citováno 2007-12-28.
- ^ „Jaký je nejstarší odkaz na PEEK, POKE a USR?“. Citováno 15. srpna 2020.
- ^ Altair 8800 BASIC Reference_Ruční 1975, Strana 68 PDF
- ^ Kühnel, Claus (1987) [1986]. „4. Kleincomputer - Eigenschaften und Möglichkeiten“ [4. Mikropočítač - vlastnosti a možnosti]. In Erlekampf, Rainer; Mönk, Hans-Joachim (eds.). Mikroelektronik in der Amateurpraxis [Mikroelektronika pro praktického amatéra] (v němčině). 3 (1. vyd.). Berlín: Militärverlag der Deutschen Demokratischen Republik , Lipsko. 218, 232, 236. ISBN 3-327-00357-2. 7469332.