111111
精灵王
精灵王
  • 注册日期2010-12-08
  • 发帖数640
  • QQ
  • 火币1103枚
  • 粉丝120
  • 关注75
  • 社区明星
阅读:2000回复:0

经典汇编语言教程:5.2.11-字符串操作指令

楼主#
更多 发布于:2013-01-24 14:32

字符串操作指令的实质是对一片连续存储单元进行处理,这片存储单元是由隐含指针DS:SI或ES:DI来指定的。字符串操作指令可对内存单元按字节、字或双字进行处理,并能根据操作对象的字节数使变址寄存器SI(和DI)增减1、2或4。具体规定如下:
(1)、当DF=0时,变址寄存器SI(和DI)增加1、2或4;
(2)、当DF=1时,变址寄存器SI(和DI)减少1、2或4。
在后面各指令中,有关变址寄存器都按上述规定进行增减,不再一一说明。
1、取字符串数据指令(LoadString Instruction)
从由指针DS:SI所指向的内存单元开始,取一个字节、字或双字进入AL、AX或EAX中,并根据标志位DF对寄存器SI作相应增减。该指令的执行不影响任何标志位。

指令的格式:LODS  地址表达式
LODSB/LODSW
LODSD ;80386+
在指令LODS中,它会根据其地址表达式的属性来决定读取一个字节、字或双字。即:当该地址表达式的属性为字节、字或双字时,将从指针DS:SI处读一个字节到AL中,或读一个字到AX,或读一个双字到EAX中,与此同时,SI还将分别增减1,2或4。


图5.15 取字符串数据指令的功能示意图

其它字符串指令中的“地址表达式”作用与此类似,将不再说明。
2、置字符串数据指令(StoreString Instruction)

该指令是把寄存器AL、AX或EAX中的值存于以指针ES:DI所指向内存单元为起始的一片存储单元里,并根据标志位DF对寄存器DI作相应增减。该指令不影响任何标志位。
指令的格式:STOS  地址表达式
STOSB/STOSW
STOSD ;80386+


图5.16 置字符串数据指令的功能示意图

3、字符串传送指令(MoveString Instruction)
该指令是把指针DS:SI所指向的字节、字或双字传送给指针ES:DI所指向内存单元,并根据标志位DF对寄存器DI和SI作相应增减。该指令的执行不影响任何标志位。
指令的格式:MOVS  地址表达式1,地址表达式2
MOVSB/MOVSW
MOVSD ;80386+

喜欢0 评分0
游客

返回顶部