高级语言C的基础代码的编写

上传人:M****1 文档编号:556787845 上传时间:2023-09-15 格式:DOCX 页数:14 大小:114.25KB
返回 下载 相关 举报
高级语言C的基础代码的编写_第1页
第1页 / 共14页
高级语言C的基础代码的编写_第2页
第2页 / 共14页
高级语言C的基础代码的编写_第3页
第3页 / 共14页
高级语言C的基础代码的编写_第4页
第4页 / 共14页
高级语言C的基础代码的编写_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《高级语言C的基础代码的编写》由会员分享,可在线阅读,更多相关《高级语言C的基础代码的编写(14页珍藏版)》请在金锄头文库上搜索。

1、高级语言C+的基础代码的编写通过上次课题的讲述,相信大家一定对什么是数据及数据的定义和使用方法有一定的了解了,在看本次课题之前 希望大家能趁热打铁,再到网上下本c语言的教程,最好是买本数来巩固下变量相关的知识。大家明白了怎么定义变量,怎么给变量赋值了,自然的就应该进一步了解一下一些详细的代码怎么编写了。今天我们的任务比较简单,就讲一下如何编写代码及实现代码的流程控制。应该说这个是非常简单的东西了,本 来我没打算讲它,可是本着一步一个脚印的原则,我还是简要的说一下。在本次课题之后,我会紧跟着出一个函数的 专题,来作为代码篇的完善,至此大家应该能独立的写自己的程序了。本次课题知识点不是很多(也不少

2、,但是都很简单。),主要是在于多写,多练,知道自己能把一些现实的问题转 换成代码来解决问题。不多废话,先说下本次课题要写的主要内容:1. 程序的运算和逻辑判断2. 三种程序流程控制结构详解。3. 养成良好的代码编写风格。4. 结束语下面开始进入正题。一、程序的运算和逻辑判断。说计算是电脑最基本的功能,相必没有人会反对的。做程序,自然最基础的就是这些运算了。 我知道,看这个破烂文章的朋友对数据应该都是不感冒的。不过大家放心,这里牵扯的运算都很简单,就是 小学的加、减、成、除、取余数,是、非、与或和位移,没别的了。先让我们来了解下算术运算。1. 算术运算。加减乘除相比大家都应该很了解的。这里我不想

3、费太多的篇幅讲述这些大家都明白的知识,我把要说的 知识列出来,大家自己了解就好。用于算术运算的运算符有:运算符作 用作用船i*也睦%揆运算加法自咸*乘法自城/我想不用我说,加、减、成、除这些运算符大家都接触过的,关于“ %”运算符,其实就是取余数;用这些运算符可以将一些数字,变量等连接起来,进行运算,这样的式子叫做表达式。例如:int i =5;i +7;/这里就是一个表达式。“=”这个运算符其实不属于算术运算,它也并非是我们数学课上讲的“等于”,而是一个“赋值”运算 符,它用来将一个常量(数字、字母等)赋值给一个变量的赋值运算符,由于我们进行算术运算以后,通常都会将运算结果保存到一个变量中,

4、所以,我把这个赋值运算符归类到这里。而我们日常的“等于”运算符 是:“= =”,它属于逻辑运算符,我们将在下一节中讲到它。关于“+、”这两个运算符,上图中已经说明了,它是对变量的对自己的自加或者自减运算,等 同于:变量=变量+1;或者 变量=变量一 1;现在让我们来举几个例子,来说明下这些算术运算符的用法。 void main()int x = 1;int y = 2;int z = 20;x +;/等同于x=x+1;y -;/等同于y=y-1;z /= x;/等同于Z=z/1;printf(%d, %d, %dn, x, y, z);/ 打印 x,y,z 的结果。Z %= x; /计算得出z

5、 / x以后的余数x = x+y;z -= x;printf(%d, %d, %dn, x, y, z);/ 打印 x,y,z 的结果。请先不要看下面的截图,先看下这个程序,分析一下,这两次的输出结果会是多少,然后对比下图:看下就算的是不是正确,如果正确了,那恭喜你,基础的算术运算就算通过了,接下来,我们需要调试 这段代码,来熟悉一些相关的汇编命令,具体操作如下图所示:ttinclude stdio.huoid main()int x int int z=2; =20;迸标移到这行, 按下F9下好斷点 ,然后F5 ,开始 调试-在代码上右击鼠标,选择如下命令:1:2:3: 4:5:6:7:8:

