Архитектура микропроцессорной системы. Состав машинных команд и основы программирования микропроцессорной системы на ассемблере. Булатов В.Н. - 49 стр.

UptoLike

Составители: 

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