2012-01-01 2 views
0

그래, 프로그램을 연결해야하지만이 작업을 수행하려면 지침 E8 <Pointer to Byte Array that contains other code>을 복사 할 예정입니다. 이 문제는 내가 E8 FD을 얻고 Call 0x100을 어셈블 할 때 E8이 호출 명령어라는 것을 알기 때문에 FD가 대상이어야하므로 어셈블러가 0x100에서 FD로 FD를 가져 오는 방법은 무엇입니까? 감사합니다, Bradley - Imcept기계어 코드 점프 대상 계산

+0

대상 기계 코드는 무엇입니까? 'E8FD'는'call 0x100'을 의미하지 않습니다. –

+0

EMU8086에서 열었습니다. 예, CALL 0x100을 의미합니다. 그러나 나는 내가 무슨 말을하는지 모른다. – iDomo

+0

어떤 어셈블러를 사용하고 있습니까? –

답변

3

점프/콜 opcode가 많으며 그 중 일부는 상대적입니다. 사실 내가 E8 FD이 아니라 E8 FD FF이 아니라고 말씀 드리고 싶습니다. E8은 "call 16-bit relative"로 보이고 0x100은 명령어가 기본적으로 배치되는 장소입니다.

주소 0x100에 call 0x100을 넣고 생성 된 코드는 "실제 점프 포인터에서 -3 점프 명령을 실행하고 점프"입니다. -3위치에서 시프트가 계산되기 때문에 인스트럭션을 읽은 후 E8 FD FF 인 경우 0x103이됩니다. 따라서 의 경우 시프트가 적용되고 0xfffd의 빅 엔디안 인 경우는 16 비트 -3입니다.

+0

실제 opcode가'E8 FD FF'가 아니라고 내기 할 것입니다. 왜냐하면 무한 루프가 있기 때문입니다. –

+0

예, 그것은'E8 FD 00'이었을 수 있습니다. 어떤 경우에 명령은 0x00 주소에 놓였습니다. 내 기억이 희미하게 말해서 0x100이 구형 DOS에서 코드의 시작 부분이되어야한다는 것을 알기 때문에 약간 이상하게 보입니다. 그러나이 경우에는 0x00이 될 수 있습니다. 'call 0x100'의 원래 주소가 지정되지 않았으므로 추측 만 할 수 있습니다. –