
通过对上一主题的描述,我相信每个人都必须对什么是数据以及数据的定义和使用有一定的了解. 希望在阅读本主题之前,希望每个人都花点时间来学习C语言教程,最好是购买数字以巩固与变量有关的知识.
每个人都了解如何定义变量并为变量赋值. 当然,您应该进一步了解如何编写一些详细的代码.
今天,我们的任务相对简单. 让我们谈谈如何编写代码和实现代码流控制. 应该说这是一件很简单的事情. 我最初不打算谈论它,但是按照每次一步的原则,我将简要地谈论它. 在完成本主题之后,我将遵循一个函数主题来改进代码,因此,现在每个人都应该能够编写自己的程序.
关于该主题的知识点并不多(也很多,但是很简单. ),主要是因为更多的写作和更多的实践,他们知道您可以将一些实际问题转换为代码来解决问题.
别胡说八道,让我们谈谈该主题的主要内容:
程序运行和逻辑判断的三个程序流控制结构的详细说明. 养成良好的编码风格. 结论
让我们进入主题.
据说计算是计算机的最基本功能,没有人会反对它. 做这个程序,最基本的自然就是这些操作.
我知道阅读这篇不完整文章的朋友应该对数据不感冒. 但是,每个人都可以确信,这里涉及的操作非常简单,即加法,减法,成功,除法,并取走了小学的其余部分,是,否,和/或位移,别无其他. 首先让我们了解一下算术运算.
1. 算术运算.
每个人都应该了解加,减,乘和除. 我不想在每个人都能理解的知识上花费太多的空间. 我将列出我想谈论的知识,每个人都可以理解.
用于算术运算的运算符为:

我认为不必说加,减,完成和除法运算符. “%”运算符实际上是余数;使用这些运算符可以连接一些数字,变量等,以执行操作,这样的公式称为表达式. 例如:
inti = 5;
i +7; //这是一个表达式.
“ =” =“不是算术运算,不是数学类中的”等于“,而是”赋值“运算符,用于转换常量(数字,字母等). 赋值运算符分配给变量,因为在执行算术运算后,我们通常将运算结果保存到变量中,因此我在这里将这个赋值运算符归类. 我们每天的“等于”运算符是: “ ==”,它属于逻辑运算符,我们将在下一节中讨论它.
关于两个运算符“ ++,-”,已在上图中进行了说明,它是对变量的自加或自减运算,等效于: variable = variable + 1;或variable = Variable-1;
现在让我们举几个例子来说明这些算术运算符的用法.
voidmain()
{
intx = 1;
inty = 2;
intz = 20;
x ++; //与x = x + 1相同;
![]()
y-; //与y = y-1相同;
z / = x; //与z = z / 1相同;
printf(“%d,%d,%d \ n”,x,y,z); //打印x,y,z的结果.
z%= x; //计算出z / x之后的余数
x = x + y;
z- = x;
printf(“%d,%d,%d \ n”,x,y,z); //打印x,y,z的结果.
}
请不要看下面的屏幕截图,首先看一下该程序,对其进行分析,两次的输出是什么,然后比较下图:
让我们看看它是否正确. 没错,恭喜,即使通过了基本的算术运算,接下来,我们也需要调试此代码以熟悉一些相关的汇编命令. 显示:

在代码上右键单击鼠标编程基础代码,然后选择以下命令:

让我们详细分析我们现在看到的代码:
1: #include“ stdio.h”
2:
3: voidmain()
4: {
00401010pushebp
00401011movebp,esp; //将现有的堆栈分配给EBP寄存器.
00401013subesp,4通道; //分配x4C大小的堆栈空间用于操作.
00401016pushebx
00401017pushesi
00401018pushedi; //保存注册环境.
00401019leaedi,[ebp-4Ch]; //在这里,我们使用ebp寄存器减去偏移量来定位我们定义的变量,
![]()
0040101Cmovecx,13小时; // here-4Ch用于定位堆栈头并将堆栈内容更改为int3中断,以避免内存泄漏.
00401021移动,0CCCCCCCCh; //以上操作是为了节省堆栈环境并分配堆栈空间.
00401026repstosdwordptr [edi]; //当我们在下一个主题中讨论函数时,我们将对其进行讨论,您可以在此处跳过它.
5: intx = 1;
00401028movdwordptr [ebp-4],1; // [ebp-4]是我们的变量x,dword ptr用于将此变量修改为DWORD类型(即整数).
6: inty = 2;
0040102Fmovdwordptr [ebp-8],2; // MOV是汇编指令,相当于我们的C语言中的“ =”赋值运算符. 具体用法是百度.
7: intz = 20;
00401036movdwordptr [ebp-0Ch],14小时
8:
9: x ++; //与x = x + 1相同;
0040103Dmoveax,dwordptr [ebp-4]
00401040addeax,1; // add指令是我们C语言的“ +”运算符,并且有一个INC指令等效于我们的“ ++”运算符
00401043movdwordptr [ebp-4],eax
10: y-; //与y = y-1相同;
00401046movecx,dwordptr [ebp-8]
00401049subecx,1
0040104Cmovdwordptr [ebp-8],ecx
11:
12: z / = x; //与z = z / 1相同;
0040104Fmoveax,dwordptr [ebp-0Ch]
00401052cdq
00401053idiveax编程基础代码,dwordptr [ebp-4]
00401056movdwordptr [ebp-0Ch],eax
13: printf(“%d,%d,%d \ n”,x,y,z);
![]()
00401059movedx,dwordptr [ebp-0Ch]
0040105Cpushedx
0040105Dmoveax,dwordptr [ebp-8]
00401060pusheax
00401061movecx,dwordptr [ebp-4]
00401064pushecx
00401065 pushoffsetstring“%d,%d,%d \ n”(0042001c)//参数,具体规则将在下一个主题“函数”中描述
0040106Acallprintf(004010f0); //调用printf函数以打印结果
0040106Faddesp,10小时; //这是C条中使用的战斗平衡方法. (详细信息将在下一个主题“功能”中描述)
14:
15: z%= x;
00401072moveax,dwordptr [ebp-0Ch]
00401075cdq
00401076idiveax,dwordptr [ebp-4]
00401079movdwordptr [ebp-0Ch],edx
16:
17: x = x + y;
0040107Cmovedx,dwordptr [ebp-4]
0040107Faddedx,dwordptr [ebp-8]
00401082movdwordptr [ebp-4],edx
18: z- = x;
00401085moveax,dwordptr [ebp-0Ch]
00401088subeax,dwordptr [ebp-4]
0040108Bmovdwordptr [ebp-0Ch],eax
19: printf(“%d,%d,%d \ n”,x,y,z);

0040108Emovecx,dwordptr [ebp-0Ch]
00401091pushecx
00401092movedx,dwordptr [ebp-8]
00401095pushedx
00401096moveax,dwordptr [ebp-4]
00401099pusheax
0040109Apushoffsetstring“%d,%d,%d \ n”(0042001c)
0040109Fcallprintf(004010f0)
004010A4addesp,10小时
20: }
004010A7popedi; //恢复注册环境
004010A8popesi
004010A9popebx
004010AAaddesp,4通道; //余额堆栈
004010ADcmpebp,尤其是
004010AFcall__chkesp(00401170); //专用于调试模式程序的堆栈检查功能.
004010B4movesp,ebp
004010B6popebp
004010B7ret
我相信您应该能够根据上述代码中的提示类似地查看汇编代码. 当然,如果您不了解它也没关系. 我们需要掌握汇编说明,它们的用法很少. p>
mov / lea: 分配/获取地址.
添加: 添加指令.
sub: 减法指令.
div / idiv: 除法指令.
mul / imul: 乘法指令.
有关这些组装说明的具体用法,您可以使用百度或参考相关材料. 在这里不做详细描述,让我们开始逻辑和关系操作.
发件人:
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-166812-1.html
建议先不升
米国出了就没有放弃对中国在政治上
新歌新歌
起床了吗