由mem/reg2所指定的存储单元或寄存器中的8位数据或16位数据传送到由mem/reg1所指定的存储单元或寄存器中,但不允许从存储器传送到存储器。
② MOV mem/reg,data
将8位或16位立即数data传送到由mem/reg所指定的存储单元或寄存器中。
③ MOV reg,data
将8位或16位立即数data传送到由reg所指定的寄存器中。
④ MOV ac,mem
将存储单元中的8位或16位数据传送到累加器ac中。
⑤ MOV mem,ac
将累加器AL(8位)或AX(16位)中的数据传送到由mem所指定的存储单元中。
使用MOV指令时要注意的问题:
CS不能做目的操作数
不能直接从存储器到存储器之间数据传送
2条伪指令:
WORD PTR表示字数据类型
BYTE PTR表示字节数据类型
(2)PUSH和POP
PUSH s:将源操作数(16位)压入堆栈
POP d:将堆栈中当前栈顶两相邻单元的数据字弹出到d
压栈指令PUSH AX:将AX(16位)中的数据压入栈,AX是源操作数,栈顶是目的操作数,由(SS:SP)指向。
出栈指令POP AX:将栈顶信息弹出到AX中,AX是目的操作数,栈顶是源操作数,由(SS:SP)指向。
设当前CS=1000H,IP=0020H,SS=1600H,SP=004CH,则该指令执行时,将当前栈顶两相邻单元1604CH与1604DH中的数据字弹出并传送到CX中,同时修改堆栈指针,SP+2→SP,使之指向新栈顶1604EH。
堆栈是内存中开辟的一个段,存放需要保护的信息(数据、地址)。堆栈操作时应遵循的5点原则:
堆栈的存取操作每次必须是一个字(即2个字节)。
执行压栈指令时,总是从高位地址向低位地址存放数据,而不象内存中的其他段,总是从低地址向高地址存放;执行出栈指令时,从堆栈中弹出数据则正好相反。
堆栈段在内存中的物理地址由SS和SP或SS和BP决定,其中,SS是堆栈段寄存器,它是栈区的最低地址,称为堆栈的段地址;SP是进栈或出栈指令隐含的堆栈地址指针,它的起始值是堆栈应达到的最大偏移量,即指向栈顶地址。堆栈段的范围是SS×16至SS×16+SP 的起始值。每执行一次压栈指令,则SP-2,推入堆栈的数据放在栈顶;而每执行一次弹出指令时,则SP+2。BP寄存器用于对堆栈中的数据块进行随机存取,例如,MOV AX,[BP][SI]指令执行后,将把偏移量为BP+SI的存储单元的内容装入AX。
堆栈指令中的操作数只能是寄存器或存储器操作数,而不能是立即数。
对CS段寄存器可以使用压栈指令PUSH CX,但却不能使用POP CS这种无效指令。
(3)XCHG d,s
该指令功能是将源操作数与目标操作数(字节或字)相互对应交换位置。交换可以在通用寄存器与累加器之间、通用寄存器之间、通用寄存器与存储器之间进行。但不能在两个存储单元之间交换,段寄存器与IP也不能作为一个源或目的操作数。
(4)XLAT