请汇编高手注释的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;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/549620.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

俱乐部又多了一个MVP

山西DotNet俱乐部的周金桥同志成为2008年7月份的MVP,在这里祝贺一下。

交朋友的学问

交朋友这个事情是这样的, 咱们自己确实得努力, 否则有点水平的就不会倾向于和咱们建立关系。 不是别人骄傲, 而是如果交一大堆朋友, 用于交流的时间又有限, 到时候反而不知如何处理,得罪哪一个也行不是。过…

MathCAD求解方程组

用MathCAD解方程组,经常因为的原因出错,所以留在这里自己看,也供大家参考。 转自:http://www.cscce.net/fsp/reeducation/mathcad.html (九) 解方程与方程组 1.解一元一次方程 root函数格式:root(f(x),x…

计算机启动过程详解

打开电源启动机器几乎是电脑爱好者每天必做的事情,面对屏幕上出现的一幅幅启动画面,我们一点儿也不会感到陌生,但是,计算机在显示这些启动画面时都做了些什么工作呢?相信有的朋友还不是很清楚,本文就来介绍…

extern C

extern "C" LuChenQun edited this page Mar 30, 2019 3 revisions在C中常在头文件见到extern "C"修饰函数,那有什么作用呢? 是用于C链接在C语言模块中定义的函数。 C虽然兼容C,但C文件中函数编译后生成的符号与C语言生…

病毒与恶意程序

仅仅在几年前,我们还可以清晰地辩明哪些软件是具有恶意的而哪些软件是无害的,然而在今天,病毒无论在种类还是数量上都呈现出爆炸性的增长,甚至有大量的非授权软件已经超过了病毒的意义范畴,恶意程序已经形成了一个大的…

三层体系结构学习总结

三层架构学习总结KeyWords: 三层体系结构,DAL,BLL,USL,学习心得,三层体系结构,软件三层体系结构 By Flouse2008年7月24日三层体系结构的概念 用户界面表示层(USL)业务逻辑层(BLL)数据访问层(DAL) 图一:BLL将USL与DAL隔开了,并且加入了业务规则 各层的作用…

面向对象(1)

1.对象的比较 和equals: :比较两个变量的值是否相等。 比较两个引用类型的内存地址是否相等,即是否指向同一对象。eqeal():比较两对象内容是否一致 2.抽象类 抽象类是一种模板模式,为所有子类提供了一个通用模板,子类…

改变人生的几句话

第一句话是:优秀是一种习惯。 这句话是古希腊哲学家亚里士多德说的。如果说优秀是一种习惯,那么懒惰也是一种习惯。人出生的时候,除了脾气会因为天性而有所不同,其他的东西基本都是后天形成的,是家庭影响和教育的结果…

面向对象(2)

1、变量 变量的本质是一个“可操作的存储空间”,空间的位置是确定的,但是里面放置的什么值是不确定的。 int整型 是4个字节,每个字节有8位,所以int定义的变量最多可存储32bit的信息。 double双精度浮点型和long长整型有8个字节 2、…

具有全局观的网络拓扑

近年来,IT技术发展迅速,随着各个企业IT系统的建设,网络架构从单一的局域网扩展到广域网,网络设备也是类型多种多样,路由器、交换机、防火墙、IDS、***等等,而且网络设备的供应厂商也是越来越多,…

拥塞管理

在主干网设备局域网连接接口上,在入方向(局域网向广域网流向)进行拥塞管理的部署。在网络中,当局域网中的数据网广域网链路上发送时,到达的速度大于接口发送分组的速度时,在该接口处就会产生拥塞。如果没有…

硬件_WIFIBlue

WIFI 平台:全志 模组:AP6210 (WF BT FM) 模式:STA  AP  Wi-Fi Direct(点对点) 接口:SDIO / USB——WF UART PCM——BT PCM数字音频接口,说明接口传输的音频数…

ActiveX控件的另类免费签名法

注意:一直都有人提到一个问题,就是使用支付宝的证书,会不会有安全问题,这一点是肯定的,所以这个证书只能拿来做软件签名用,不能拿来做支付的。 这几天手上在做一个项目,要用到ActiveX控件&#…

运算符(1)

1、自增自减 int a 3; int b a;//执行完后,b3。先给b赋值,再自增。 System.out.println("a"a"\nb"b); int a 3; int b a;//执行完后,b4。先自增,后赋值。 System.out.println("a"a"\nb"b); 自减…

web布局最实用的12条css技巧

1&#xff1a;Rounded corners without images 效果图—— Rounded corners without images<div id”container”> <b class”rtop”> <b class”r1″></b> <b class”r2″></b> <b class”r3″></b> <b class”r4″>&l…

OCP-052考试题库汇总(47)-CUUG内部解答版

Which three are true about the Automatic Database Diagnostic Monitor (ADDM)? A)It improves database performance by automatically implementing Oracle ‘s best practices. B)It can assist the DBA in diagnosing database instance startup failures. C)It can be …

python 函数式编程

简介 简单来说就是 没有变量&#xff0c;所有的操作都通过函数实现 参考链接 廖雪峰py 转载于:https://www.cnblogs.com/eat-too-much/p/11435717.html

运算符(2)

1.三目运算符 /* 三目运算符/ public class demo1 { public static void main(String[] args) { int score 80; String type score<60?"不及格":"及格"; System.out.println(type); } } 2.运算符优先级逻辑非>逻辑与>逻辑或a||b&&c的运…

虚拟的有时比真实的还要好(+奥运杂谈)

虚拟技术十分热门.虚拟技术是将一台物理硬件计算机虚拟成多台软件计算机.每一台虚拟出来的软件计算机(以下叫做虚拟机)用起来都就象是在用那台被虚拟的硬件计算机(以下叫做真实机)完全一样.当然这样的说法忽略了虚拟机相对于真实机在执行效益上不可避免所存在的损失.所以如何减…