串操作指令说明:
针对数据块或字符串的操作,可实现存储器到存储器的数据传送。待操作的数据串称为源串,目标地址称为目标串。
1:串操作指令要求
(1).源串一般存放在数据段(DS),偏移地址由 SI指定,允许段重设
(2).目标串必须在附加段(ES),偏移地址由DI指定
2:串的操作方向
由DF标志位决定,指令根据DF状态自动修改地址指针
DF=0: 增地址方向 (CLD指令可将DF置为0)
DF=1: 减地址方向 (STD指令可将DF置为1)
3.重复前缀
使用CX表示重复前缀以后指令需要重复的次数
(1).无条件前缀
REP:当cx!=0时,REP后的指令将继续重复执行
(2).有条件前缀
相等(为零)重复,REPE(REPZ)
cx!=0 &&ZF=1 执行后面指令
不相等(不为零)重复,REPNE(REPNZ)
cx!=0&&ZF=0 执行后面指令
4.操作类型
串操作指令需要指明每次操作的类型,可以直接写在操作 数上,或者在助记符后面加上"B"或"W"
一.串传送指令MOVS(MOVs String)
格式
1.MOVS SRC,DEST
2.MOVSB
3.MOVSW
作用:
将一个字节或字从存储器的一个区域传送到另一个区域,然后根据类型和DF的值修改地址指针
二.串装入指令LODS(LOaD String)
格式
(1)LODS SRC(默认源操作数段寄存器位DS)
(2)LODSB
(3)LODSW
作用:
将源字符串的一个字节或字从存储器的一个区域传送到AL或AX中
三:串送存指令STOS(STOre String)
格式
(1)STOS DEST(默认源操作数段寄存器为DS)
(2)STOSB
(3)STOSW
作用
将AL或AX中的内容送到目的字符串
四:串比较指令CMPS(CoMPare String)
格式
(1)CMPS DEST,SRC
(2)CMPSB
(3)CMPSW
作用
将字符串中相应的元素逐个进行比较(即相减),但不将比较的结果送到目的操作数,而是影响标志位。然后根据类型和DF的值修改地址指针,CMPS与其他指令不同,源操作数在后,目的操作数在钱。
五:串扫描指令SCAS(SCAn String)
格式
(1)SCAS DEST
(2)SCASB
(3)SCASW
操作
SCAS指令在一个字符串中搜索特定的关键字,然后根据类型和DF的值修改地址指针。字符串的起始地址只能放在(ES:DI)中
六:串输入INS(INput from port to String)
格式:
(1)INS DST,DX
(2)INSB
(3)INSW
(4)INSD
作用
指令把端口在DX寄存器中的I/O空间的数据送到由ES:DI指向的存储单元,并根据DF的值和数据类型修改DI
七:串输出OUTS(OUTput String to port)
格式:
(1)OUTS DX,SRC
(2)OUSTB
(3)OUTSW
(4)OUSTD
作用:
指令把由DS:SI指向的存储单元中的数据送到端口号在DX寄存器中的I/O端口中,并根据DF的值和数据类型改变SI