• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >汇编语言 > 串操作类指令

串操作类指令

作者:汇编爱好者 字体:[增加 减小] 来源:互联网 时间:2017-06-17

汇编爱好者通过本文主要向大家介绍了位操作类指令的功能是,数据传送类指令,程序控制类指令的功能,传送类指令,算术运算类指令等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
</div>

1 .重复前缀指令 REP 、 REPZ 、 REPNZ
(1) REP :REP 前缀用在 MOVS 、 STOS 、 LODS 、 INS 和 OUTS 指令前。
格式: REP string primitive
其中 string primitive 可为 MOVS , LODS 等指令。
功能:
(1) 如果 (CX)=0 ,则退出 REP ,否则往下执行。
(2)(CX)=(CX) - 1
(3) 执行其后的串指令
(4) 重复 (1)-(3)
(2) REPZ/REPE: 该指令一般用在 CMPS 、 SCAS 指令前。
格式: REPE( 或 REPZ) string primitive
其中 string primitive 可为 CMPS 或 SCAS 指令。
功能:
(1) 如果 (CX)=0 或 ZF=0 时退出,否则往下执行。
(2)(CX)=(CX) - 1
(3) 执行其后的串指令
(4) 重复 (1)-(3)
与 REP 相比,除满足 (CX)=0 的条件可结束操作外,还增加了 ZF=0 的条件,也就是说,如果两数相等就可继续比较,如果遇到了两数不相等可提前结束操作。
(3) REPNZ/REPNE : 该指令一般用在 CMPS 、 SCAS 指令前。
格式: REPE( 或 REPZ) string primitive
其中 string primitive 可为 CMPS 或 SCAS 指令。
功能:
(1) 如果 (CX)=0 或 ZF=1 时退出,否则往下执行。
(2)(CX)=(CX) - 1
(3) 执行其后的串指令
(4) 重复 (1)-(3)
与 REP 相比,除满足 (CX)=0 的条件可结束操作外,还增加了 ZF=1 的条件,也就是说,如果两数不相等就可继续比较,如果遇到了两数相等可提前结束操作。

   2传送指令 MOVS

语句格式:① MOVS DST , SRC
② MOVSB ——字节串传送
③ MOVSW ——字串传送
其中后两种明确注明是传送字节还是字 , 第一种格式则应在操作数中表明是字节还是字的操作 . 例如 :
MOVS ES:BYTE PTR[DI],DS:[SI]
功能:将以 SI 为指针的源串中的一个字节(或字)存储单元中的数据传送至以 DI 为指针的目的地址中去,并自动修改指针,使之指向下一个字节(或字)存储单元。
即:①( DS : [SI] )→ ES : [DI] 。
② 当 DF=0 时,( SI )和( DI )增量。
当 DF=1 时,( SI )和( DI )减量。
③当操作为字节操作时, (SI) 、 (DI) 增减量为 1 ,当操作为字操作时, (SI) 、 (DI) 增减量为 2 。
④当该指令与前缀 REP 联用时,则可将数据段中的整串数据传送到附加段中去,这里源串必须在数据段中,目的串必须在附加段中,但源串允许使用段跨越前缀来修改。在与 REP 联用时,还必须先把数据串的长度值送到计数寄存器中,以便控制指令结束。因此在执行该指令前,必做如下准备工作:
I. 把存放在数据段中的源串首地址 ( 如反向传送则应是末地址 ) 放入源变址寄存器中 ;
II. 把将要存放数据串的附加段中的目的串首址 ( 反向传送时为末地址 ) 放入目的变址寄存器 ;
Ⅲ . 把数据串长度放入计数寄存器 ;
Ⅳ . 建立方向标志。
例:在数据段中有一个字符串,其长度为 17 ,要求把它们转送到附加段中的一个缓冲区中。

data segment
mess1 db ‘personal computer$'
data ends
extra segment
mess2 db 17 dup(?)
extra ends
code segment
assume cs:code,ds:data,es:extra
…
mov ax,data
mov ds,ax
mov ax,extra
mov es,ax
…
lea si,mess1
lea di,mess2
mov cx,17
cld
rep movsb
…
code ends

