2.1. Формат машинной команды

Машинная команда состоит из нескольких байт, содержащих поле кода операции и поля операндов. Количество операндов может быть равно 0, 1 или 2. Команда может содержать также префикс, модифицирующий её действие. Архитектура микропроцессора не позволяет манипулировать с двумя операндами, находящимися в памяти. Поскольку в команде может участвовать не более одного операнда из памяти, то команда, имеющая два операнда, адресует их одним из имеющихся способов:

· регистр – регистр;

· регистр – память;

· память – регистр;

· число – регистр;

· число – память.

Рассмотрим команду пересылки

mov  операнд1, операнд2

копирующей содержимое операнда2 в операнд1. Например, команда

mov  cx, 19

записывает число 19 в регистр CX.

Операционная система имеет резидентную часть, содержащую сервисные подпрограммы, адреса которых записаны в вектора прерываний. Эти подпрограммы вызываются с помощью команды int число

Эта команда имеет один операнд и называется программным прерыванием. Операндом является число, лежащее в пределах от 0 до 255. Это число является номером сервисной подпрограммы. В тексте программы оно записывается обычно в 16-ричном виде.

Например,

int 21h

вызывает обслуживающую подпрограмму операционной системы MS DOS, имеющую десятичный номер 33. Эта обслуживающая подпрограмма может выполнять различные функции. Номер функции задается при вызове этой подпрограммы в регистре AH (старшем байте аккумулятора AX). В частности, если AH = 4ch, то команда int 21h завершает выполнение программы и возвращает управление операционной системе. Вывод строки символов, относительный адрес которой (смещение относительно начала сегмента) записан в регистр DX, производится с помощью функции 9 прерывания 21h. Таким образом, если в программе определить строку как заканчивающуюся символом  ‘$’  последовательность символов

mes   db      ‘Hello, world’, ‘$’

то вывод этой строки на экран осуществляется с помощью команд:

mov  dx, OFFSET mes

mov  ah, 9

int  21h

Здесь OFFSET mes обозначает относительный адрес строки, который, согласно определению данной сервисной подпрограммы, должен быть записан в регистр DX.