- 浏览: 13911 次
最新评论
以下代码在VC6下编译测试通过
函数实现: /************************************************* **********************/ /* 比较两个字符串是否相等 */ /************************************************* *********************/ bool isEqual(const char * str1,const char * str2) { // if (strlen(str1)!=strlen(str2)){//长度不相等则不相等 // return false; // } //对上面判断语句的汇编实现 __asm { push [ebp+0x8] //str1地址入栈 call strlen //调用c函数获取长度 add esp,4 //堆栈平衡[c调用约定"__cdecl"规定由函数的调用者释放堆栈] mov ebx,eax //存放比较结果,为了避免后面再次调用strlen函数引起返回值覆盖[函数的返回值规范约定保存在eax里面] push [ebp+0xc] //str2地址入栈 call strlen //调用c函数获取长度[函数的返回值规范约定保存在eax里面] add esp,4 //堆栈平衡[c调用约定"__cdecl"规定由函数的调用者释放堆栈] cmp eax,ebx //比较两个字符串的长度 jne exit2 //不相等则跳转到 exit2 } // for (;str1字符串是否以某个子字符串开始
函数: /************************************************* ***********************/ /*检查是否以prefix开始 */ /* content:整个字符串 */ /* prefix: 要查找的字符串 */ /* result: 返回的值 */ /************************************************* ***********************/ void _stdcall startWith(const char * pContent,const char * pPrefix,bool * pResult) { // if (pContent==NULL || pPrefix == NULL || strlen(pContent)ebx call strlen; add esp,4 mov ebx,eax push [ebp+0xc] //strlen(pPrefix)-->eax call strlen add esp,4 cmp ebx,eax //strlen(pContent)al mov ebx,pc mov bl,byte ptr [ebx] //*pc-->bl cmp al,bl //if (*pp!=*pc) jne exitwithfalse //发现不通的字符则退出循环 add pp,type char //pp++ add pc,type char //pc++ jmp beginfor //继续下一轮循环 } //*pResult =true; __asm { endfor: jmp exitwithtrue } __asm { exitwithfalse: mov eax,[ebp+0x10] mov [eax],0 //*pResult=0 jmp exit exitwithtrue: mov eax,[ebp+0x10] mov [eax],1 //*pResult=1 exit: //退出 } } 测试代码: int main(int argc, char* argv[]) { char content[] = "welcome to you"; char prefix[] ="welcome"; char msg1[] = "包含"; char msg2[] = "不包含"; char fmt[] = "%s\n"; bool result = false; bool * pResult = &result; // startWith(content,prefix,&result); // printf("%s\n",result?"包含":"不包含"); //以下是汇编实现版本 __asm { push pResult //传递第三个参数 lea eax,prefix //传递第二个参数--取数组首地址 push eax //传递第二个参数 lea eax,content //传递第一个参数--取数组首地址 push eax //传递第一个参数 call startWith //调用函数[该函数采用__stdcall约定,将由北调用函数自身负责堆栈的平衡] cmp result,1 //比较结果是否为1[true] je processeq; //如果为1说明包含,跳转到processeq处理显示包含信息 lea eax,msg2 //否则说明不包含--取msg2数组首地址 push eax //否则说明不包含--传递第二个参数 lea eax,fmt //传递第一个参数--取数组fmt首地址 push eax //传递第一个参数 call printf //调用函数输出信息 add esp,8 //堆栈平衡 jmp exit //程序结束 processeq: //处理包含的情况 lea eax,msg1 //取数组msg1的首地址 push eax //第二个参数入栈 lea eax,fmt //去数组fmt的首地址 push eax //第一个参数入栈 call printf //调用函数输出信息 add esp,8 //堆栈平衡 exit: //程序结束 } return 0; }
发表评论
-
SQL语句的解析方法
2012-07-06 09:46 825数据是程序处理的主要内容,它一般存储在关系型数据库中,要操 ... -
ubuntu下安装mplayer
2012-07-06 09:30 1132快乐,是知识的源泉,知识,是学习的动力。学习是成功的基础。 ... -
asp.net的treeview右键菜单Context Menus on the TReeView - IE Specific
2012-07-05 20:45 720原文网址:http://blogs.msdn.com/b/ ... -
点灯游戏--一个动态创建组件的示例
2012-07-03 13:44 902{ 点灯游戏--一个动态创建组件的示例 Tips : ... -
Flex中获取文本控件中文本的高度
2012-07-02 12:49 786在做文字直播的时候需要获取当前Text控件中文本的高度(T ... -
Flex 与 C# socket 通信(最简单的例子)
2012-07-02 12:49 843我用的是vs2005 文件 - 新建 - 项目 - ... -
Flex4 AdvanceDataGrid去掉排序中竖线
2012-07-02 12:49 867网上资料说:Flex4中想要去除AdvancedDataG ... -
Flex 数据绑定
2012-07-02 12:49 438//Task.as package { public cl ... -
FLEX4中怎样设置背景,及惭变色
2012-07-02 12:49 561height="100%" width ... -
AS3.0相关知识
2012-07-01 10:13 832as3.0 2010-01-06 0 ... -
菜鸟系列之一:在ubuntu linux下搭建android开发
2012-07-01 10:13 889(说明:在ubuntu liunx ... -
『DavyYew』看了又看的SD2.0
2012-07-01 10:13 595原文链接:http://blog. ... -
自定义Eclipse配色方案,尤其对个别字符配色的解决
2012-07-01 10:13 958使用flex plugin,手动一个个调整了配色方案,方法 ... -
FMS3系列(六):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)
2012-06-30 16:38 573FMS3系列(六):使用远程共 ... -
揭秘培训行业内幕---西安PHP学院|PHP培训|Flex培训|游戏培训|UI培训(西安PHP培训)
2012-06-30 16:38 832揭秘培训行业内幕---西 ... -
[转载][转]AS代码优化和Flex应用程序的性能
2012-06-30 16:38 605[转载][转]AS代码优化和F ... -
从flex4 主程序加载另外一个flex4项目
2012-06-30 16:38 406从flex4 主程序加载另外一个flex4项目 2010年1 ...
相关推荐
c语言、汇编语言,交叉编译技术c语言、汇编语言,交叉编译技术
寄存器 寻址方式 常用汇编指令 C++内联汇编 C++入口函数 反汇编识别main函数 第二讲 整型与浮点型 第三讲 指针与常量 第四讲 布尔型与字符(串) 第五讲 表达式 第六讲 选择结构 第七讲 循环结构 第八讲 变量 第九讲...
他曾在IBM工作多年,能使用多种语言进行编程(在多种机器上使用汇编语言和高级语言),设计和实现了实时闭环工业控制系统。Horton拥有丰富的教学经验(教学内容包括C、C++、Fortran、PL/1、APL等),同时还是机械、加工...
使用过动态调用DLL的都清楚取模块基址和函数指针,微软默认使用字符串对比,本模块可使用哈希对比效率和易用上相对提升,本函数用于计算模块或函数哈希 X64Call 调用 64 位函数通用版本 X64CallArr 调用 64 位函数...
5. C内联汇编 6. volatile限定符 20. 链接详解 1. 多目标文件的链接 2. 定义和声明 2.1. extern和static关键字 2.2. 头文件 2.3. 定义和声明的详细规则 3. 静态库 4. 共享库 4.1. 编译、链接、运行 4.2. 动态链接的...
5.12.2 字符串处理库的字符串操作函数 5.13 有关对象的思考:对象间的交互 小结 术语 自测练习 自测练习答案 练习 特殊小节:建立自己的计算机 更多的指针练习 字符串操作练习 特殊小节:高级字符串操作练习 复杂...
5.12.2 字符串处理库的字符串操作函数 5.13 有关对象的思考:对象间的交互 小结 术语 自测练习 自测练习答案 练习 特殊小节:建立自己的计算机 更多的指针练习 字符串操作练习 特殊小节:高级字符串操作练习 复杂...
6.3 字符串操作 206 6.3.1 连接字符串 206 6.3.2 字符串数组 208 6.4 字符串库函数 210 6.4.1 使用库函数复制字符串 210 6.4.2 使用库函数确定字符串的长度 211 6.4.3 使用库函数连接字符串 212 6.4.4 比较...
就简单的一句话就交代了 ^_^我们已经写好了GetCRC32函数和GetZHI函数,两个函数返回值为字符串,当然,我们只是做测试,如果真的要,应用到软件中去,我推荐还是用浮点计算,制造隐藏剧情,甚至内联汇编处理,根据CRC32...
3.1 字符串操作 35 3.1.1 使用字符串结构 35 3.1.2 字符串的初始化 36 3.1.3 字符串的拷贝 37 3.1.4 字符串的连接 38 3.1.5 字符串的打印 38 3.2 内存与链表 40 3.2.1 内存的分配与释放 40 3.2.2 使用LIST_...
3.1 字符串操作 35 3.1.1 使用字符串结构 35 3.1.2 字符串的初始化 36 3.1.3 字符串的拷贝 37 3.1.4 字符串的连接 38 3.1.5 字符串的打印 38 3.2 内存与链表 40 3.2.1 内存的分配与释放 40 3.2.2 使用LIST_...
*功能齐全的BASIC编译器(功能齐全的大约在1980年代/ Commodore 64时代!)*几乎支持所有熟悉的BASIC命令(打印,输入,IF ...则,GOTO,GOSUB,DATA等)*支持许多BASIC功能(SIN... *内联汇编功能。 *写在Haskell和C。
探索如何使用数组,函数和字符串来创建大型应用 执行预处理和条件编译以进行高效编程 了解如何最佳使用指针和内存 使用通用实用程序并提高代码的性能 使用线程和进程同步实现多任务 探索低级编程和内联汇编语言 ...
7.2.3 字符串过滤程序 256 7.2.4 整数溢出 256 7.2.5 类型转换错误 260 7.3 案例研究:IIS索引服务漏洞 262 7.3.1 CVariableSet:: 7.3.1 AddExtensionControlBlock 263 7.3.2 DecodeURLEscapes 267 7.4 结论 271 第8...
特征显示字符串和数字,将它们保存到寄存器和堆栈中并还原它们。 32位数字(哦,甜美的上溢/下溢!)。 定义要在注册机器程序中使用的过程。 SICP的所有麻烦都注册了机器语言,而Z80则没有麻烦。如何使用首先,使用...
第7章 调试内联汇编语言代码 7.l 汇编语言初步 7.1.l 数据类型 7.1.2 寄存器 7.1.3 寻址模式 7.1.4 指针 7.1.5 协处理器 7.2 调试 7.2.l 减法运算 7.2.2 使用256位整数 7.2.3 程序循环 7,2.4 ...
//输出字符串Welcome to c++! } 在屏幕输出如下: Hello! Welcome to c++! 2-4 使用关键字const而不是#define语句的好处有哪些? 解: const定义的常量是有类型的,所以在使用它们时编译器可以查错;而且,这些...
7.2.10 字符串 117 7.2.11 记录和数组的创建 118 7.2.12 while循环 119 7.2.13 for循环 119 7.2.14 函数调用 120 7.3 声明 120 7.3.1 变量定义 120 7.3.2 函数定义 120 7.3.3 片段 121 程序设计:翻译成树 122 习题 ...