Сборка около JMP / далеко JMP в мнемонический реальный режим

Я прошу прощения, моя проблема, вероятно, очень проста, я просто не придумываю решение. Я пытался читать статьи, учебные пособия и предыдущие вопросы по этому вопросу (пытался найти предыдущий пост на эту тему, если он есть, я, наверное, использовал неправильный словарь для поиска, и я искренне извиняюсь); Я очень новичок в этом, и я должен упустить что-то маленькое и простое.

Я пишу ассемблер, и мой код работает для ближних переходов (как показано ниже, инструкции выполняются)

org 0x500
jmp main

%include "smallFile.inc"

main:
    ;start instructions, these instructions get executed

Тем не менее, когда я включаю несколько файлов, большие файлы (следующие), это не делает прыжок, инструкции не выполняются. Я пытался поиграть с добавлением адресов перед "основной" мнемоникой, моё понимание может быть выключено. это в реальном режиме, если это помогает.

Как бы я работал в следующей ситуации?

org 0x500
jmp main

%include "smallFile1.inc"    ;couple bytes assembled and linked in
%include "smallFile2.inc"    ;couple bytes assembled and linked in
%include "smallFile3.inc"    ;couple bytes assembled and linked in
%include "LargeFile.inc"     ;couple hundred bytes assembled and linked in
%include "LargeFile2.inc"    ;couple hundred bytes assembled and linked in

main:
    ;start instructions, these are never reached

1 ответ

Решение

Так что я продолжал копать, наткнулся на следующий ресурс:

http://books.google.com/books?id=veMTOpapeZkC&pg=PT327&lpg=PT327&dq=how+to+far+jump+to+label+assembly&source=bl&ots=_jHSgrwdfG&sig=C63QURL0FlVhDv_FFrDm1oevBfs&hl=en&sa=X&ei=zOWSUbWxGcWDyAH77ICoCA&ved=0CDwQ6AEwAjgK

На что я видел было что-то, что называется прыжком рядом...jmp near в коде. Я не знаю, как я пропустил это в мои предыдущие часы поиска. Когда я ввел его в свой код, это решило мою проблему...

короткие прыжки +- 127 относительных байтов. Ближние прыжки до 2 ГБ в пределах одного сегмента. Дальние прыжки или вне сегмента; Я думаю, что я, возможно, пытался использовать дальний прыжок неправильно.

Следующее исправило мой код;

org 0x500
jmp near main

%include "smallFile1.inc"    ;couple bytes assembled and linked in
%include "smallFile2.inc"    ;couple bytes assembled and linked in
%include "smallFile3.inc"    ;couple bytes assembled and linked in
%include "LargeFile.inc"     ;couple hundred bytes assembled and linked in
%include "LargeFile2.inc"    ;couple hundred bytes assembled and linked in

main:
    ;start instructions, these instructions are now reached.

Спасибо всем, кто смотрел на это в попытках решить мою проблему. Надеюсь, это поможет кому-нибудь когда-нибудь.

Другие вопросы по тегам