2011-12-26 2 views
3

프로그램 카운터에 대해 읽는 동안 프로그램 카운터는 그 값을 직접 수정할 수있는 방법이 없다는 점에서 특별하다는 것을 알게되었습니다.프로그램 카운터를 수정하거나 액세스 할 수 있습니까?

프로그램 카운터의 내용을 액세스하거나 수정할 수있는 간접적 인 방법이 있습니까?

+1

음, 점프는 어떨까요? –

+0

그래서 PC에 액세스 할 수 있을까요? –

+3

어떤 프로세서에 대해 이야기하고 있습니까? x86? 밉스? 팔? ... –

답변

9

PC를 수정하면 실행 된 다음 명령은 새 PC 주소의 명령이됩니다. 이것은 단순히 무조건 점프이며 모든 프로세서에는 그러한 지시가 있습니다.

일반적으로 LD PC,addr 명령어가 없지만 정확하게는 JMP addr인데 그 값을 직접 수정할 수 없다는 것은 사실이 아닙니다. 그러나 코드의 실행 경로를 수정하지 않고는 값을 수정할 수 없습니다. 지정된 주소에서 실행이 계속됩니다.

대부분의 경우 스택 포인터를 새 주소를 포함하는 위치로 설정하고 RET return 명령을 호출하여 간접적으로 수행 할 수도 있습니다.

다른 프로세서와 아키텍처는 여러 가지 방식으로 다르게 동작 할 수 있습니다. 그리고 앞서 제안한 명령어 니모닉은 "일반"이며 특정 명령어 세트를 지칭하지 않습니다.

+0

+1. 조건부 점프와 마찬가지로'call' 명령이 그것을 수정한다고 덧붙일 수 있습니다. 그리고 EAX가 가리키는 메모리에 저장된 주소로 점프하기 위해'jmp eax' (EAX가 가리키는 주소로 점프)와'jmp [eax]'와 같은 일을 할 수 있습니다. 그리고 x86에서의'int' 명령은'call'과 다소 유사합니다. 프로그램 카운터를 수정하는 많은 방법. –

+1

@ 짐 : 사실입니다.하지만 무조건적인 점프는 PC를 수정하고 다른 것은 아무것도하지 않습니다. 궁극적으로 모든 인스트럭션은 단지 인크 리먼 트를 증가시키는 경우에도 PC를 수정할 수 있습니다. 나는 비 아키텍처/명령어 세트가 특정이되도록 노력하고 있었고, 어드레싱 모드의 세부 사항에 대해서는 알지 못했다. my * addr * 매개 변수는 유효한 주소 표현이나 레지스터 간접 지정을 포함하는 주소 지정 모드를 나타 내기위한 것입니다. Amit은 더 구체적인 답변을 원했던 아키텍처를 지정해야합니다. – Clifford

4

무조건 점프 명령은 PC 값을 직접 수정합니다.