MOVB //字节串传送 DF=0, SI = SI + 1 , DI = DI + 1 ;DF = 1 , SI = SI - 1 , DI = DI - 1
MOVW //字串传送 DF=0, SI = SI + 2 , DI = DI + 2 ;DF = 1 , SI = SI - 2 , DI = DI - 2
执行操作:[DI] = [SI] ,将位于DS段的由SI所指出的存储单元的字节或字传送到位于ES段的由DI 所指出的存储单元,再修改SI和DI, 从而指向下一个元素.
在执行该指令之前,必须预置SI和DI的初值,用STD或CLD设置DF值.
MOVS DST , SRC //同上,不常用,DST和SRC只是用来用类型检查,并不允许使用其它寻址方式来确定操作数.
1.目的串必须在附加段中,即必须是ES:[DI]
2.源串允许使用段跨越前缀来修饰,但偏移地址必须是[SI].
STOS (STOre into String) 存入串指令
STOS DST
STOSB //存放字节串 ( DI ) = AL
STOSW //存放字串 ( DI ) = AX
执行品作:把AL或AX中的内容存放由DI指定的附加段的字节或字单元中,并根据DF值修改及数据类型修改DI的内容.
1.在执行该指令之前,必须把要存入的数据预先存入AX或AL中,必须预置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.在执行该指令之前,要取的数据必须在存储器中预先定义(用DB或DW),必须预置SI的初值.
2.源串允许使用段超越前缀来改变数据存储的段区.
REP String Primitive //其中:String Primitive可为MOVS,STOS或LODS指令
执行操作:使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 SRC , DST
CMPSB //字节串比较 (SI)-(DI)
CMPSW //字串比较 (SI+1)(SI) - (DI+1)(DI)
执行操作:把由SI指向的数据段中的一个字节或字与由DI指向的附加段中的一个字节或字相减,不保留结果,只根据结果置标志位.
SCAS DST
SCASB
SCASW
执行操作:把AX或AL的内容与由DI指向的在附加段中的一个字节或字相减,不保留结果,根据结果置标志位.
已经有(0)位网友发表了评论,你也评一评吧!
原创文章如转载,请注明:转载自Eddy Blog
原文地址:http://www.rrgod.com/decryption/222.html 欢迎订阅Eddy Blog。