Мнемоники инструкций и директивы сообщают Турбо Ассемблеру, что нужно делать. С другой стороны, операнды указывают Турбо Ассемблеру, какие регистры, параметры, ячейки памяти и т.д. нужно связать с каждым вхождением инструкции или директивы. Инструкция MOV (перемещение данных) сама по себе ничего не означает. Чтобы указать Турбо Ассемблеру, откуда нужно извлечь перемещаемое значение и где его сохранить, необходимы операнды.
Для различных инструкций требуются 0, 1, 2 или более операндов. В действительности различными директивами может восприниматься любое число операндов, которое может уместиться на одной строке. Правильное число операндов зависит от конкретной инструкции или директивы. (В общем случае допускается три операнда.) Возможные операнды включают в себя регистры, константы, метки, переменные в памяти и текстовые строки.
Какие функции выполняет инструкция с одним операндом, достаточно очевидно: она выполняет операции с этим операндом. Например:
push ax
заносит регистр AX в стек. Инструкции без операндов еще более очевидны. Однако, что происходит в случае инструкции с двумя операндами, один из которых является источником, а остальные приемником? Например, когда процессор 8086 выполняет инструкцию:
mov ax,bx
то из какого регистра он считывает значение, и в какой регистр записывает?
Вы можете посчитать, что словесным эквивалентом данной инструкции будет «переместить содержимое AX в BX», но это не так. Вместо этого инструкция MOV помещает содержимое BX в AX. Можно использовать следующее правило: замените в инструкции MOV запятую между операндами знаком равенства, после чего она приобретет вид оператора присваивания, аналогичный языку Си (или Паскаль). При таком подходе инструкция MOV преобразуется в вид:
ax = bx;
Это позволит вам легче запомнить работу данной инструкции.
На самом деле в использовании правого операнда в качестве источника есть некоторая доля путаницы, но по крайней мере в Ассемблере процессора 8086 это так, и скоро вы это используете.
