ВУЗ:
Составители:
Рубрика:
2) Поскольку переход бывает необходимым как вперед, так и назад,
то он, как и смещение disp (смотрите главу 3), задается в машинном коде
команды – в дополнительном коде со знаком как смещение относительно
текущего адреса, находящегося в IР.
3) Для удобства написания программы в ассемблере (для чего
собственно и придуман ассемблер) в адресной части команды условного
перехода ставится не смещение, а непосредственный адрес перехода в
текущем сегменте программы, а смещение вычисляется транслятором.
Теперь все это проследим на отдельных примерах синтеза команд в
ассемблере и машинных кодах.
Пример 1 — По адресу 0100 расположить команду условного
перехода с условием: если результат 0 (Z = 1), то перейти на 010F.
Ответ:
а) в ассемблере (все просто):
JZ 010F
б) в машинном коде:
сначала составляем КОП :
1) тип команды JZ = 010 (третья строчка таблицы 7);
2) признак = 0 (таблица 7).
Теперь составляем второй байт команды — смещение (disp).
Учитывая, что размер формата команды JZ Addr — 2 байта, текущее
значение адреса команды будет следующим: IP = 0100 + 2 = 0102.
Вычитаем из конечного текущий адрес:
disp = 010F — 0102 = 000D = 13
10
< 127
10
.
Окончательно:
Address Command Assembler
0100 74 JZ 010F
0101 OD
Пример 2 —По адресу 0100 расположить команду условного
перехода с условием: если больше (без знака), то перейти на адрес 0092:
Ответ:
а) в ассемблере:
JNBE 0092
б) в машинном коде:
1) КОП:
49
2) Поскольку переход бывает необходимым как вперед, так и назад, то он, как и смещение disp (смотрите главу 3), задается в машинном коде команды – в дополнительном коде со знаком как смещение относительно текущего адреса, находящегося в IР. 3) Для удобства написания программы в ассемблере (для чего собственно и придуман ассемблер) в адресной части команды условного перехода ставится не смещение, а непосредственный адрес перехода в текущем сегменте программы, а смещение вычисляется транслятором. Теперь все это проследим на отдельных примерах синтеза команд в ассемблере и машинных кодах. Пример 1 — По адресу 0100 расположить команду условного перехода с условием: если результат 0 (Z = 1), то перейти на 010F. Ответ: а) в ассемблере (все просто): JZ 010F б) в машинном коде: сначала составляем КОП : 1) тип команды JZ = 010 (третья строчка таблицы 7); 2) признак = 0 (таблица 7). Теперь составляем второй байт команды — смещение (disp). Учитывая, что размер формата команды JZ Addr — 2 байта, текущее значение адреса команды будет следующим: IP = 0100 + 2 = 0102. Вычитаем из конечного текущий адрес: disp = 010F — 0102 = 000D = 1310 < 12710. Окончательно: Address Command Assembler 0100 74 JZ 010F 0101 OD Пример 2 —По адресу 0100 расположить команду условного перехода с условием: если больше (без знака), то перейти на адрес 0092: Ответ: а) в ассемблере: JNBE 0092 б) в машинном коде: 1) КОП: 49
Страницы
- « первая
- ‹ предыдущая
- …
- 47
- 48
- 49
- 50
- 51
- …
- следующая ›
- последняя »