您的位置:首页 > 其它

NASM 数据传送指令

2015-11-27 21:35 323 查看
r8——任意一个8位通用寄存器AH/AL/BH/BL/CH/CL/DH/DL
r16——任意一个16通用寄存器AX/BX/CX/DX/SI/DI/BP/SP
reg——代表r8或r16
seg——段寄存器CS/DS/ES/SS
m8——一个8位存储器操作数单元(包括所有主存寻址方式)
m16——一个16位存储器操作数单元(包括所有主存寻址方式)
mem——代表m8或m16
i8——一个8位立即数
i16——一个16位立即数
imm——代表i8或i16
dest——目的操作数
src——源操作数

一、通用数据传送指令

1、传送指令 MOV (move)

指令的汇编格式:MOV DST,SRC 
指令的基本功能:(DST)<-(SRC) 将原操作数(字节或字)传送到目的地址。
指令支持的寻址方式:目的操作数和源操作数不能同时用存储器寻址方式,这个限制适用于所有指令。
指令的执行对标志位的影响:不影响标志位。
指令的特殊要求:目的操作数DST和源操作数SRC不允许同时为段寄存器;
目的操作数DST不能是CS,也不能用立即数方式。

2、进栈指令 PUSH (push onto the stack) 

出栈指令 POP (pop from the stack)

指令的汇编格式:PUSH SRC ;POP DST
指令的基本功能:PUSH指令在程序中常用来暂存某些数据,而POP指令又可将这些数据恢复。
PUSH SRC (SP)<-(SP)-2 ;(SP)<-(SRC)
POP DST (DST)<-((SP));(SP)<-(SP)
指令支持的寻址方式:push 和 pop指令不能不能使用立即数寻址方式。
指令对标志位的影响:PUSH 和 POP指令都不影响标志位。
指令的特殊要求:PUSH 和 POP指令只能是字操作,因此,存取字数据后,SP的修改必须是+2 或者 -2;
POP指令的DST不允许是CS寄存器

3、交换指令 XCHG (exchange)

汇编格式  XCHG OPR1,OPR2

可以在通用寄存器与通用寄存器或存储器之间对换数据,当不能在存储器与存储器之间对换数据。

指令支持的寻址方式:一个操作数必须在寄存器中,另一个操作数可以在寄存器或存储器中。
指令对标志位的影戏:不影响标志位。
指令的特殊要求:不允许使用段寄存器。

二、累加器专用传送指令

4、输入指令 IN (input)                                并且只能利用AL/AX寄存器与I/O端口通信。

指令的汇编格式:IN ac,port 

指令的基本功能:对8086及其后继机型的微处理机,所有I/O端口与CPU之间的通信都由输入输出指令IN和OUT来完成。IN指令将信息从I/O输入到CPU,OUT指令将信息从CPU输出到I/O端口,因此,IN和OUT指令都要指出I/O端口地址。

IN   AL,i8          ;字节输入:AL←I/O端口 i8
IN   Ax,i8          ;字输出: AL←I/O端口 i8,AH←I/O端口 i8+1
IN   AL,DX          ;字节输入:AL←I/O端口[DX]
IN   AX,DX          ;字输入:AL←I/O端口[DX],AH←I/O端口[DX+1]

指令的特殊要求:只限于在AL或AX与I/O端口之间传送信息。
传送16位信息用AX,传送8位信息用AL,这取决于外设端口的宽度。

2、输出指令OUT
OUT  i8,AL          ;字节输出:I/O端口 i8←AL
OUT  i8,AX          ;字输出:I/O端口 i8←AL,I/O端口 i8+1←AH
OUT  DX,AL          ;字节输出:I/O端口[DX]←AL
OUT  DX,AX          ;字输出:I/O端口[DX]←AL,I/O端口[DX+1]←AH

8086用于寻址外设端口的地址线为16位,可以分配的端口最多为2的16次方,共65536个(64k),端口号为0000H~FFFFH。每个端口用于传送外设的一个字节数据。寻址前256个端口时,输入输出指令可以用直接寻址,操作数i8即为端口号,其范围为00H~FFH;当寻址大于256的外设端口,只能使用DX寄存器间接寻址,其范围为0000H~FFFFH。输入输出指令还分成用AL进行的字节传送和用AX进行的字传送。实现字传送时,AL与i8或[DX]端口交换,AH与i8+1或[DX+1]端口交换。字传送实际上可以用两条字节传送实现。
对于计算机的中央处理单元cpu,只有输入IN/输出OUT指令可以从外设读取数据和向外设提供数据,由于外设种类繁多,其工作原理、数据格式、操作时序等各异,所以在处理器与外设之间还有一个协调两者数据传送的逻辑电路,称为输入输出(I/O)接口电路。处理器并不直接操纵外设,而是通过I/O接口控制外设

