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的呢…

计算机机场基础知识,全国机场频率_电脑基础知识_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;任何程序在使用函…

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:…

cobaltstrike生成一个原生c,然后利用xor加密解密执行

首先cobaltstrike生成一个原生c&#xff0c;我的是&#xff1a; /* length: 797 bytes */ unsigned char buf[] "\xfc\xe8\x89\x00\x00\x00\x60\x89\xe5\x31\xd2\x64\x8b\x52\x30\x8b\x52\x0c" "\x8b\x52\x14\x8b\x72\x28\x0f\xb7\x4a\x26\x31\xff\x31\xc0\xac…

这样就可以很方便的知道明天的天气了

今天在侧边栏加了一个实用的小东西——天气预报。它可以根据来访者的ip地址自动判断地区&#xff0c;并展现今天以及明天的天气预报。这样来看blog的时候就可以知道什么时候该去收衣服啦&#xff5e;哈哈&#xff01;实现代码其实很简单。就是套一个IFRAME&#xff0c;里面套个…

压缩矩阵

压缩矩阵&#xff1a;指为多个值相同的元素只分配一个存储空间&#xff0c;对零元素不分配存储空间特殊矩阵&#xff1a;指具有许多相同矩阵元素或零元素&#xff0c;并且这些相同矩阵元素或零元素的分配有一定规律性 1、对称矩阵 对称矩阵&#xff1a;矩阵每个元素都有aijaj…

线性方程组 python_线性方程组的表示 使用Python的线性代数

线性方程组 pythonPrerequisites: 先决条件&#xff1a; Defining a Vectors 定义向量 Defining a Matrix 定义矩阵 In this article, we are going to learn how to represent a linear equation in Python using Linear Algebra. For example we are considering an equatio…

初步体验数据驱动之美---TreeView

1.前言继上一篇《WPF应用基础篇---TreeView》的发布之后&#xff0c;有部分朋问我关于里面一些基础应用的问题&#xff0c;可能是我写得不够详细&#xff0c;所以在这里&#xff0c;我想再次那文章中的案例来谈谈初步体验数据驱动之美&#xff0c;摆脱旧WinForm编程习惯(靠触发…

不可以!

描述 判断&#xff1a;两个数x、y的正负性。 要求&#xff1a;不可以使用比较运算符&#xff0c;即”<”,”>”,”<”,”>”,””,”!”。 输入 有多组数据&#xff0c;每组数据占一行&#xff0c;每一行两个数x&#xff0c;y。 x、y保证在int范围内。 输出 …

树的基本概念

0x01 树 树&#xff1a;n个结点的有限集合&#xff0c;n0&#xff0c;空树任何非空树只有一个根结点n个结点的树只有n-1条边&#xff08;除根结点&#xff0c;每个结点只有一个前驱&#xff0c;一个前驱一条边&#xff0c;根据这个算的&#xff09;有序树与无序树&#xff1a;…

小学计算机教学教师培训,例谈小学信息技术课堂的有效教学

例谈小学信息技术课堂的有效教学在社会的各个领域&#xff0c;大家都不可避免地会接触到论文吧&#xff0c;论文可以推广经验&#xff0c;交流认识。为了让您在写论文时更加简单方便&#xff0c;以下是小编整理的例谈小学信息技术课堂的有效教学的论文相关内容&#xff0c;供大…

C和汇编---数组

0x01 初始化数组 1、没有初始化数组 #include "stdio.h" int main(void) {int data[4];for (int i0;i<4;i){printf("%d\t",data[i]);}return 0; }不同系统&#xff0c;输出结果可能不一样&#xff1a; 反汇编&#xff1a; 4: int data[4]; 5…

操作系统 系统开销比率_操作系统中的最高响应比率下一个(HRRN)调度

操作系统 系统开销比率操作系统中的HRRN调度是什么&#xff1f; (What is HRRN Scheduling in Operating System?) HRRN is the abbreviation of Highest Response Ratio Next Scheduling. It is an optimal scheduling algorithm. HRRN是最高响应率下一个调度的缩写 。 这是…

利用堆栈做循环

程序&#xff1a; #include "stdio.h" int main(int argc,char *argv[]) {char *str"%d";printf("hello world");__asm{ log:lea eax,logpush eaxlea ebx,strpush ebxpush eaxcall printfret 8}return 0;}运行&#xff1a;一直死循环运行下去 …

c# 多线程异步demo

一个 c# winform 多线程异步demo&#xff0c;分享下。 因为例子都很简单&#xff0c;所以不多说明&#xff0c;自己下载吧。转载于:https://www.cnblogs.com/chaobao/archive/2011/08/18/CSharpSync.html

计算机编程要哪方面天赋,编程要哪门子天赋

开局一张图写代码真的需要天赋吗&#xff1f;有句话是这样说的&#xff1a;论大家的努力程度&#xff0c;远不到拼天赋的时候。我认为所谓的天赋&#xff0c;应该是行业内Top10%水平才需要天赋&#xff0c;比如Linux缔造者Linus Torvalds&#xff0c;苹果发明者斯蒂夫沃兹尼亚克…

C和汇编----字符串

字符串是以空字符&#xff08;\0&#xff09;结尾的char类型数组。 0x01 定义字符串和初始化 用双引号括起来的内容称为字符串字面量&#xff0c;也叫字符串常量&#xff0c;双引号中的字符串和编译器自动加入\0字符&#xff0c;都作为字符串存储在内存中 #include "st…