串操作类指令
来源:互联网 发布:淘宝论坛怎么发帖 编辑:程序博客网 时间:2024/04/29 10:35
在计算机中,大部分数据存放在主存中,8086CPU提供了一组处理主存中连续存放的数据串的指令——串操作指令。串操作指令中,源操作数用寄存器SI寻址,默认在数据段DS中,但允许段超越;目的操作数用寄存器DI寻址,默认在附加段ES中,不允许段超越。每执行一次串操作指令,作为源地址指针的SI和作为目的地址指针的DI将自动修改:+/-1(对于字节串)或+/-2(对于字串)。地址指针时增加还是减少取决于方向标志DF。在系统初始化后或者执行指令CLD指令后,DF=0,此时地址指针增1或2;在执行指令STD后,DF=1,此时地址指针减1或2。
1、串传送指令MOVS
MOVSB ;字节串传送:ES:[DI]←DS:[SI],SI←SI+/-1,DI←DI+/-1
MOVSW ;字串传送:ES:[DI]←DS:[SI],SI←SI+/-2,DI←DI+/-2
MOVS 目的串名,源串名 ;这种格式需要使用前缀WORD PTR或BYTE PTR指明
例:将数据段SOURCE指示的100个字节数据传送到附加段DESTINATION指示的主存区
MOV SI,OFFSET SOURCE
MOV DI,OFFSET DESTINATION
MOV CX,100
CLD
AGAIN: MOVSB
DEC CX
JNZ AGAIN
2、串存储指令STOS
STOSB ;字节串存储:ES:[DI]←AL,DI←DI+/-1
STOSW ;字串存储:ES:[DI]←AX,DI←DI+/-2
船存储指令将AL或AX寄存器的内容存入由DI指定的附加段主存单元中,并根据DF和传送单位修改DI寄存器。STOS不影响标志。
3、串读取指令LODS
LODSB ;字节串读取:AL←DS:[SI],SI←SI+/-1
LODSW ;字串读取:AX←DS:[SI],SI←SI+/=2
LODS指令和STOS指令功能互逆,它将SI寄存器指向的主存单元的内容送至AL或AX寄存器,并相应修改SI使其指向下一个元素。不影响标志。
4、串比较指令CMPS
CMPSB ;字节串比较:DS:[SI]-ES:[DI],SI←SI+/-1,DI←DI+/-1
CMPSW ;字串比较:DS:[SI]-ES:[DI],SI←SI+/-2,DI←DI+/-2
船比较指令的功能是比较源串与目的串是否相同,并根据其减法结果设置标志位;指令在每次比较后修改SI和DI寄存器的值,使之指向下一个元素。
5、串扫描指令SCAS
SCASB ;字节串扫描:AL-ES:[DI],DI←DI+/-1
SCASW ;字串扫描:AX-ES:[DI],DI←DI+/-2
串扫描指令SCAS将附加段中的字节或字内容与AL/AX寄存器内容进行比较,根据比较的结果设置标志,每次比较后修改DI寄存器的值,使之指向下一个元素。
6、重复前缀指令
任何一个串操作指令,都可以在前面加一个重复前缀,以实现串操作的重复执行,重复次数隐含在CX寄存器中
REP ;REP前缀用在MOVS、STOS、LODS指令前,每次执行一次指令,CX减1;直到CX=0,重复执行结束
REPZ ;也可以表把为REPE,用在CMPS、SCAS指令前,每执行一次串指令CX减1,并判断ZF标志是否为0
;只要CX=0或ZF=0,则重复执行结束
REPNZ ;也可以表达为REPNE,用在CMPS、SCAS指令前,每执行一次串操作指令CX减1,并判断ZF标志是否为1,只要CX=0或ZF=1,则重复执行结束。
●REP前缀可以理解为“当数据串没有结束(CX≠0),则继续传送”
●REPZ/REPE前缀可以理解为“当数据串没有结束(CX≠0),并且串相等(ZF=1)则继续比较”
●REPNZ/REPNE前缀可以理解为“当数据串没有结束(CX≠0),并且串不相等(ZF=0)则继续比较”
重复操作是否完成的检测是在执行串指令之前,所以,如果初始化CX为0,将不会重复操作。判断标志ZF,则是在执行串指令之后。
在执行一条重复的基本串操作期间,操作数指示寄存器(变址寄存器SI,DI)和操作计数器CX在每次重复后都要自动进行修改,而指令指示器(IP)将保持重复前缀字节的偏移地址(假定重复前缀是紧放在字符串操作指令之前)。于是,当控制由中断数据服务返回时,一个被中断了的重复串操作能够得到正确的恢复。除了重复前缀以外,IBM-PC还提供了两个前缀:一个是缺省段寄存器的取代前缀(加段寄存器前缀),另一个是封锁总线前缀LOCK以禁止其他的总线访问。不要把这两个前缀用在具有重复前缀的串操作指令前面。如果在基本串操作指令之前出现一个以上的前缀,那么中断恢复时只能恢复一个字节(紧放在串操作指令之前的一个)前缀,多于一个字节的前缀就丢掉了(一个前缀占一个字节)。所以在串操作指令前用了重复前缀后就不能用其他两个前缀了。
另外,在字符串操作指令中不能使用带有[BX]或[BP]的寻址方式。
- 串操作类指令
- 串操作指令
- 串操作指令
- 串操作指令
- 串操作指令
- 算术操作类指令
- 逻辑操作类指令
- (三)逻辑运算指令和串操作指令
- 汇编(十三)——串操作类指令
- 汇编(十四)——串操作类指令练习
- 三,位操作类指令:包括逻辑运算指令,测试指令和移位指令
- 80386 控制转移指令,串操作指令 (四)
- 汇编串操作指令std 和 cld
- 8086指令系统 操作数地址,双操作数,单操作数,无操作数指令。一,传送类指令;二,二、算数运算类指令
- 字符串操作汇编指令
- MySQL常用操作指令
- 位操作指令小结
- 位操作指令小结
- 系统软件设计和性能的几个要点
- 不要进行SELECT *
- xml解析方式
- 怎么回事儿?C#错误:集合已修改;枚举操作可能无法执行。
- 外媒正在邪恶化中国
- 串操作类指令
- 图像颜色聚类分割算法_KMean
- 揭开云计算的面纱:走近Windows Azure
- 毕设室网络的改善
- 配置文件的讲述
- 温家宝:做人的基本原则(看完终身受益)
- IT人应从五个方面做职业规划
- 条款03:尽可能使用const
- 静态存储区,堆内存,栈空间,常量区,自由存储区,动态存储区