Сборка около 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 ответ
Так что я продолжал копать, наткнулся на следующий ресурс:
На что я видел было что-то, что называется прыжком рядом...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.
Спасибо всем, кто смотрел на это в попытках решить мою проблему. Надеюсь, это поможет кому-нибудь когда-нибудь.