汇编中关于字符串操作的指令

来源:百度知道 编辑:UC知道 时间:2024/06/25 23:30:24
我的书上关于这部分讲的很粗略,有哪位能详细的帮我解释一下这几条指令(要有例子啊,谢谢):LODS(LODSB/LODSW/LODSD) STOS(STOSB/STOSW/STOSD) MOVS(MOVSB/MOVSW/MOVSD) INS(INSB/INSW/INSD) OUTS(OUTSB/OUTSW/OUTSD) CMPS( CMPSB/CMPSWCMPSD) SCAS(SCASB/SCASW/SCASD) 一共是七条

字符串操作指令是对一片连续存储单元进行处理,这片存储单元是由隐含指针DS:SI或ES:DI来指定的。字符串操作指令可对内存单元按字节、字或双字进行处理,并根据操作对象的字节数使变址寄存器SI(或DI)增减1、2或4。具体规定如下:
(1)、当DF=0(由CLD指令设定)时,变址寄存器SI(或DI)增加1、2或4;
(2)、当DF=1(由STD指令设定)时,变址寄存器SI(或DI)减少1、2或4。

LODS、STOS、MOVS、INS、OUTS、CMPS、SCAS
-----------------------------------------
1、读字符串数据指令(Load String Instruction)
从由指针DS:SI所指向的内存单元开始,取一个字节、字或双字进入AL、AX或EAX中,并根据标志位DF对寄存器SI作相应增减。该指令的执行不影响任何标志位。

指令格式:LODS类型标识
LODSB
LODSW
LODSD ;80386+

LODS根据其类型标识的属性来决定读取存储单元的大小并将SI相应增减。
-----------------------------------------
2、写字符串数据指令(Store String Instruction)
该指令把寄存器AL、AX或EAX中的值存于以指针ES:DI所指向内存单元为起始的一片存储单元里,并根据标志位DF对寄存器DI作相应增减。该指令不影响任何标志位。

指令格式:STOS类型标识
STOSB
STOSW
STOSD ;80386+
-----------------------------------------
3、字符串传送指令(Move String Instruction)
该指令把指针DS:SI所指向的字节、字或双字传送给指针ES:DI所指向内存单元,并根据标志位DF对寄存器DI和SI作相应增减。该指令不影响任何标志位。

指令格式:MOVS类型标识
MOVSB