PEEK și POKE

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

PEEK și POKE , în informatică , sunt două instrucțiuni utilizate în limbajul de programare BASIC pentru a accesa conținutul unei anumite adrese de memorie .

PEEK este o funcție care returnează valoarea stocată în celula de memorie specificată în timp ce POKE este o comandă utilizată pentru a efectua operația de scriere corespunzătoare.

Caracteristici

Adresele locațiilor instrucțiunilor POKE și PEEK se pot referi atât la celule de memorie normale, cât și la registre hardware mapate în memoria CPU, dar și la coprocesoare suplimentare, cum ar fi cipurile de sunet sau cipurile video . Un exemplu de cod care controlează un cip prin instrucțiuni POKE este următorul, care modifică unul dintre registrele MOS VIC-II ale Commodore 64 pentru a seta marginea ecranului la negru:

 ÎMPUNGERE 53280 , 0

Fiecare computer de acasă anterior computerelor compatibile IBM avea propriul model de utilizare a memoriei: programele de utilizator, datele lor, memoria video, spațiul pentru codul sistemului de operare erau adresate diferitelor zone ale memoriei. Din acest motiv, instrucțiunile PEEK și POKE nu au fost portabile de la un model la altul, iar programele au funcționat doar pe sistemele pentru care au fost scrise.

Sintaxă

Instrucțiunile pot fi apelate fie în mod direct, prin introducerea lor la interpretului prompte sau în modul, indirect, și anume în cadrul unui program de . În ambele cazuri, sintaxa lor este următoarea:

 variabile_di_destinazione = PEEK (indirizzo_di_memoria) [1]
POKE adreso_di_memoria, valoare [2]

Parametrii adresao_di_memoria și valoarea pot fi, de asemenea, expresii suficient de complexe încât rezultatul lor este o adresă de memorie sau o valoare nevalidă. O adresă validă este o adresă care se încadrează în spațiul de adresă CPU al computerului , adică setul de adrese pe care CPU le poate gestiona direct. O valoare validă este o valoare care poate fi stocată într-o celulă de memorie, care este cea mai mică unitate de stocare permisă de tipul de memorie utilizat.

De exemplu, un computer tipic de acasă de la începutul anilor 1980 se baza în general pe procesoare pe 8 biți, cum ar fi Zilog Z80 sau MOS 6502 . Aceste procesoare aveau, în general, un spațiu de adrese de 16 biți cu care puteau adresa maxim 64 de kilobiți de memorie, fie RAM sau ROM : unitatea acestor memorii este octetul . În acest caz, intervalul de valori permise pentru memory_address variază de la 0 la 65.535 (2 16 -1), în timp ce valoarea poate varia de la 0 la 255 (2 8 -1).

Utilizare în jocuri video

În computerele de acasă pe 8 biți, cel mai obișnuit mod de a porni jocuri video a fost încărcarea acestora în memorie dintr-o casetă și apoi rularea lor. Prin urmare, practica de a modifica codul jocului înainte de lansarea sa a devenit larg răspândită pentru a obține avantaje precum vieți infinite, invizibilitate, imunitate și multe altele. Aceste trucuri au fost obținute în general prin recurgerea la modificarea anumitor locații de memorie ale codului jocului prin utilizarea comenzii POKE . Existau și cartușe pentru Commodore 64, ZX Spectrum și Amstrad CPC care vă permiteau să „înghețați” jocul care rulează, să modificați codul și să reluați execuția.

De exemplu, în Knight Lore pentru ZX Spectrum imunitatea ar putea fi obținută prin introducerea următoarei comenzi:

 ÎMPUNGERE 47196 , 201

În acest caz, valoarea 201 corespunde instrucțiunii în limbajul mașinii RET , care face ca porțiunea de cod care controlează coliziunile ieșirii jucătorului în avans, împiedicând astfel jucătorul să moară. Mai multe reviste din industrie au publicat liste ale acestor POKE pentru jocuri, obținute de obicei prin inginerie inversă a codului de titlu pentru a identifica locațiile de memorie utilizate pentru stocarea datelor, cum ar fi numărul de vieți sau detectarea coliziunilor.

Utilizarea POKE bazate pe POKE a devenit din ce în ce mai dificilă din cauza apariției sistemelor de protecție împotriva copierii sau a sistemelor de prevenire a modificărilor de cod. Jocurile pentru computerele moderne fac această practică aproape imposibilă, deoarece sistemele de operare implementează scheme de protecție a memoriei virtuale pentru a împiedica accesul programelor externe în zona de memorie atribuită unei anumite aplicații.

Notă

  1. ^ Sintaxa funcției PEEK , la qbasicnews.com . Adus 20-11-2010 (Arhivat din original la 16 mai 2011) .
  2. ^ Sintaxa comenzii POKE , la qbasicnews.com . Adus 20-11-2010 (Arhivat din original la 16 mai 2011) .

Bibliografie

Elemente conexe

Informatică Portal IT : accesați intrările Wikipedia care se ocupă cu IT