5、换码指令 XLAT (translate)

指令的汇编格式:XLAT opr 或 XLAT    将BX指定的缓冲区中、AL指定的位移处的数据取出赋给AL

指令的基本功能:这条指令根据AL寄存器提供的位移量,将BX指使的字节表格中的代码换存在AL中。

(AL)<-((DS)*16+(BX)+(AL))          XLAT       ;al←ds:[bx+al]

指令对标志位的影响:不影响标志位。

指令的特殊要求:所建字节表格的长度不能超过256字节,因为存放位移量的是8位寄存器AL。

opr为表格的首地址,因为opr所表示的偏移地址已存入BX寄存器,所以opr在换码指令中可有可无,有则提高程序的可读性。

三、地址传送指令

6、有效地址传送器 LEA (load effective address)

指令的汇编格式:LEA reg,src

指令的基本功能:LEA指令把源操作数的有效地址送到指定的寄存器,这个有效地址是由src选定的一种存储器寻址方式确定的。
指令支持的寻址方式:各种存储器寻址方式。
指令对标志位的影响:不影响标志位。
指令的特出要求:指令中reg不能是段寄存器;

7、指针送寄存器和DS LDS (load DS with point)

指针送寄存器和ES LES (load ES with point)

指令的汇编格式:LDS reg,src

LES reg,src

指令的基本功能:LDS和LES指令把确定内存单元位置的偏移地址送寄存器,段地址DS或ES。这个偏移地址和段地址(也称地址指针)是由src指定的两个相继字单元提供的。

LDS reg,src (reg)<-(src) (DS)<-(src+2)

LES reg,src (reg)<-(src) (ES)<-(src+2)

指令支持的寻址方式:src必须为存储器寻址方式

指令对标志位的影响:不影响标志位。

指令的特殊要求:指令中REG不能是段寄存器;

有效地址传送指令:LEA r16,mem  ;r16←mem的有效地址EA
指针传送指令    :LDS r16,mem  ;r16←mem,DS←mem+2
指针传送指令    :LES r16,mem  ;r16←mem,ES←mem+2

四、标志寄存器传送指令

8、标志寄存器的低字节送AH LAHF (load AH with FLAGS)

标志送AH指令:LAHF             ;AH←FLAGS的低字节
AH送标志指令:SAHF             ;FLAGS的低字节←AH
标志进栈指令:PUSHF            ;SP←SP-2,SS:[SP]←FLAGS
标志出栈指令:POPF             ;FLAGS←SS:[SP],SP←SP+2

指令的汇编格式:LAHF                              即状态标志位SF/ZF/AF/PF/CF分别送AH的第7/6/4/2/0  而AH的第5/3/1位任意。

指令的基本功能:(AH)<-(FLAGS)0-7

指令对标志位的影响:不影响标志位

9、AH送标志寄存器低字节 SAHF(store AH into FLAGS)

指令的汇编格式:SAHF                   SAHF将AH寄存器内容送FLAGS的低字节,即根据AH的第7/6/4/2/0位相应设置SF/ZF/AF/PF/CF标志。
指令的基本功能:(FLAGS)0-7<-(AH)
指令对标志位的影响:由装入值来确定标志位的值。

10、标志进栈 PUSHF (push the flags)        
 用来保存全部标志位

指令的汇编格式:PUSHF

指令的基本功能:(SP)<-(SP)-2 ((SP)+1,(SP))<-(FLAGS)0-15

指令对标志位的影响:不影响标志位。

11、标志出栈 POPF (pop the FLAGES)

指令的汇编格式:POPF                   POPF指令将栈顶字单元内容送标志寄存器,同时栈顶指针SP加2

指令的基本功能:(FLAGS)0-15<-((SP)+1,(SP)) (SP)<-(SP)+2

指令对标志位的影响:由装入值来确定标志位的值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: