Так как физический адрес ячейки памяти состоит из адреса сегмента и смещения внутри сегмента, то имеются команды перехода, которые модифицируют оба регистра CS и IP, и имеются команды перехода, которые модифицируют только регистр IP. Команды, изменяющие содержимое регистров CS и IP, называются командами межсегментного перехода, гак как изменяют текущий сегмент кода, а модифицирующие только содержимое регистра IP — команды внутрисегментного перехода, так как сегмент кода остается неизменным.
Точка, куда передается управление (адрес следующей исполняемой команды) в межсегментных переходах, обозначается как FAR_TAG (от англ. far — далеко), а во внутрисегментных переходах как NEAR_TAG (от англ. near — близко). Команды безусловного перехода разделяются на внутрисегментные и межсегментные, на прямые и косвенные. В прямых переходах адрес перехода задается непосредственно в команде, как это было для команд условных переходов. В косвенных переходах в команде задается не адрес перехода, а адрес ячейки памяти (регистра), в которой содержится адрес перехода. Команды безусловных переходов имеют следующие форматы (см. приложение): JMP SHORT_TAG — безусловный переход типа SHORT (короткий): содержимое IP устанавливается равным сумме IP и расширенного со знаком до 16 бит значения IP_INC; JMP NEAR_TAG — безусловный переход типа NEAR (внутрисегментный, близкий): содержимое IP устанавливается равным сумме IP и значения IP_INC, представленного в виде младшего IP_INC-LO и старшего IР_INС-НI байтов; JMP FAR_TAG — безусловный переход типа FAR (межсегментный, далекий); логический адрес перехода непосредственно содержится в коде команды, где IP_NEW-LO и IP_NEW-HI соответственно младший и старший байт нового содержимого IP a CS_NEW-LO и CS_NEW-HI— младший и старший байт нового содержимого CS; JMP R16/M16 (NEAR) — внутрисегментный косвенный переход: эффективный адрес перехода содержится в адресуемом слове или в регистре, определяемом способом адресации; JMP М32 (FAR) — межсегментный косвенный переход; логический адрес перехода содержится в адресуемой ячейке памяти, представляющей собой двойное cловo, причем в слове с меньшим адресом содержится смещение, в слове с большим адресом — адрес сегмента.
3.3. ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ N3
Перед выполнением работы изучите порядок ее проведения, получите индивидуальное задание и ознакомьтесь с ним.
3.3.1. ВЫЧИСЛЕНИЕ ВЫРАЖЕНИЙ.
Исследуйте особенности вычисления выражения по программе N 2 (рис. 3.9)
W. = (|X| + 1) • Y + Z — 1344)/X,
где X, Y, Z — независимые переменные, W — результат, представленный в виде двух слов: частного и остатка от деления.
1) Включите микро-ЭВМ, как описано в п. 1.2.1.
2) Введите программу на рис. 3.9 в память микро-ЭВМ, начиная с адреса 0000h:0100h (см. п. 2.2.1).
3) Для подготовки программы к выполнению занесите в регистры процессора и ячейки памяти данные, необходимые для выполнения программы (см. п. 2.2.2); для программы N 2 в сегментный регистр CS занесите начальный адрес используемого сегмента кода (OOOOh), в сегментный регистр DS начальный адрес сегмента данных (OOOOh) и, начиная с адреса 0000h:0200h, занесите числа X = — 5, Y = 37, Z = 278 (слова); проверьте правильность записи данных чтением содержимого регистров и ячеек памяти.
4) Выполните введенную ранее в память программу в пошаговом режиме (см. п.2.2.3). Проконтролируйте содержимое регистров процессора, изменяемых выполненной командой и перепишите их содержимое в отчет. Проверьте правильность работы программы вычислением результата вручную.
5) Выполните введённую ранее программу в режиме автоматического выполнения (см. п. 2.2.5), изменив исходные данные (содержимое ячеек памяти с адресами DS:200h,
DS:202h, DS:204h). Добейтесь возникновения арифметического переполнения при выполнении арифметических операций. Полученные при этом значения исходных переменных X, Y, Z и
результата W запишите в отчет. Для получения результата при переполнении заблокируйте выполнение команд условных переходов, записав вместо них в память код 90h (нет операции). Объясните полученные результаты.
