Команда MOV
Общий вид команды:
[Метка:] MOV Операнд1, Операнд2 [; Комментарий]
Требования к операндам:
длины операндов должны быть одинаковы и равны (1, 2, 4) байтов;
в качестве операндов можно использовать регистры всех типов (использование управляющих и отладочных регистров не рассматривается в этом курсе), адреса памяти и непосредственные данные (для исходных данных). Разрешенные и неразрешенные типы операндов команды MOV представлены в табл. 4.2
Таблица 4.2. Разрешенные и неразрешенные операнды команды MOV
2 операнд | |||||||||
1 операнд | РОН | СР | Адрес памяти | Непо-средственное данное | |||||
РОН | + | + | + | + | |||||
СР | + | - | + | - | |||||
Адрес памяти | + | + | - | + |
Как видно из таблицы, если первый операнд регистр общего назначения, то второй операнд может быть любым, для сегментного регистра запрещено использование другого сегментного регистра или непосредственного данного, запрещено использование двух адресов памяти.
Примеры команд:
Реализовать на ассемблере операторы присваивания для переменных и массивов, определенных выше.
c2 = c1; c3[1] = c1;
swap (s2[0], s2[2]); s2[1] = s3;
i1[3] = i1[0]
i1[1] = i1[2];
f2 = f1;
d2 = d1;
q = &i1[3]; *p = *q;
Реализация на ассемблере
;c2 = c1; c3[1] = c1;
MOV AL,[ c1]
MOV [c2], AL
MOV [c3+1], AL
;swap (s2[0],s2[2]); s2[1] = s3;
MOV AX, [s2+4]
MOV BX, [s2]
MOV [s2+4], BX
MOV [s2], AX
MOV AX, [s3]
MOV [s2+2], AX
;i1[3] = i1[0]; i1[1] = i1[2];
MOV EAX, [i1]
MOV [i1+12], EAX
MOV EAX, [i1+8]
MOV [i1+4], EAX
;f2 = f1;
MOV EAX, [f1]
MOV [f2], EAX
;d2 = d1;
MOV EAX, [d1]
MOV [d2], EAX
MOV EAX, [d1+4]
MOV [d2+4], EAX