logo
Методичка

2.3.4 Непосредственно заданные операнды

Во многих командах используется непосредственно заданный операнд (константа). Например, команде MOV АХ, 1 соответствует машинный код B80100. Давайте разберемся, как компилятор ассемблера преобразовывает эту команду в машинный код. В системе команд процессоров Intel предусмотрена команда MOV, которая загружает непосредственно заданный операнд длиной в слово в один из регистров общего назначения. Её машинный код выглядит так: B8 + rw dw, где rw обозначает код регистра (число 0-7), который добавляется к базовому коду операции B8, a dw - это непосредственно заданный операнд длиной в слово (его первый байт находится по младшему адресу). Из таблицы 2.8 мы знаем, что код регистра АХ равен 0, поэтому rw = 0, и первый байт команды равен B8. Непосредственно заданный операнд равен 0001; его байты помещаются в команду в обратном порядке. Следовательно, ассемблер сгенерирует такой машинный код: B8 01 00.

Давайте теперь рассмотрим команду MOV BX, 1234h. Из таблицы 2.8 мы знаем, что код регистра ВХ равен 3, значит, код операции такой команды будет равен B8 + 3 = BB. Осталось записать байты константы 1234h в обратном порядке: 34 12. Следовательно, ассемблер сгенерирует такой машинный код: BB 34 12.