汇编语言指令基础——串操作指令

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

MOVS ( MOVe String) 串传送指令

MOVB         //字节串传送    DF=0, SI = SI + 1 , DI = DI + 1DF = 1 , SI = SI - 1 , DI = DI - 1

MOVW        //字串传送     DF=0, SI = SI + 2 , DI = DI + 2DF = 1 , SI = SI - 2 , DI = DI - 2

执行操作:[DI] = [SI] ,将位于DS段的由SI所指出的存储单元的字节或字传送到位于ES段的由DI 所指出的存储单元,再修改SIDI, 从而指向下一个元素.

在执行该指令之前,必须预置SIDI的初值,STDCLD设置DF.

MOVS    DST , SRC    //同上,不常用,DSTSRC只是用来用类型检查,并不允许使用其它寻址方式来确定操作数.

1.目的串必须在附加段中,即必须是ES:[DI]

2.源串允许使用段跨越前缀来修饰,但偏移地址必须是[SI].

 

STOS (STOre into String) 存入串指令

STOS    DST

STOSB         //存放字节串   ( DI ) = AL

STOSW        //存放字串     ( DI ) = AX

执行品作:把ALAX中的内容存放由DI指定的附加段的字节或字单元中,并根据DF值修改及数据类型修改DI的内容.

1.执行该指令之前,必须把要存入的数据预先存入AXAL中,必须预置DI的初值.

2.DI所指向的存储单元只能在附加段中,即必须是ES:[DI]

 

 

LODS ( LOaD from String ) 从串取指令

LODS    SRC

LODSB         //从字节串取    AL=(SI)

LODSW        //从字串取      AX= (SI±1) (SI)

执行操作:把由SI指定的数据段中字节或字单元的内容送入AL或AX中,并根据DF值及数据类型修改SI的内容.

1.在执行该指令之前,要取的数据必须在存储器中预先定义(用DBDW),必须预置SI的初值.

2.源串允许使用段超越前缀来改变数据存储的段区.

 

 

REP (REPeat)重复操作前缀

REP    String Primitive //其中:String Primitive可为MOVS,STOSLODS指令

执行操作:使REP前缀后的串指令重复执行,每执行一次CX=CX-1,直至CX=0时退出REP.

 

方向标志设置

CLD (CLear Direction flag) 清除方向标志指令

CLD

执行操作:令DF=0, 其后[SI],[DI]执行增量操作

 

STD (SeT Direction flag) 设置方向标志指令

STD

执行操作:令DF=1, 其后[SI],[DI]执行减量操作

 

 

CMPS (CoMPare String) 串比较指令

CMPS       SRC , DST

CMPSB            //字节串比较   (SI)-(DI)

CMPSW          //字串比较     (SI+1)(SI) - (DI+1)(DI)

执行操作:把由SI指向的数据段中的一个字节或字与由DI指向的附加段中的一个字节或字相减,不保留结果,只根据结果置标志位.

 

SCAS (SCAn String ) 串扫描指令

SCAS        DST

SCASB

SCASW

执行操作:把AX或AL的内容与由DI指向的在附加段中的一个字节或字相减,不保留结果,根据结果置标志位.

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

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