3 .串比较指令 CMPS
语句格式:① CMPS SRC , DST ——需指定操作类型字
② CMPSB ——字节串比较
③ CMPSW ——字串比较
功能:将 SI 所指的源串中的一个字节(或字)存储单元中的数据与 DI 所指的目的串中的一个字节(或字)存储单元中的数据相减,并根据相减的结果设置标志,但结果并不保存。
即:①( [SI] )-( [DI] )。
② 修改串指针,使之指向串中的下一个元素。当 DF=0 时,( SI )和( DI )增量。当 DF=1 时,( SI )和( DI )减量。
③当操作为字节操作时, (SI) 、 (DI) 增减量为 1 ,当操作为字操作时, (SI) 、 (DI) 增减量为 2 。

4 .串搜索指令 SCAS
语句格式:① SCAS DST
② SCASB ——字节串搜索
③ SCASW ——字串搜索
功能: AL (字节)或 AX (字)中的内容与 DI 所指的目的串中的一个字节(
字)存储单元中的数据相减,根据相减结果设置标志位,结果不保存,
即:① 字节操作:( AL )-( [DI] ),字操作:( AX )-( [DI] )。
② 修改指针使之指向串中的下一个元素。当 DF=0 时,( DI )增量。当 DF=1 时,( DI )减量。
③当操作为字节操作时, (SI) 、 (DI) 增减量为 1 ,当操作为字操作时, (SI) 、 (DI) 增减量为 2 。
以上 3 , 4 两条串处理指令和 REPE 或 REPNE 相结合,可以用来比较两个数据串,或从一个字符串中查找一个指定的字符。
当要求从一个字符串中查找一个指定的字符,可用指令 REPNZ SCASB 。
当要求比较两个字符串,找出它们不相区配的位置,则可以使用指令 REPE CMPSB 。

5 .从源串中取数指令 LODS
语句格式:① LODS SRC
② LODSB ——从字节串中取数
③ LODSW ——从字串中取数
功能:将 SI 所指的源串中的一个字节(或字)存储单元中的数据取出来送入 AL (或 AX )中。
即:
① 字节操作:( [SI] )→ AL ,字操作:( [SI] )→ AX 。
② 修改指针 SI ,使它指向串中的下一个元素。当 DF=0 时,( SI )增量。当 DF=1 时,( SI )减量。
③当操作为字节操作时, (SI) 、 (DI) 增减量为 1 ,当操作为字操作时, (SI) 、 (DI) 增减量为 2 。

6 .往目的串中存数指令 STOS
语句格式:① STOS DST
② STOSB ——往字节串中存数
③ STOSW ——往字串中存数
功能:将 AL 或 AX 中的数据送入 DI 所指的目的串中的字节(或字)存储单元中。
即:
① 字节操作:( AL )→ [DI] ,字操作:( AX )→ [DI] 。
② 修改指针 DI ,使之指向串中的下一个元素。当 DF=0 时,( DI )增量)。当 DF=1 时,( DI )减量。
③当操作为字节操作时, (SI) 、 (DI) 增减量为 1 ,当操作为字操作时, (SI) 、 (DI) 增减量为 2 。
对串处理指令,需注意:
(1) 串处理指令在不同的段之间传送或比较数据,如果需要在同一段内处理数据,可以在 DS 和 ES 中设置同样的地址,或者在源操作数字段使用段跨越前缀来实现。例如:
MOVS [DI] , ES : [SI]
(2) 当使用重复前缀时, (CX) 是每次减 1 的,因此对于字指令来说,预置时设置的值应该是字的个数而不是字节数。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 串操作类指令
  • 位操作类指令

相关文章

  • 2017-06-28Windows下反汇编程序例子
  • 2017-06-28汇编教程:多文档界面(MDI)
  • 2017-06-28树型视图控件详解
  • 2017-06-28汇编语言的艺术-基本认识(三)
  • 2017-06-28FASTREBOOT V1.0
  • 2017-06-28汇编语言程序设计(三)
  • 2017-06-28汇编源码系列之charop
  • 2017-06-28汇编语言与C语言的接口技术
  • 2017-06-28事件对象在多线程编程中的应用
  • 2017-06-17分支程序设计

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 内存映射文件原理及实例
    • 了解汇编命令行参数
    • 什么是动态链接库
    • 汇编语言程序设计(三)
    • 汇编教程之绘制文本
    • 汇编语言学习指南(二)
    • 汇编语言的符号、标号和变量符号
    • 利用汇编从命令行提取文件名
    • 汇编源码系列之drives
    • 汇编教程之树型视图控件

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有