mov命令类似于赋值,将src的值赋给dst.
格式:mov dest,src
操作:将src的内容移至dest,移动后src的内容还在,dest的内容被src覆盖。
一.规则
1.CS、IP的值不可以作为目标操作数(值->CS,IP X);
2.dest、src不可以同时作为存储器操作数出现(内存->内存X);
3.段寄存器不能相互转送(段->段X);
4.不能把立即数送入段寄存器(CS、DS、SS、ES)或者内存([SI],DATA,...),要用寄存器过渡。
二.常见错误:
1.
DATA DB ?
MOV [SI],DATA
解释:[SI]是内存中的值,DATA也是内存中的值。违反了规则2,不能从内存到内存。
这个语句翻译为C语言:*SI=*DATA;
需注意,DATA保存的是变量的地址,类似于指针,因此应当把DATA看作地址,而不是AX,BX一样的立即数。
改正:
MOV AX,DATA
MOV [SI],AX
2.
MOV CS,AX
MOV DS,1000H
解释:不能给CS赋值,不能把立即数送入段寄存器。
改正:
MOV AX,CS
MOV BX,1000H
MOV DS,BX
3.
MOV AX,DL
解释:MOV的操作数必须大小一致,AX为16为,DL为8位。
改正:
MOV AL,DL或MOV AX,DX
4.
DATA DW 1234H
MOV DATA,WORD PTR AH
解释:
PTR无法对寄存器进行操作,AH是寄存器。PTR只能对内存操作,例如BYTE PTR DATA.
改正:
MOV BYTE PTR DATA,AH
5.
MOV [SI],10H
解释:第四条规则。
改正:
MOV AH,10H
MOV BYTE PTR[SI],AH