ASM - 指令01 MOV

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]alds:[bx] 
mov dx,[bp]dxss:[bp+0] 
mov dx,[bp+4]dxss:[bp+4] 
mov es,[si]esds:[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指令不影响标志位。

猜你喜欢

转载自blog.csdn.net/qq_36148847/article/details/79737026
ASM
今日推荐