ألق نظرة خاطفة واضغط

PEEK و POKE في السطر 100 من برنامج Commodore Basic على جهاز CBM 3016

في مجال الحوسبة ، تُستخدم أوامر PEEK وPOKE في بعض لغات البرمجة عالية المستوى للوصول إلى محتويات خلية ذاكرة محددة يُشار إليها بعنوانها . يُعيد الأمر PEEK البايت الموجود في عنوان الذاكرة المحدد. [ 1 ] بينما يُعيّن الأمر POKE البايت الموجود في العنوان المحدد. [ 2 ] نشأت هذه الأوامر مع برامج مراقبة لغة الآلة ، مثل برنامج DECsystem-10 . [ 3 ] وترتبط هذه الأوامر بشكل خاص بلغة البرمجة BASIC ، على الرغم من أن بعض اللغات الأخرى، مثل Pascal و COMAL، تحتوي أيضًا على هذه الأوامر. وتُشابه هذه الأوامر في وظيفتها المؤشرات في لغة C وبعض لغات البرمجة الأخرى.

يُعدّ Altair BASIC من أوائل المراجع لهذه الأوامر في لغة BASIC، إن لم يكن أقدمها على الإطلاق . [ 4 ] صُممت أوامر PEEK وPOKE في أنظمة الحوسبة الشخصية المبكرة لأغراض متنوعة، لا سيما لتعديل سجلات الأجهزة الخاصة المُرتبطة بالذاكرة للتحكم في وظائف مُحددة للحاسوب، مثل وحدات الإدخال/الإخراج الطرفية. كما قد يستخدمها المبرمجون لنسخ البرامج أو حتى للتحايل على الغرض من برنامج مُعين (مثل التلاعب ببرنامج لعبة للسماح للمستخدم بالغش). أما اليوم، فمن النادر التحكم في ذاكرة الحاسوب على هذا المستوى المنخفض باستخدام لغة برمجة عالية المستوى مثل BASIC. ولذلك، يُنظر إلى مفهومي أوامر PEEK و POKE عمومًا على أنهما قديمان.

تُستخدم مصطلحات "peek" و "poke" أحيانًا بشكل عامي في برمجة الكمبيوتر للإشارة إلى الوصول إلى الذاكرة بشكل عام.

صيغة العبارة

عادةً ما يتم استدعاء وظيفة PEEK وأوامر POKE على النحو التالي، إما في الوضع المباشر (يتم إدخالها وتنفيذها عند موجه BASIC ) أو في الوضع غير المباشر (كجزء من برنامج ):

integer_variable = PEEK ( address )عنوان POKE ، القيمة

قد تحتوي معلمات العنوان والقيمة على تعابير ، شريطة أن تتوافق هذه التعابير مع عناوين أو قيم ذاكرة صالحة، على التوالي. العنوان الصالح في هذا السياق هو عنوان ضمن نطاق عناوين الحاسوب ، بينما القيمة الصالحة هي (عادةً) قيمة غير مُوقَّعة بين الصفر وأقصى عدد غير مُوقَّع يمكن أن تحتويه أصغر وحدة قابلة للعنونة (خلية ذاكرة).

خلايا الذاكرة وسجلات الأجهزة

قد تشير عناوين المواقع التي يتم الوصول إليها عبر أوامر POKE أو PEEK إلى خلايا ذاكرة عادية، أو إلى سجلات أجهزة مُرتبطة بالذاكرة لوحدات الإدخال/الإخراج أو رقائق الدعم مثل رقائق الصوت ورقائق الرسومات، أو حتى إلى سجلات مُرتبطة بالذاكرة لوحدة المعالجة المركزية نفسها (مما يُتيح تنفيذ برامج قوية لمراقبة لغة الآلة وأدوات تصحيح الأخطاء /المحاكاة). كمثال على مخطط تحكم في رقاقة دعم مُعتمد على أوامر POKE، يتم توجيه أمر POKE التالي إلى سجل مُحدد في رقاقة الرسومات VIC-II المُدمجة في جهاز Commodore 64 ، مما سيؤدي إلى تحويل حدود الشاشة إلى اللون الأسود.

بوك 53280 ، 0

مثال مشابه من أجهزة كمبيوتر أتاري ذات 8 بت يطلب من برنامج تشغيل شاشة ANTIC قلب جميع النصوص رأسًا على عقب:

بوك 755 ، 4

نظراً للاختلافات بين الأجهزة، وأهمية مواقع الذاكرة الثابتة وفائدتها، فقد كانت "خرائط الذاكرة" لمختلف الأجهزة وثائق بالغة الأهمية. ومن الأمثلة على ذلك خريطة أتاري ، التي تبدأ من الموقع صفر وترسم خريطة كاملة لمساحة العناوين البالغة 64 كيلوبايت، موقعاً تلو الآخر.

PEEK و POKE في لغات BASIC الأخرى

