MOV指令,能实现以下操作:
- ①CPU内部寄存器之间数据的任意传送(除了码段寄存器CS和指令指针IP以外)。
- ②立即数传送至CPU内部的通用寄存器组(即AX、BX、CX、DX、BP、SP、SI、DI),给这些寄存器赋初值。
- ③CPU内部寄存器(除了CS和IP以外)与存储器(所有寻址方式)之间的数据传送,可以实现一个字节或一个字的传送。
- ④能实现用立即数给存储单元赋初值。
立即数传送
MOV CL,4 ;CL←4,字节传送
MOV DX,0FFH ;DX←00FFH,字传送 MOV SI,200H ;SI←0200H,字传送 MOV BVAR,0AH ;字节传送
;假设BVAR是一个字节变量,定义如下:BVAR DB 0 MOV WVAR,0BH ;字传送
;假设wvar是一个字变量,定义如下:wvar dw 0
寄存器传送
mov ah,al ;ah←al,字节传送
mov bvar,ch ;bvar←ch ,字节传送
mov ax,bx ;ax←bx,字传送
mov ds,ax ;ds←ax,字传送
mov [bx],al ;[bx]←al,字节传送
存储器传送
mov al,[bx] ;al←ds:[bx]
mov dx,[bp] ;dx←ss:[bp+0]
mov dx,[bp+4] ;dx←ss:[bp+4]
mov es,[si] ;es←ds:[si]
段寄存器传送
MOV [SI],DS
MOV AX,DS ;AX←DS
MOV ES,AX ;ES←AX←DS
注意:
- (1)MOV指令不能在
两个存储器
之间进行数据直接传送。 - (2)MOV指令不能在
两个段寄存器
之间进行数据直接传送。 - (3)不允许立即数传送给段寄存器 ,例如
MOV DS,100H;非法指令:立即数不能传送段寄存器
- (4)目的操作数不能为CS和IP。
其中 (1)(2) 的传送可用通用寄存器作为中介,用两条传送指令;例如:
MOV AL,AREA1
MOV AREA2,AL
非法指令主要现象: 两个操作数的类型不一致 ;无法确定是字节量还是字量操作; 两个操作数都是存储器 。
段寄存器的操作有一些限制
段寄存器属专用寄存器,对操作能力有限
- ① 目的操作数不能是立即寻址方式。
- ② 源操作数与目的操作数不能同时为存储器寻址方式,即两个内存单元之间不能直接传送数据。
- ④ 两个段寄存器之间不允许直接传送数据。 例如
MOV DS,ES;非法指令:不允许段寄存器间传送
- ⑤ 不允许给CS、IP、PSW三个寄存器直接·传送数据,即这3个寄存器的值用户无权改变。 例如
MOV CS,[SI] ;不允许使用的指令
- ⑥ 源操作数和目的操作数必须字长相等。
- ⑦ MOV指令不影响标志位。