两个字符串对象进行比较,忽略大小写,两个字符串缓冲区地址利用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-地址中的值给EAX
JE @@
MOV EAX,[EAX-]
@@: OR EDX,EDX ; 如果EDX不为0,则将EDX-地址中的值给EDX
JE @@
MOV EDX,[EDX-]
@@: MOV ECX,EAX ; 将EAX的值给ECX
CMP ECX,EDX ; 将EAX和EDX中较小者给ECX(无符号数)
JBE @@
MOV ECX,EDX
@@: CMP ECX,ECX
@@: REPE CMPSB ; 按字节比较ESI、EDI指向的内存中的数据,比较的字节数为ECX,遇到不同的数据则停止比较
JE @@ ; 如果两者相同则跳转到@@标号处
MOV BL,BYTE PTR [ESI-] ; 取不同数据其中的一个给BL
CMP BL,'a' ; 如果BL是将小写字母则转换为大写字母
JB @@
CMP BL,'z'
JA @@
SUB BL,20H
@@: MOV BH,BYTE PTR [EDI-] ; 取不同数据中的另一个给BH
CMP BH,'a' ; 如果BH是将小写字母则转换为大写字母
JB @@
CMP BH,'z'
JA @@
SUB BH,20H
@@: CMP BL,BH ; 如果BL与BH相同则继续前面的比较
JE @@
MOVZX EAX,BL ; 将BL、BH的值给EAX、EDX
MOVZX EDX,BH
@@: SUB EAX,EDX ; 用EAX减去EDX
POP EBX ; 恢复寄存器
POP EDI
POP ESI
end;

SysUtils.CompareText的注释的更多相关文章

  1. shell注释

    sh里没有多行注释,只能每一行加一个#号.只能像这样: #-------------------------------------------- # 这是一个自动打ipa的脚本,基于webfrogs ...

  2. 浅谈JSP注释

    HTML注释 JSP文件是由HTML尿急和嵌入的Java程序片段组成的,所以在HTML中的注释同样可以在JSP文件中使用.注释格式:<!--注释内容--> <!-- 欢迎提示信息! ...

  3. 注释生成Api文档

    1.开发背景 最近一直在写dubbo接口,以前总是用word文档写接口描述然后发给别人.现在太多了,而且跟别人对接联调的人家急着用,根本没时间去写word文档.那就想想怎么用doc文档注释自动生成接口 ...

  4. grep 查找bash脚本中的注释代码

    出于安全性的考虑,不建议在bash脚本中注释掉不使用的代码.也就是说如果某段代码不使用了,那么应该删除掉,而不是简单地注释掉.假如你突然意识到这一点,而以前并没有遵从这个原则,现在需要找出脚本中的注释 ...

  5. 在C#里面给PPT添加注释

    平常开会或者做总结报告的时候我们通常都会用到PowerPoint演示文稿,我们可以在单个幻灯片或者全部幻灯片里面添加注释,这样观众可以从注释内容里面获取更多的相关信息. 有些朋友不清楚如何在幻灯片里面 ...

  6. 设置eclipse中自动添加get,set的注释为字段属性的注释

    一:说明 首先具体来看一下是什么效果,上图可能会更清楚一点 就是在get/set中自动加上属性的注释,那我们要怎么配置呢? 二:配置 2.1:下载附件 下载附件 2.2:替换class 原生的ecli ...

  7. go语言注释

    Go语言注释实例代码教程 - Go支持C语言风格的/* */块注释,也支持C++风格的//行注释. 当然,行注释更通用,块注释主要用于针对包的详细说明或者屏蔽大块的代码. 每个包都应有一个包注解,即 ...

  8. 代码的坏味道(13)——过多的注释(Comments)

    坏味道--过多的注释(Comments) 特征 注释本身并不是坏事.但是常常有这样的情况:一段代码中出现长长的注释,而它之所以存在,是因为代码很糟糕. 问题原因 注释的作者意识到自己的代码不直观或不明 ...

  9. Rafy 框架 - 为数据库生成注释

    当开发者使用 CodeFirst 开发模式,编写了大量的实体类,在代码中编写了完整的类型注释和属性注释,并自动生成数据库后,往往需要把实体类型和实体属性上的注释同时生成到对应的数据库表及字段上.这样, ...

随机推荐

  1. acm

    给定一组数字,一组有9个数字,将这9个数字填写到3*3的九宫格内:使得横,竖,斜对角一条线上的三个数字之和相等:如果无解则打印无解: #include <iostream> #includ ...

  2. 【百度地图API】如何获取行政区域的边界?(转载)

    转自:http://www.cnblogs.com/milkmap/archive/2012/04/11/2442430.html 摘要:以前教过大家如何自行获取行政区域,或者自定义获取一个区域的边界 ...

  3. 在 .NET项目中使用 Redis(2018.10.16)

    1. 打开NuGet管理器搜索redis,安装:“StackExchange.Redis” 2. 配置 Web.config 文件 <connectionStrings> <add ...

  4. css3的transform-origin配合scale,控制动画,实现各种hover效果

    1.底部画线,从左边开始,右边结束 html: <div class="silde-txt">底部划线</div> css: <style>.s ...

  5. Visual Basic 2017 操作Excel和word【2】持续更新……

    1.控制台程序创建Excel,并设置状态栏显示“Hello World”文本 Module Module1 Private exitXL As Boolean = False Dim WithEven ...

  6. OSI七层模型与TCP/IP五层模型(转)

    reference:https://www.cnblogs.com/qishui/p/5428938.html         博主是搞是个FPGA的,一直没有真正的研究过以太网相关的技术,现在终于能 ...

  7. javascrit--常用互动方法

    本文是刚开始学习javascript的一些基础知识 JavaScript--互动 JavaScript输出内容 document.write("内容"+"<br&g ...

  8. json&pickle序列化和软件开发规范

    json和pickle 用于序列化的两个模块 json   用于字符串和python数据类型间进行转换,json只支持列表,字典这样简单的数据类型 但是它不支持类,函数这样的数据类型转换 pickle ...

  9. 互联网创业公司如何防御 DDoS 攻击?采用CDN服务

    收集了发表于2015年 攻击者是控制一个足够大的分布式集群来发起攻击,各种杂七杂八的包,什么都会有.根本不在乎你开的什么服务,也没那耐心分析你有什么服务.比如哪怕你根本没开UDP的任何服务,但他就是发 ...

  10. BCP导出数据到EXCEL

    SET @FilePath='D:\TEST.xls' SET @sql='bcp "SELECT * FROM XXX.dbo.XXX WITH(NOLOCK) WHERE XXX=''X ...