zoukankan      html  css  js  c++  java
  • 汇编学习笔记37

    第六单

    二、串指令的重复前缀

    由于串操作指令每次只能对字符串中的一个字符进行操作,进行操作时总是要使用一个循环。8086,8088提供了重复操作前缀,用于重复串操作。

    1. REP

    重复后面的操作。每次执行重复指令前,判断CX,如果CX=0,结束指令,否则,执行前缀后的串操作。

    REP前缀主要用于MOVS和STOS前,一般不在LODS前使用任何重复前缀。

    例:

    ; 子程序名: FILLB

    ; 功能: 填充缓冲区

    FILLB PROC

    PUSH AX

    PUSH DI

    JCXZ FILLB_1

    CLD

    SHR CX, 1

    MOV AH, AL

    REP STOSW

    JNC FILLB_1

    STOSB

    FILLB_1: POP DI

    POP AX

    RET

    FILLB ENDP

    2.REPZ  REPE

    CX=0或ZF=0时,停止操作

    主要用于CMPS 和SCAS前。由于MOVS和STOS不影响标志位,在这些串操作前使用REPZ和REP效果是一样的,但是通常在MOVS和STOS前使用REP

    例:

    ; 子程序名: STRCMP

    ; 功能: 比较字符串是否相同

    ; 入口参数: 两个字符串分别存放在段值:偏移地址为 DS: SI 和ES: DI中

    ; 出口参数: 如果AX=0,则两字符串相同,否则,不同

    ; 说明: 字符串以0结束

    STRCMP PROC

    CLD

    PUSH DI

    XOR AL, AL

    MOV CX, 0FFFFH

    NEXT: SCASB

    JNZ NEXT

    NOT CX

    POP DI

    REPZ CMPSB

    MOV AL, [SI-1]

    MOV BL, ES: [DI-1]

    XOR AH, AH

    MOV BH, AH

    SUB AX, BX

    RET

    STRCMP ENDP

    3. REPNZ REPNE

    CX=0或ZF=1时,停止重复

    主要用于串扫描指令

    例:

    假设数据段

    CONAME DB 'SPACE EX……' ;20Byte

    PLINE DB 20DUP(' ')

    用串指令完成

    1)从左至右把CONAME内容传入PLINE

    2)从右至左把CONAME内容传入PLINE

    3)把CONAME第3个和第4个字节内容传入AX

    4)把AX存入PLINE+5开始的单元中

    PUSH DS

    PUSH ES

    PUSH SI

    PUSH DI

    PUSH AX

    MOV AX, SEG CONAME

    MOV DS, AX

    MOV AX, SEG PLINE

    MOV ES, AX

    1. LEA SI, CONAME

    LEA DI, PLINE

    CLD

    MOV CX, 20

    REP MOVSB

    2. LEA SI, CONAME+19

    LEA DI, PLINE+19

    STD

    MOV CX, 20

    REP MOVSB

    3. MOV SI, CONAME+2

    LODSW

    4. MOV DI, PLINE+5

    MOV CX, 2

    CLD

    REP STOSB

  • 相关阅读:
    AE 线编辑
    ArcEngine判断要素(feature)是否为multipart feature及分解(炸开)代码
    AE二次开发技巧之撤销、重做
    ArcEngine数据编辑--选择要素
    java语言体系的技术简介之JSP、Servlet、JDBC、JavaBean(Application)
    MVC开发模式详解
    数据库设计中常见表结构的设计技巧
    Eclipse 保存文件时自动格式化代码
    优化你的java代码性能
    Hibernate 与mybatis的区别
  • 原文地址:https://www.cnblogs.com/hailong/p/1929126.html
Copyright © 2011-2022 走看看