6、9:10111213int x = 1; int y = 2;int z = 20;x +;y ;z /= x; printF(d, %Go To Disassembly灌 Go To DefinitionGo To Reference Show Next Statement阳 uickWatch.Stea Into Specifi匚 Function 删 Remove Breakpoint 也 Disable Breakpoint我们来详细分析一下我们现在看到的代码:#include stdio.hvoid main()00401010pushebp00401011movebp,esp;/将

7、现有的堆栈给了 EBP寄存器。00401013subesp,4Ch;/分配x4C大小的堆栈空间用来运算。00401016pushebx00401017pushesi00401018pushedi;/保存寄存器环境。00401019leaedi,ebp-4Ch ;/这里用ebp寄存器减去一个偏移来定位我们定义的变量,0040101Cmovecx,13h;/这里-4Ch是用来定位到堆栈头,把堆栈内容改成int3中断以免内存泄露。00401021moveax,0CCCCCCCCh;/以上操作是保存堆栈环境,分配堆栈空间。00401026rep stosdword ptredi;/在下一次课题讲述函数

8、时,我们会讲到,这里大家可以略过。int x = 1;00401028movdword ptr ebp-4,1;/ ebp-4是我们的变量x,dword ptr是用来修饰这个变量是DWORD类型(也就是整型)int y = 2;0040102Fmovdword ptr ebp-8,2;/MOV就是汇编指令,相当于我们C语言中=赋值运算符,它的具体用法自己百度int z = 20;00401036movdword ptrebp-0Ch,14hx+;/等同于x =x + 1;0040103Dmoveax,dwordptr ebp-400401040addeax,1; /add指令就是我们C语言的+

9、运算符,还有一个INC指令相当于我们的+运算符00401043movdword ptrebp-4,eax:y/等同于y =y - 1;00401046movecx,dwordptr ebp-800401049subecx,10040104Cmovdword ptrebp-8,ecx:z/= x;/等同于Z =z / 1;0040104Fmoveax,dwordptr ebp-0Ch00401052cdq00401053idiveax,dwordptr ebp-400401056movdword ptrebp-0Ch,eax:printf(%d,%d,%dn, x,y, z);00401059m

10、ovedx,dwordptr ebp-0Ch0040105Cpushedx0040105Dmoveax,dwordptr ebp-800401060pusheax00401061movecx,dwordptr ebp-400401064pushecx00401065pushoffset string %d, %d, %dn (0042001c)/传递参数,具体规则将在下次课题“函数中讲述。0040106Acallprintf (004010f0); / 调用printf函数打印结果0040106Faddesp,10h;/这里是c条用的对战平衡方式。(具体将在下次课题“函数”中讲述)14:15:

11、z%= X;00401072moveax,dwordptr ebp-0Ch00401075cdq00401076idiveax,dwordptr ebp-400401079movdword ptrebp-0Ch,edx16:17:x=x+y;0040107Cmovedx,dwordptr ebp-40040107Faddedx,dwordptr ebp-800401082movdword ptrebp-4,edx18:z-=x;00401085moveax,dwordptr ebp-0Ch00401088subeax,dwordptr ebp-40040108Bmovdword ptrebp-

12、0Ch,eax19:printf(%d,%d, %dn, x,y, z);0040108Emovecx,dwordptr ebp-0Ch00401091pushecx00401092movedx,dwordptr ebp-800401095pushedx00401096moveax,dwordptr ebp-400401099pusheax0040109Apushoffset string %d, %d, %dn (0042001c)0040109Fcallprintf (004010f0)004010A4addesp,10h20: 004010A7popedi;/恢复寄存器环境004010A

13、8popesi004010A9popebx004010AAaddesp,4Ch;/平衡堆栈004010ADcmpebp,esp004010AFcall_chkesp(00401170); / DEBUG模式程序专用的堆栈检查函数。004010B4movesp,ebp004010B6popebp004010B7ret相信你根据上述代码中的提示,应该能将这个汇编代码看的差不多,当然,看不明白也没有关系,我们需要掌握的汇编指令及其用法很少,就下面几个:mov/lea:赋值/取地址。add:加法指令。sub:减法指令。div/idiv:除法指令。mul/imul:乘法扌旨令。这些汇编指令的具体用法大家自己百度或者参考相关资料,这里不做详细说明,下面开始我们的逻辑、关系 运算。2. 逻辑、关系运算。提起什么逻辑运算,或者什么关系运算,看名字貌似很复杂的。不过这里可能让大家放心的是,这些运 算我们日常生活

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号