Data movement instruction
MOV
1.REG,IMM/REG/MEM/SEG
MEM,REG/IMM/SEG *无 MOV MEM,MEM
SEG,REG16/MEM16
*无 IMM 作为目的操作数的,目的操作数是存储地址
*SEG:16bit不变
2.无:
MEM,MEM
SEG,IMM
MOV指令中不操作FLAG
目的操作数中无 IP(instruction pointer register)
目的操作数中无 CS(CODE SEGMENT)
SEG,SEG
不等宽
2个操作数dst,src
3.e.g.
MOV AX,@data
MOV DS,AX ;将定义的数据加载到指令块中,MOV DS,@data(seg,imm)错误
tip:
A BYTE 100 ;A=变量名=符号地址=内存地址MEM 直接寻址
;offset A=imm
MOV VAL1,VAL2;MOV MEM,MEM
tip:
OFFSET SEG
return OFFEST/SEG of the memory location,返回的是imm
MOV DS,OFFSET VAL1;MOV SEG,IMM
tip:
EQU =
EQU:constant =:初始化
NUMBER EQU 100
MOV NUMBER,VAL2;IMM不能做dst
MOV NUMBER,VAL2
PUSH
PUSH SRC
栈底是高地址,SP(堆栈指针从栈底向上移,高地址->低地址),stack LIFO
压栈:先移动堆栈指针,再存入数据
存储单元是8bit,所以
16bit:SP<-(SP)-2
((SP)+1,(SP))<-(src) (高地址,低地址)---(数据高位,数据低位)
POP
POP DST
SP下移(低地址->高地址)
弹栈:先弹出数据,再移动堆栈指针
DST<-((SP)+1,(SP))
SP<-(SP)+2
CS 不做dst,不能POP CS
LEA
load effective address instruction
effective address==offset address
LEA REG,MEM
tip:
(BX):表示BX的有效地址
e.g.1 寄存器
LEA DI,[BX] ;将BX的有效地址存入DI
MOV SI,[BX] ;将内存中的数据存入SI segment*10H+(BX) 中存的数据
e.g.2 符号地址
LEA DI,BUFFER ;BUFFER 的偏移地址MOV DI,BUFFER ;2000H:BUFFER中的数据
tip:
LEA 任意存储器的有效地址 寄存器&符号地址
OFFSET 符号地址
XCHG
交换register,register/memory的contents
无 XCHG MEM,MEM,
XCHG SEG,SEG/MEM/REG
宽度一致
SAHF
改变FLAG REGISTER的低8位
AH -> FLAG低8位
LAHF
FLAG低8位 -> AH