C和汇编混合编程---do while

环境:VC++

do while 会先执行do里面的循环体,执行完去执行while的条件判断,如果为真,继续执行do里面的循环体,如果为假,则结束循环
C程序:

#include "stdio.h"
int main()
{int i=1,sum=0;do{sum+=i;i++;}while(i<=100);printf("sum=%d\n",sum);return 0;
}

在这里插入图片描述
上面先执行sum+=i;i++;,接着执行i<=100,如果为true,则继续执行do循环,否则,结束循环。
反汇编:

5:        int i=1,sum=0;
00401028 C7 45 FC 01 00 00 00 mov         dword ptr [ebp-4],1
0040102F C7 45 F8 00 00 00 00 mov         dword ptr [ebp-8],0
6:        do{
7:            sum+=i;
00401036 8B 45 F8             mov         eax,dword ptr [ebp-8]
00401039 03 45 FC             add         eax,dword ptr [ebp-4]
0040103C 89 45 F8             mov         dword ptr [ebp-8],eax
8:            i++;
0040103F 8B 4D FC             mov         ecx,dword ptr [ebp-4]
00401042 83 C1 01             add         ecx,1
00401045 89 4D FC             mov         dword ptr [ebp-4],ecx
9:        }while(i<=100);
00401048 83 7D FC 64          cmp         dword ptr [ebp-4],64h
0040104C 7E E8                jle         main+26h (00401036)
10:       printf("sum=%d\n",sum);
0040104E 8B 55 F8             mov         edx,dword ptr [ebp-8]
00401051 52                   push        edx
00401052 68 1C 20 42 00       push        offset string "sum=%d\n" (0042201c)
00401057 E8 34 00 00 00       call        printf (00401090)
0040105C 83 C4 08             add         esp,8
11:       return 0;
0040105F 33 C0                xor         eax,eax
12:   }
  • jle:小于等于,则跳转

从上面的程序我们可以看出,sum+=i就是

00401036 8B 45 F8             mov         eax,dword ptr [ebp-8]
00401039 03 45 FC             add         eax,dword ptr [ebp-4]
0040103C 89 45 F8             mov         dword ptr [ebp-8],eax

i++就是:

0040103F 8B 4D FC             mov         ecx,dword ptr [ebp-4]
00401042 83 C1 01             add         ecx,1
00401045 89 4D FC             mov         dword ptr [ebp-4],ecx

汇编执行完这几条语句,就去执行

00401048 83 7D FC 64          cmp         dword ptr [ebp-4],64h
0040104C 7E E8                jle         main+26h (00401036)

比较[ebp-4]和100的大小,如果小于等于就跳转到00401036执行,否则往下执行,相当于C中i<=100,如果小于等于,继续执行循环体,否则结束
C和混编混合编程:

