汇编语言指令基础——数据传送指令

Eddy 发布于2009-12-12 11:39:41 分类: 加密解密 已浏览loading 网友评论0条 我要评论

MOV指令为双操作数指令,两个操作数中必须有一个是寄存器.

MOV DST , SRC    // Byte / Word

执行操作: dst = src

 

 

1.目的数可以是通用寄存器, 存储单元和段寄存器(但不允许用CS段寄存器).

2.立即数不能直接送段寄存器

3.不允许在两个存储单元直接传送数据

4.不允许在两个段寄存器间直接传送信息

 

PUSH入栈指令及POP出栈指令: 堆栈操作是以"后进先出"的方式进行数据操作.

PUSH   SRC    //Word

入栈的操作数除不允许用立即数外,可以为通用寄存器,段寄存器(全部)和存储器.

入栈时高位字节先入栈,低位字节后入栈.

 

POP     DST    //Word

出栈操作数除不允许用立即数和CS段寄存器外, 可以为通用寄存器,段寄存器和存储器.

执行POP   SS指令后,堆栈区在存储区的位置要改变.

执行POP SP 指令后,栈顶的位置要改变.

 

 

XCHG(eXCHanG)交换指令: 将两操作数值交换.

XCHG   OPR1, OPR2    //Byte/Word

执行操作: Tmp=OPR1       OPR1=OPR2        OPR2=Tmp

1.必须有一个操作数是在寄存器中

2.不能与段寄存器交换数据

3.存储器与存储器之间不能交换数据.

 

XLAT(TRANSLATE)换码指令: 把一种代码转换为另一种代码.

XLAT   (OPR 可选)   //Byte

执行操作: AL=(BX+AL)

指令执行时只使用预先已存入BX中的表格首地址,执行后,AL中内容则是所要转换的代码.

 

地址传送指令: LEA,LDSLES

LEA(Load Effective Address) 有效地址传送寄存器指令

LEA     REG , SRC              //指令把源操作数SRC的有效地址送到指定的寄存器中.

执行操作: REG = EAsrc

: SRC只能是各种寻址方式的存储器操作数,REG只能是16位寄存器

 

MOV     BX , OFFSET OPER_ONE 等价于 LEA     BX , OPER_ONE

MOV SP , [BX] //将BX间接寻址的相继的二个存储单元的内容送入SP中

LEA   SP , [BX] //将BX的内容作为存储器有效地址送入SP中

 

LDS(Load DS with pointer)指针送寄存器和DS指令

LDS    REG , SRC   //常指定SI寄存器。

执行操作: REG=(SRC), DS=(SRC+2)        //SRC指出的前二个存储单元的内容送入指令中指定的寄存器中,后二个存储单元送入DS段寄存器中。

 

LES (Load ES with pointer) 指针送寄存器和ES指令

LES    REG , SRC        //常指定DI寄存器

执行操作: REG=(SRC) , ES=(SRC+2) //LDS大致相同,不同之处是将ES代替DS而已.

 

标志寄存器传送指令: LAHF,SAHF,PUSHFPOPF

LAHF ( Load AH with Flags ) 标志位送AH指令

LAHF              //PSW寄存器中的低8位的状态标志(条件码)送入AH的相应位, SFD7, ZFD6......

执行操作: AH=PSW的低位字节。

 

 

SAHF ( Store AH into Flags ) AH送标志寄存器指令

SAHF               //AH寄存器的相应位送到PSW寄存器的低8位的相应位, AHD7位送SF, D6位送ZF......

执行操作: PSW的低位字节=AH

 

 

PUSHF ( PUSH the Flags) 标志进栈指令

PUSHF         //将标志寄存器的值压入堆栈顶部, 同时栈指针SP值减2

执行操作: SP=SP-1,(SP)=PSW的高8, SP=SP-1, (SP)=PSW的低8

 

 

POPF ( POP the Flags ) 标志出栈指令

POPF            //PUSHF相反, 从堆栈的顶部弹出两个字节送到PSW寄存器中, 同时堆栈指针值加2

执行操作: PSW8=(SP), SP=SP+1,   PSW8=(SP) , SP=SP+1

 

 

输入输出指令(IN,OUT)只限于使用累加器AXAL与外部设备的端口传送信息.

IN (INput)输入指令:信息从I/O通过累加器传送到CPU

IN    AL , PORT         //直接的字节输入,PORT是外设端口编号(即端口地址),只能取 00H ~ 0FFH256个端口地址.

IN    AX , PORT        //直接的字输入,AX存储连续两个端口地址PORT+1,PORT

IN    AL , DX             //间接的字节输入,端口地址范围可通过DX设置为0000H ~ 0FFFFH65536个端口地址

IN    AX , DX             //间接的字输入

 

OUT( OUTput)输出指令 :信息从CPU通过累加器传送到I/O

OUT    PORT , AL        //直接的字节输出,PORT规定与IN指令相同.

OUT    PORT , AX

OUT    DX , AL            //间接的字节输出

OUT    DX , AX

MOV   AL,05H     OUT 27H, AL    //将字节05H传送到地址27H的端口

已经有(0)位网友发表了评论,你也评一评吧!
原创文章如转载,请注明:转载自Eddy Blog
原文地址:http://www.rrgod.com/decryption/219.html     欢迎订阅Eddy Blog

关于 汇编语言  数据传送指令  的相关文章

记住我的信息,下次不用再输入 欢迎给Eddy Blog留言