1 数据传送 MOV
MOV dest,src
(1)两个操作数类型(长度)相同
(2)不能同为存储操作数
(3)立即数不能作为目的操作数
(4)CS不能作为目的操作数,CS存的是段基址
(5)两个操作数不能同为段寄存器
2寻址方式
(1)直接寻址
data segment
x db 2,3
y dw 100,50
data ends
设x的偏移地址为0000H那x的第一个数据为2,第二个数据为3
2 0000H
3 0001H
100 0002H
50 0004H
MOV AL,X 等价于 MOV AL,[0000H]
其中基址又DS提供
MOV AX,x 错误指令 AX两个字节,而x为一个字节,类型不符合
MOV AX,WORD PTR x 类型PTR强制转换,将x中的第一个字节存入AL,第二个字节存入AH
(2)间接寻址
仅限于BX,BP,SI,DI
基址寄存器BX,BP
变址寄存器SI,DI
MOV AX,[BX][SI]
两个操作数不能同时为内存单元
MOV X,X+1 错误两操作数均为内存操作数
MOV X,[BX]
MOV [DI],[SI] 都是此错误
操作类型要明确
设(BX)=2000H
MOV [BX],-4 没有指明长度,无法翻译
3.LEA指令和OFFSET
LEA REG16,MEM 把源操作的偏移地址存入目的操作数中
REG16为16位通用寄存器,MEM为存储器操作数。
OFFSET 地址操作运算符
例子:
x db 1,2,3
y db 3 DUP(?)
把X开始的三个数依次传入y中
解法一:
mov al,x
mov y,al
mov al,x+1
mov y+1,al
mov al,x+2
mov y+2,al
这种方法费事,很麻烦
解法二
lea si,x
lea di,y;将x,y地址传送到si,di
mov cx,3;计数器,循环结束控制
next: mov al,[si]
mov [di],al
The article write by nealgavin