#include "stdio.h"int main()
{/*int i=1,sum=0;do{sum+=i;i++;}while(i<=100);printf("sum=%d\n",sum);*/char *str="sum=%d\n";__asm{//相当于 int i=1,sum=0mov eax,1mov ebx,0//相当于 sum+=i
ee:		add ebx,eax//相当于 i++inc eax//相当于while(i<=100)cmp eax,100jle ee//相当于printfpush ebxpush strcall printfadd esp,8}return 0;
}

在这里插入图片描述

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

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

相关文章

林子大了,什么鸟都有----.NET运用String的十八层境界

林子大了&#xff0c;什么鸟都有----.NET运用String的十八层境界 在上一文中&#xff0c;提到了一句相当常见但十分荒谬的代码&#xff1a;Request.QueryString["id"].ToString()。突然涌起一个想法&#xff0c;为什么不总结一下不同层次.Net开发者如何运用string的呢…

kotlin 查找id_Kotlin程序在矩阵中查找偶数和奇数的频率

kotlin 查找idGiven a matrix, we have to find frequencies of even and odd numbers. 给定一个矩阵&#xff0c;我们必须找到偶数和奇数的频率。 Example: 例&#xff1a; Input:matrix:[4, 5][6, 0][9, 2]Output:Even Elements Frequency : 4Odd Elements Frequency : 2在…

函数“”的返回类型不符合 CLS

林子在了啥鸟都有&#xff01;怎么出这种错误了。 转载于:https://www.cnblogs.com/nanshouyong326/archive/2007/04/23/723457.html

The Famous Clock(著名的钟)

描述 Mr. B, Mr. G and Mr. M are now in Warsaw, Poland, for the 2012’s ACM-ICPC World Finals Contest. They’ve decided to take a 5 hours training every day before the contest. Also, they plan to start training at 10:00 each day since the World Final Conte…

计算机机场基础知识,全国机场频率_电脑基础知识_IT计算机_专业资料

全国机场频率_电脑基础知识_IT计算机_专业资料 (13页)本资源提供全文预览&#xff0c;点击全文预览即可全文预览,如果喜欢文档就下载吧&#xff0c;查找使用更方便哦&#xff01;14.9 积分机场频率2009-11-28 15:29:251分类&#xff1a;默认分类I举报I字匕订阅中国主要机场管制…

c和汇编---函数

环境&#xff1a;VC 作用&#xff1a; 函数是完成特定任务的独立程序代码单元 1、创建和使用函数 函数原型&#xff1a;声明函数是什么类型&#xff0c;指明函数的返回值和函数接收的参数类型&#xff0c;函数和变量一样&#xff0c;有多种类型&#xff0c;任何程序在使用函…

Ajax_ASP.NET 添加 Ajax 和客户端功能_01

现在&#xff0c;基于不同开发思想的前端 Ajax 框架越来越多&#xff0c;功能越来越强大&#xff0c;UI 越来越炫&#xff0c;但随之复杂度也越来越高&#xff0c;尤其是UI做得漂亮的&#xff0c;比如 Ext.Net。 可是无论框架多么复杂&#xff0c;思想都一样的。因为&#xff0…

计算机常用英语1000个,1000个常用英语单词.pdf

[键入文字 ]常用英语单词 2000 个One 16 as [ ?z, ? z] ad. 同样地 prep. 当作conj. 随着 ; 因为1 the [e?, ei: ] art. 这&#xff0c;那 ad.[ 用于比17 not [n?t] ad. 不&#xff0c;没&#xff0c;不是较级&#xff1b;最高级前 ]18 on [?n] prep. 在 …上&#xff1b;…

三角形面积

描述 给你三个点&#xff0c;表示一个三角形的三个顶点&#xff0c;现你的任务是求出该三角形的面积 输入 每行是一组测试数据&#xff0c;有6个整数x1,y1,x2,y2,x3,y3分别表示三个点的横纵坐标。&#xff08;坐标值都在0到10000之间&#xff09; 输入0 0 0 0 0 0表示输入结…

python投骰子程序代码_用于双骰子(一个偏向一个法线)仿真的Python程序

python投骰子程序代码Here, we will be simulating the occurrence of the sum of the faces of two dice [i.e. dice(A) - 1, 2, 3, 4, 5 ,6 dice(B) - 1, 2, 3, 4, 4, 4, 5, 6, 6 ,6]. A dice is normal(each has an equal probability of occurrence) and another B dice i…

如何追踪每一笔记录的来龙去脉:一个完整的Audit Logging解决方案[上篇]

一、提出问题 在开发一个企业级 应用的时候&#xff0c;尤其在一个涉及到敏感数据的应用&#xff0c;比如财务系统、物流系统&#xff0c;我们往往有这样的需求&#xff1a;对于数据库中每一笔数据的添加、修改和删除&#xff0c;都需要有一个明确的日志&#xff0c;以便我们可…

执行shellcode的几种方式

首先写出汇编成功弹出计算器 #pragma comment(linker,"/section:.data,RWE") //data段可读写#pragma comment(linker,"/subsystem:\"windows\" /entry:\"mainCRTStartup\"") //不显示窗口#pragma comment(linker,"/INCREMENTAL:…

介绍针对企业级Flex开发的开源项目FlexibleShare

http://code.google.com/p/flexibleshare/ http://integratedsemantics.org/2009/05/19/flexibleshareair-dashboardportal-for-alfresco-livecycle-build1-available/ http://anvilflex.com/ 近日&#xff0c;开源的企业内容管理&#xff08;ECM&#xff09;系统供应商Alfresc…

取石子(七)

描述 Yougth和Hrdv玩一个游戏&#xff0c;拿出n个石子摆成一圈&#xff0c;Yougth和Hrdv分别从其中取石子&#xff0c;谁先取完者胜&#xff0c;每次可以从中取一个或者相邻两个&#xff0c;Hrdv先取&#xff0c;输出胜利着的名字。 输入 输入包括多组测试数据。 每组测试数…

html判断是安卓还是苹果手机,网页能够自己判断是pc端首页还是手机android和苹果。...

代码调用方式一 ( 推荐 兼容性好) 第一步&#xff1a; script typetext/javascript srcswfobject.js/script 第二步&#xff1a; p idplayera href/go/getflashplayerGet the Flash Player/a to see this player./p 第三步&#xff1a; var s7 new SWFObject(FlvPlayer2010.sw…

c构造函数和析构函数_C ++构造函数和析构函数| 查找输出程序| 套装1

c构造函数和析构函数Program 1: 程序1&#xff1a; #include <iostream>using namespace std;class Sample {private:int X;int Y;public:Sample(){X 0;Y 0;}Sample(int x, int y){X X;Y Y;}void print(){cout << X << " " << Y <&l…

我的项目的架构(三)

TranContext是一个比较重要的类,在这个类中,使用了反射方法,实现了根据配置文件动态创建类,实现了接口的作用. 1 publicabstractclassConfigurationFactory2 {3 publicConfigurationFactory()4 {5 //6 //TODO: 在此处添加构造函数逻辑7 //8 }9 publicstaticobjectCreateObject(…

1的个数

描述 小南刚学了二进制&#xff0c;他想知道一个数的二进制表示中有多少个1&#xff0c;你能帮他写一个程序来完成这个任务吗&#xff1f; 输入 第一行输入一个整数N&#xff0c;表示测试数据的组数(1< N<1000) 每组测试数据只有一行&#xff0c;是一个整数M(0< M…

单片机编程文件组织形式(个人编程规范)

1、外设或系统资源驱动函数组织形式。所有函数写在.c文件里面&#xff0c;.c最前面包含自身头文件。每个.c文件都有一个相对应的.h文件&#xff0c;其他文件或系统只调用.h文件。 2、.c文件除了最前面要包含自身头文件外&#xff0c;应该尽量全部是函数定义&#xff0c;接口信息…

计算机在我国开始被应用于,计算机应用推动自动化与信息化的发展

计算机应用推动自动化与信息化的发展【摘要】本文简单介绍了我国计算机应用的发展情况&#xff0c;分析了计算机应用同自动化和信息化之间的关系&#xff0c;通过计算机应用在我国各领域中的运用&#xff0c;来体现计算机应用对自动化和信息化的推动作用。【关键词】计算机&…