قدمت شركة نورث ستار كمبيوترز ، وهي شركة توريد من أوائل ثمانينيات القرن الماضي، لهجتها الخاصة من لغة بيسك مع نظام التشغيل إن إس دوس . ونظرًا لقلقها من المشاكل القانونية المحتملة، أعادت تسمية الأوامر EXAM. كما كانت هناك لهجات أخرى من لغة بيسك تستخدم الكلمات المحجوزة بدلاً من ذلك.FILLMEMRMEMW

لم تتضمن لغة BBC BASIC ، المستخدمة على أجهزة BBC Micro وغيرها من أجهزة Acorn Computers ، الكلمتين المفتاحيتين PEEK و POKE، بل استخدمت رمز علامة الاستفهام (؟)، المعروف باسم query في BBC BASIC، لكلتا العمليتين، كدالة وأمر. على سبيل المثال:

> DIM W% 4 : REM حجز 4 بايتات من الذاكرة، ويشير إليها المتغير الصحيح W% > ? W% = 42 : REM تخزين الثابت 42؛ وهو ما يعادل 'POKE W%, 42' > PRINT ? W% : REM طباعة البايت الذي يشير إليه W%؛ وهو ما يعادل 'PRINT PEEK(W%)' 42

يمكن استخدام أوامر POKE و PEEK لقراءة القيم ذات 32 بت باستخدام علامة التعجب (!)، والمعروفة باسم pling ، مع وضع البايت الأقل أهمية أولاً ( little-endian ). بالإضافة إلى ذلك، يمكن إزاحة العنوان بتحديد query أو pling بعد العنوان، ثم إضافة قيمة الإزاحة.

> ! W% = &12345678 : REM علامة العطف (&) تحدد النظام الست عشري > PRINT ~ ? W% , ~ W% ? 3 : REM علامة المد (~) تطبع بالنظام الست عشري 78 12

يمكن قراءة سلاسل النصوص باستخدام علامتي PEEK و POKE بطريقة مماثلة باستخدام علامة الدولار ($). تُعلّم نهاية السلسلة بحرف إرجاع السطر ( و 0D في ASCII )؛ وعند قراءتها مرة أخرى، لا يُعاد هذا الحرف. لا يمكن استخدام الإزاحات مع علامة الدولار.

> DIM S% 20 : REM حجز 20 بايت من الذاكرة التي يشير إليها S% > $ S% = "MINCE PIES" : REM تخزين السلسلة 'MINCE PIES'، منتهية بـ &0D > PRINT $( S% + 6 ) : REM استرجاع السلسلة، باستثناء مُنهي &0D، بدءًا من S% + 6 بايت

إصدارات 16 بت و 32 بت

بما أن معظم أجهزة الكمبيوتر المنزلية المبكرة كانت تستخدم معالجات 8 بت، فإن قيم PEEK أو POKE تتراوح بين 0 و255. يتطلب تعيين أو قراءة قيمة 16 بت على هذه الأجهزة أمرين، مثل قراءة عدد صحيح صغير النهاية 16 بت في العنوان A، متبوعًا بتخزين عدد صحيح 16 بت V في العنوان A.PEEK(A)+256*PEEK(A+1)POKEA,VPOKEA+1,V/256

تحتوي بعض لغات BASIC، حتى على أجهزة 8 بت، على أوامر لقراءة وكتابة قيم 16 بت من الذاكرة. تستخدم لغة BASIC XL لأجهزة أتاري 8 بتDPEEK البادئة "D" (اختصارًا لـ "double"): و DPOKE. ويُطلق عليها في أجهزة الكمبيوتر الألمانية الشرقية "Kleincomputer" KC85/1 وKC87 اسم DEEKو DOKE. [ 5 ]

يحتوي جهاز Sinclair QLPEEK_W على POKE_Wخيارات للقيم ذات 16 بت وخيارات PEEK_Lأخرى POKE_Lللقيم ذات 32 بت. أما لغة ST BASIC الخاصة بجهاز Atari ST فتستخدم الأسماء التقليدية، ولكنها تسمح بتحديد قطاعات ذاكرة ذات 8/16/32 بت وعناوين تحدد حجمها.

تم تطوير أداة سطر أوامر لينكس peekpoke[ 6 ] خصيصًا لأجهزة الكمبيوتر أحادية اللوحة التي تعمل بمعالجات ARM . peekpokeوهي أداة سطر أوامر لينكس تُستخدم لقراءة وكتابة البيانات من ذاكرة النظام. وتتمثل وظيفتها الرئيسية في التواصل مع الأجهزة الطرفية من مساحة المستخدم: لقراءة حالة النظام أو معالجتها، ولتفريغ سجلات النظام.

استخدام البوكيمونات كغش

في سياق ألعاب العديد من أجهزة الكمبيوتر ذات 8 بت، كان بإمكان المستخدمين تحميل الألعاب إلى الذاكرة، وقبل تشغيلها، تعديل عناوين ذاكرة محددة للغش ، والحصول على عدد غير محدود من الأرواح، أو الحصانة، أو الاختفاء، وما إلى ذلك. وكانت هذه التعديلات تُجرى باستخدام أوامر POKE. كما سمحت أجهزة Commodore 64 و ZX Spectrum و Amstrad CPC للاعبين الذين يمتلكون إحدى الخراطيش المناسبة (مثل Action Replay أو Multiface ) بتجميد البرنامج قيد التشغيل، وإدخال أوامر POKE، ثم استئناف اللعب. لكن في العادة، كان يتم إدخال أمر POKE مع مُحمِّل BASIC، والذي عند تشغيله، يقوم بتحميل اللعبة وإدخال أمر POKE أثناء التحميل. وكانت أوامر POKE هذه من الميزات الشائعة التي تُنشر في أقسام النصائح والغش في مجلات الكمبيوتر في ذلك الوقت.

