Описание процессора i8086 для программиста


Адреса переходов


Различают переходы ближние (near, внутрисегментные) и дальние (far, межсегментные). Ближний переход осуществляется всегда в пределах текущего сегмента кода, т.е. содержимое регистра CS не изменяется. Дальний переход осуществляется в другой сегмент, т.е. при его выполняется изменяется содержимое не только указателя инструкции IP, но и регистра сегмента кода CS.

Инструкции безусловного перехода JMP и перехода к подпрограмме CALL

позволяют выполнять как ближние, так и дальние переходы. При ближних переходах используется относительная или косвенная адресация, при дальних – прямая или косвенная. Инструкции условных переходов и циклов осуществляют только ближние переходы, используя относительную адресацию.

При относительной адресации

код команды содержит в своём составе 8- или 16-разрядное отклонение.

Если переход происходит (т.е. если использована инструкция CALL

или JMP

либо если в инструкции условного перехода или цикла условие перехода соблюдается), отклонение складывается с адресом команды, расположенной сразу за данной инструкцией перехода, и полученная сумма заносится в регистр указателя инструкции IP. Значение селектора сегмента кода, находящееся в регистре CS, не изменяется. Таким образом, происходит переход относительно адреса команды, расположенной за инструкцией перехода, откуда данный вид адресации и получил своё название.

Команда JMP позволяет использовать 8- и 16-разрядные отклонения, что позволяет осуществлять переход либо в пределах от –128 до +127, либо от –65536 до –65535 байтов относительно следующей инструкции в пределах одного и того же сегмента. Первые переходы носят название коротких, вторые – длинных[3]. Команда CALL

использует только 16-разрядные отклонения. Инструкции условных переходов и циклов используют 8-разрядные отклонения. Таким образом, расстояние условного перехода оказывается весьма ограниченным, что иногда приводит к повышенному расходу памяти из-за необходимости использования пары команд – условного и безусловного перехода.




- Начало -  - Назад -  - Вперед -