2012-01-01 1 views
0

Итак, мне нужно подключить программу, но для этого я собираюсь скопировать инструкции E8 <Pointer to Byte Array that contains other code>. Проблема в том, что когда я собираю Call 0x100, я получаю E8 FD. Мы знаем, что E8 является инструкцией вызова, поэтому FD должен быть пунктом назначения, поэтому как ассемблер принимает адресат от 0x100 до FD? Спасибо, Bradley - ImceptРасчет кода перехода на компьютерный код

+0

Что такое целевой машинный код? Нет способа «E8FD» означает «вызов 0x100» –

+0

Я открыл его в EMU8086, и да, это означает CALL 0x100. Но, возможно, я не знаю, о чем говорю. – iDomo

+0

Какой ассемблер вы используете? –

ответ

0

http://wwwcsif.cs.ucdavis.edu/~davis/50/8086 Opcodes.htm
E8 - это 16-битный относительный вызов. Так, например, E8 00 10 означает вызов адреса на ПК + 0x1000.

+0

Ваш бог, я хотел бы поблагодарить вас :) – iDomo

+0

Теперь я вижу, что его смещение от текущей CS к указателю инструкции + 1 – iDomo

3

Существует множество кодов опций перехода/вызова, а некоторые из них относительны. Я бы сказал, что вы действительно получили не E8 FD, а E8 FD FF. E8, по-видимому, является «call 16-bit relative» и 0x100 - это место, где по умолчанию размещены инструкции.

Итак, вы положили call 0x100 по адресу 0x100, а сгенерированный код «выполнил команду перехода и прыгнул -3 от фактического указателя инструкции». -3 - это потому, что сдвиг вычисляется с позиции после инструкция считывается, которая в случае E8 FD FF равна 0x103. Вот почему сдвиг, если FD FF, big-endian для 0xfffd, который является 16-битным -3.

+0

Я соглашусь, что фактические коды операций не были «E8 FD FF», потому что тогда у вас будет бесконечный цикл. –

+0

Да, это могло быть «E8 FD 00», в каком случае инструкция была поставлена ​​на адрес 0x00. Что мне кажется немного необычным, так как моя память слабо говорит мне, что 0x100 должно быть началом кода в старой DOS, но в этом случае оно может быть 0x00. Исходный адрес 'call 0x100' не был указан, поэтому я могу только догадываться. –

 Смежные вопросы

  • Нет связанных вопросов^_^