على سبيل المثال، في لعبة Knight Lore لجهاز ZX Spectrum ، يمكن تحقيق المناعة باستخدام الأمر التالي: [ 7 ]

بوك 47196 ، 201

في هذه الحالة، تتوافق القيمة 201 مع تعليمات RET ، [ 8 ] بحيث تعود اللعبة من روتين فرعي مبكرًا قبل تشغيل اكتشاف التصادم .

نشرت مجلات مثل "يور سنكلير" قوائم برموز "بوك" هذه للألعاب. وكانت هذه الرموز تُحدد عادةً عن طريق الهندسة العكسية لرمز الآلة لتحديد عنوان الذاكرة الذي يحتوي على القيمة المطلوبة المتعلقة، على سبيل المثال، بعدد الأرواح، أو اكتشاف التصادمات، وما إلى ذلك. [ 9 ]

يُعدّ استخدام غش "POKE" أكثر صعوبة في الألعاب الحديثة، إذ تتضمن العديد منها إجراءات مضادة للغش أو حماية من النسخ تمنع تعديل مساحة ذاكرة اللعبة. وتفرض أنظمة التشغيل الحديثة آليات حماية الذاكرة الافتراضية لمنع وصول البرامج الخارجية إلى الذاكرة غير المشتركة (على سبيل المثال، جداول صفحات منفصلة لكل تطبيق، وبالتالي مساحات ذاكرة غير قابلة للوصول).

الاستخدام العام لـ POKE

يُستخدم مصطلح "POKE" أحيانًا للإشارة إلى أي معالجة مباشرة لمحتويات الذاكرة، وليس فقط عبر لغة BASIC، خاصةً بين من تعلموا الحوسبة على الحواسيب الصغيرة ذات 8 بت في أواخر السبعينيات وأوائل الثمانينيات. كانت BASIC غالبًا اللغة الوحيدة المتاحة على تلك الأجهزة (في الحواسيب المنزلية ، كانت عادةً موجودة في ذاكرة القراءة فقط ROM )، ولذلك كانت الطريقة الأبسط والأكثر وضوحًا للبرمجة بلغة الآلة هي استخدام BASIC لـ POKE لنقل قيم رموز العمليات إلى الذاكرة. كان تنفيذ الكثير من البرمجة منخفضة المستوى كهذه ناتجًا في الغالب عن عدم توفر مُجمِّع .

ومن الأمثلة على الاستخدام العام لـ POKE و PEEK هو في Visual Basic لنظام التشغيل Windows ، حيث يمكن تحقيق DDE باستخدام الكلمة المفتاحية LinkPoke .

انظر أيضاً

مراجع

  1. "PEEK" . مستشار مايكروسوفت كويك بيسك 4.5 . مايكروسوفت. 1990. مؤرشف من الأصل بتاريخ 16-05-2011 . تم الاطلاع عليه بتاريخ 28-12-2007 .
  2. "POKE" . مستشار مايكروسوفت كويك بيسك 4.5 . مايكروسوفت. 1990. مؤرشف من الأصل بتاريخ 16-05-2011 . تم الاسترجاع بتاريخ 28-12-2007 .
  3. "ما هو أقدم مرجع لـ PEEK و POKE و USR؟" . مؤرشف من الأصل في 14 أغسطس 2020. تم الاطلاع عليه في 15 أغسطس 2020 .
  4. دليل مرجعي لبرنامج Altair 8800 BASIC، 1975 ، الصفحة 68 من ملف PDF
  5. ^ كونيل، كلاوس (1987) [1986]. "4. الحواسيب الصغيرة - Eigenschaften und Möglichkeiten" [ 4. الحواسيب الصغيرة - الخصائص والإمكانيات ] . في إرليكامبف، راينر؛ مونك، هانز يواكيم (محرران). Mikroelektronik in der Amateurpraxis [ الإلكترونيات الدقيقة للهواة العمليين ] (باللغة الألمانية). المجلد. 3 (1 طبعة). برلين: Militärverlag der Deutschen Demokratischen Republik ، لايبزيغ. ص 218، 232، 236. ISBN    3-327-00357-27469332.
  6. peekpoke https://github.com/apritzel/peekpoke
  7. ستيفن غودوين (2023). 20 غوتو 10: 10101001 حقائق عن أجهزة الكمبيوتر القديمة . ISBN 978-1800182745.
  8. ستيفن فيكرز؛ روبن برادبير (1982). برمجة سيكلير زد إكس سبكتروم بيسك . ص 197. 
  9. انظر على سبيل المثال، "بوكيراما" . مجلة سينكلير . العدد 66. يونيو 1991.