zoukankan      html  css  js  c++  java
  • SysUtils.CompareText的注释

    两个字符串对象进行比较,忽略大小写,两个字符串缓冲区地址利用EAX和EDX两个寄存器传给该函数,字符串的长度用4个字节保存在缓冲区的前面,函数用EAX返回比较结果,结果为0表示相同。
     
    function CompareText(const S1, S2: string): Integer; assembler;
    asm
             PUSH    ESI ; 保存寄存器 
            PUSH    EDI 
            PUSH    EBX 
            MOV    ESI,EAX ; EAX、EDX的值给ESI、EDI 
            MOV    EDI,EDX 
            OR      EAX,EAX ; 如果EAX不为0,则将EAX-4地址中的值给EAX 
            JE      @@0 
            MOV    EAX,[EAX-4] 
    @@0:    OR      EDX,EDX ; 如果EDX不为0,则将EDX-4地址中的值给EDX 
            JE      @@1 
            MOV    EDX,[EDX-4] 
    @@1:    MOV    ECX,EAX ; 将EAX的值给ECX 
            CMP    ECX,EDX ; 将EAX和EDX中较小者给ECX(无符号数) 
            JBE    @@2 
            MOV    ECX,EDX 
    @@2:    CMP    ECX,ECX 
    @@3:    REPE    CMPSB ; 按字节比较ESI、EDI指向的内存中的数据,比较的字节数为ECX,遇到不同的数据则停止比较 
            JE      @@6 ; 如果两者相同则跳转到@@6标号处 
            MOV    BL,BYTE PTR [ESI-1] ; 取不同数据其中的一个给BL 
            CMP    BL,'a' ; 如果BL是将小写字母则转换为大写字母 
            JB      @@4 
            CMP    BL,'z' 
            JA      @@4 
            SUB    BL,20H 
    @@4:    MOV    BH,BYTE PTR [EDI-1] ; 取不同数据中的另一个给BH 
            CMP    BH,'a' ; 如果BH是将小写字母则转换为大写字母 
            JB      @@5 
            CMP    BH,'z' 
            JA      @@5 
            SUB    BH,20H 
    @@5:    CMP    BL,BH ; 如果BL与BH相同则继续前面的比较 
            JE      @@3 
            MOVZX  EAX,BL ; 将BL、BH的值给EAX、EDX 
            MOVZX  EDX,BH 
    @@6:    SUB    EAX,EDX ; 用EAX减去EDX 
            POP    EBX ; 恢复寄存器 
            POP    EDI 
            POP    ESI
    end;
    View Code
  • 相关阅读:
    C#.ToString()格式大全
    C# 中的正则验证及用法
    解除SVN的控制
    SVN检出忽略文件夹文件
    Mac下查看及生成SSH Key
    Xcode-报错问题总结大全
    CentOS6.5上kafka 安装过程-多机版本
    神经网络绘图网址
    CentOs 中没有eth0文件
    Spring 入门
  • 原文地址:https://www.cnblogs.com/key-ok/p/3441985.html
Copyright © 2011-2022 走看看