PEEK 및 PICK
PEEK and POKE이 글은 검증을 위해 추가 인용문이 필요합니다. : POKE – · · · JSTOR (2015년 10월 (이 메시지 및 ) |
컴퓨팅에서 PEEK 및 POKE는 메모리 주소에 의해 참조되는 특정 메모리 셀의 내용에 액세스하기 위해 일부 고급 프로그래밍 언어에서 사용되는 명령어입니다.PEEK는 지정된 메모리주소에 [1]있는 바이트를 가져옵니다.POKE는 메모리 바이트를 지정된 [2]주소로 설정합니다.이러한 명령어는 DECsystem-10 [3]모니터 등의 머신 코드모니터로부터 발신되었습니다.이 명령어는 특히 BASIC 프로그래밍 언어와 관련되어 있습니다.단, Pascal이나 COMAL 등의 다른 언어에도 이러한 명령어가 있습니다.이러한 명령어는 C 언어 및 기타 프로그래밍 언어의 포인터와 같은 역할을 합니다.
BASIC에서 이들 명령어에 대한 가장 빠른 참조 중 하나는 Altair [4]BASIC에 있습니다.PEEK 명령어와 POKE 명령어는 특히 입력/출력 주변기기 등 컴퓨터의 특정 기능을 제어하기 위해 메모리 매핑된 특별한 하드웨어 레지스터를 수정하기 위해 초기 퍼스널 컴퓨팅 시스템에서 고안되었습니다.또는 프로그래머는 이러한 명령어를 사용하여 소프트웨어를 복사하거나 특정 소프트웨어의 의도를 회피할 수 있습니다(예를 들어 사용자가 부정행위를 할 수 있도록 게임 프로그램을 조작합니다).오늘날 BASIC과 같은 고급 언어를 사용하여 컴퓨터 메모리를 이렇게 낮은 수준으로 제어하는 것은 드문 일입니다.이와 같이 PEEK 명령어와 POKE 명령어의 개념은 일반적으로 시대에 뒤떨어진 것으로 간주됩니다.
peek와 pick이라는 용어는 컴퓨터 프로그래밍에서 일반적으로 메모리 액세스를 가리키기 위해 구어체로 사용되기도 합니다.
문의 구문
PEEK 함수 및 POKE 명령은 보통 직접 모드(BASIC 프롬프트에서 입력 및 실행) 또는 간접 모드(프로그램의 일부)에서 다음과 같이 호출됩니다.
integer_module(정수) = 훔쳐보다(주소.) 쿡쿡 찌르다 주소., 가치
address 파라미터와 value 파라미터는 각각 유효한 메모리주소 또는 값에 대응하는 한 복잡한 식을 포함할 수 있습니다.이 컨텍스트에서 유효한 주소는 컴퓨터 주소 공간 내의 주소이며, 유효한 값은 (일반적으로) 0에서 최소 주소 지정 가능 단위(메모리 셀)를 유지할 수 있는 부호 없는 최대 숫자 사이의 부호 없는 값입니다.
메모리 셀 및 하드웨어 레지스터
POKEd 또는 PEEK의 주소 위치는 일반적인 메모리 셀 또는 I/O 장치의 메모리 매핑 하드웨어 레지스터 또는 사운드 칩이나 비디오 그래픽 칩 등의 지원 칩 또는 CPU 자체의 메모리 매핑 레지스터를 참조할 수 있습니다(이것에 의해, 강력한 머신 코드 모니터와 디버깅/시무의 소프트웨어 실장이 가능하게 됩니다).사용 가능).POKE 구동 지원 칩 제어 방식의 예로서 다음 POKE 명령은 Commodore 64의 내장 VIC-II 그래픽 칩의 특정 레지스터를 가리키며, 이로 인해 화면 테두리가 검은색으로 바뀝니다.
쿡쿡 찌르다 53280, 0
Atari 8비트 패밀리의 유사한 예에서는 모든 텍스트를 뒤집어 놓도록 ATIC 디스플레이 드라이버에 지시합니다.
쿡쿡 찌르다 755, 4
머신 간의 차이, 유선 접속 메모리 위치의 중요성과 유틸리티는 다양한 머신의 "메모리 맵"이 중요한 문서임을 의미합니다.예를 들어 Atari의 매핑은 위치 0에서 시작하여 위치별로 Atari 8비트시스템 위치의 64kB 메모리 전체를 매핑합니다.
다른 베이직의 PEEK 및 PICK
1980년대 초반의 벤더인 North Star Computers는 NSDOS 운영체제와 함께 BASIC 사투리를 제공했습니다.발생할 수 있는 법적 문제를 우려하여 명령어 이름을 변경했습니다.EXAM
그리고.FILL
MEMW와 MEMR을 대신 사용하는 BASIC 사투리도 있었다.[citation needed]
BBC Micro 및 기타 Acon Computers 머신에서 사용되는 BBC BASIC은 PEEK 및 POKE 키워드를 사용하지 않았지만 BBC BASIC에서 쿼리로 알려진 물음표 기호(?)를 함수와 명령어로 사용했습니다.예를 들어 다음과 같습니다.
> DIM W% 4 : REM4바이트 메모리 예약(정수 변수 W%로 지정) > ?W% = 42 : REM저장 상수 42: 'POKE W%, 42'에 해당 > 인쇄하다 ?W% : REMW%가 가리키는 바이트를 인쇄합니다. 'PRINT PEEK(W%)'에 해당합니다. 42
32비트 값은 최하위 바이트 우선(리틀 엔디안)의 느낌표 기호(!)를 사용하여 POKEd 및 PEEK로 할 수 있습니다.또한 주소 뒤에 쿼리 또는 플링을 지정하고 오프셋을 사용하여 주소를 따라가면 주소를 오프셋할 수 있습니다.
> !W% = &12345678 : REMampersand(&)는 16진수를 지정합니다. > 인쇄하다 ~?W%, ~W%?3 : REM16진수로 인쇄하다 78 12
텍스트 문자열은 달러 기호($)를 사용하여 유사한 방법으로 PEEK 및 POKEd를 사용할 수 있습니다.문자열의 끝에는 캐리지 리턴 문자(ASCII에서는 &0D)가 표시되어 있습니다.읽을 때 이 종료 문자는 반환되지 않습니다.달러 기호와 함께 오프셋을 사용할 수 없습니다.
> DIM S% 20 : REMS%가 가리키는 20바이트의 메모리를 예약합니다. > $S% = '민스파이' : REM스토어 문자열 'MINCE PIES', &0D로 끝남 > 인쇄하다 $(S% + 6) : REM문자열 취득, &0D 터미네이터 제외, S% + 6바이트부터 시작 PI줄기
16비트 및 32비트 버전
대부분의 초기 가정용 컴퓨터는 8비트 프로세서를 사용하기 때문에 PEEK 또는 POKE 값은 0에서 255 사이입니다.이러한 시스템에서 16비트 값을 설정하거나 읽으려면 다음과 같은 두 가지 명령이 필요합니다.PEEK(A)+256*PEEK(A+1)
주소 A의 16비트 정수를 읽습니다.POKE A,V
이어서POKE A+1,V/256
주소 A에 16비트 정수 V를 저장합니다.
일부 BASIC은 8비트 머신에서도 메모리에서 16비트 값을 읽고 쓰는 명령을 가지고 있습니다.Atari 8비트패밀리의 BASIC XL에서는 D(더블) 프레픽스가 사용됩니다.DPEEK
그리고.DPOKE
동독의 "Klein computer" KC85/1 및 KC87은 이러한 시스템을DEEK
그리고.DOKE
를 클릭합니다.[5]
Sinclair QL은PEEK_W
그리고.POKE_W
16비트 값 및PEEK_L
그리고.POKE_L
32비트 값의 경우.Atari ST의 ST BASIC은 기존 이름을 사용하지만 크기를 결정하는 8/16/32비트 메모리 세그먼트 및 주소를 정의할 수 있습니다.
속임수로서의 POKE
많은 8비트 컴퓨터용 게임에서는 사용자가 게임을 메모리에 로드하고 게임을 시작하기 전에 특정 메모리 주소를 수정하여 부정행위를 하거나 무제한 생명, 면역, 투명성 등을 얻을 수 있었습니다.이러한 변경은 POKE 문을 사용하여 수행되었습니다.Commodore 64, ZX Spectrum 및 Amstrad CPC는 또한 관련 카트리지 또는 멀티페이스 추가 기능을 가진 플레이어가 실행 중인 프로그램을 정지하고 POKE를 입력한 후 재개할 수 있도록 했습니다.
예를 들어, ZX Spectrum의 Knight Lore에서는 다음 명령을 사용하여 이뮤니티를 실현할 수 있습니다.
쿡쿡 찌르다 47196,201
이 경우 값 201은 RET 명령에 대응하므로 충돌검출을 트리거하기 전에 서브루틴에서 조기에 복귀한다.
Your Sinclair와 같은 잡지는 게임용 POKE 목록을 발표했습니다.이러한 코드는 일반적으로 기계 코드를 리버스 엔지니어링하여 예를 들어 생명수, 충돌 검출 등과 관련된 원하는 값을 포함하는 메모리 주소를 찾음으로써 식별되었습니다.
현대 게임에서는 'POKE' 치트를 사용하는 것이 더 어려운데, 많은 게임에는 게임의 메모리 공간을 수정하지 못하게 하는 부정행위 방지 또는 복사 방지 조치가 포함되어 있는 경우가 많다.최신 운영 체제에서는 가상 메모리 보호 스킴을 적용하여 비공유 메모리에 대한 외부 프로그램 액세스를 거부합니다(예를 들어 애플리케이션별로 페이지 테이블이 다르므로 액세스할 수 없는 메모리 공간).
POKE의 일반적인 사용법
"POKE"는 특히 1970년대 후반과 1980년대 초반의 8비트 마이크로컴퓨터로 컴퓨팅을 배운 사람들 사이에서 BASIC을 통한 것이 아니라 메모리의 내용을 직접 조작하는 것을 가리키는 데 사용되기도 합니다.BASIC은 종종 그 기계들(일반적으로 ROM에 있는 가정용 컴퓨터)에서 사용할 수 있는 유일한 언어였기 때문에 기계어로 프로그래밍하는 가장 명확하고 간단한 방법은 BASIC을 사용하여 opcode 값을 메모리에 찔러 넣는 것이었습니다.이와 같이 매우 낮은 수준의 코딩은 보통 어셈블러에 대한 액세스 부족으로 인해 발생합니다.
POKE 및 PEEK의 일반적인 사용 예는 Windows용 Visual Basic에서 Link Poke 키워드를 사용하여 DDE를 실행할 수 있습니다.
「 」를 참조해 주세요.
레퍼런스
- ^ "PEEK". Microsoft QuickBasic 4.5 Advisor. Microsoft. 1990. Archived from the original on 2011-05-16. Retrieved 2007-12-28.
- ^ "POKE". Microsoft QuickBasic 4.5 Advisor. Microsoft. 1990. Archived from the original on 2011-05-16. Retrieved 2007-12-28.
- ^ "What is the oldest reference to PEEK, POKE, and USR?". Archived from the original on 14 August 2020. Retrieved 15 August 2020.
- ^ Altair 8800 BASIC Reference_Manual 1975, PDF 68페이지
- ^ Kühnel, Claus (1987) [1986]. "4. Kleincomputer - Eigenschaften und Möglichkeiten" [4. Microcomputer - Properties and possibilities]. In Erlekampf, Rainer; Mönk, Hans-Joachim (eds.). Mikroelektronik in der Amateurpraxis [Micro-electronics for the practical amateur] (in German). Vol. 3 (1 ed.). Berlin: Militärverlag der Deutschen Demokratischen Republik , Leipzig. pp. 218, 232, 236. ISBN 3-327-00357-2. 7469332.