从零开始学编程一、编程基础1、计算机基础计算机核心是处理器,处理器是个拨一下转一下的电子设备拨就是时钟信号驱动(晶振在供电条件下产生周期震荡的电脉冲即时钟),转是指内部状态变化这个状态变化会触发外围设备的进一步变化在人为的设计下,就呈现出不同的对外表现和功能2、处理器的功能处理器的由指令寄存器和数据寄存器组成指令寄存器中存的是指令,来个时钟触发,数据寄存器的状态就会根据指令不同而转变为不同的新状态旧状态就是原数据,新状态就是处理结果给外界的感觉就是处理器根据指令指示对原数据做处理,得到了运算结果.如指令为“加”原数据寄存器1的状态为数字“3”的表示,数据寄存器2的状态为数字“5”的表示,来个时钟后,原数据寄存器1的状态变为数字“8”的表示从效果上看:等效处理器执行了一次3+5=8的运算除了运算功能,处理器的指令需要依次更新为下一条指令,数据寄存器的状态需要能够存储才有意义这些就是从内存或闪存(U盘用的存储芯片)中取指令,运算数据从内存中取再存到内存中内存中的数据可以被处理器改变,这种改变又会引起屏幕显示效果的改变或硬盘读写的发生或光驱的动作或声音的输出等这就呈现除对人有意义的外在效果3、程序概念程序就是一个行动指导书,一个电影剧本,一个计算公式,来指导处理器状态按计划有规律的进行变化,从而达到预期的效果。
用计算机术语表达就是一系列指令,指导处理器有规律的运行.4、程序分类最原始的就是直接指导处理器运行的指令,设计这样的指令序列并记录下来就形成了汇编语言,汇编语言是用来指导一线工人如何一步步工作的.汇编语言不方便做大工程,将汇编语言进行抽象,汇总,用新的抽象指令来代替一串汇编指令,这样的抽象指令也可组织乘一个指令序列,这就是高级语言如“习语言”高级语言是指导公司、企业内各部门如何一步步协调工作完成公司目标的人是懒惰的,再偷些懒,就会希望能用自然语言来表达,让及其来适应人类语言,理解人类语言的意思而进行工作这就是自然语言由于自然语言存在模糊和二义性,目前还没有实现,是未来的工作5、程序设计的相关过程(1)分析问题,构思处理过程(2)编写代码(3)解释执行或编译成目标代码后运行6、解释执行与编译执行的区别解释就是拿原文件来直接解析后运行,每次运行都需要解析原文件开发者保存的是源文件,给使用者使用的也是源文件解释执行不便于保护开发人员的劳动成果,同时一定要有解释器的存在才能运行如VB就是解释执行的语言.编译执行是将代码通过编译转换为机器代码后再执行,开发者保存源代码,对使用者发布目标代码,由于机器代码很难阅读分析。
可保护开发者的劳动成果如C、C++另外还有一种介于两者之间,先编译成中间代码,再对中间代码解释执行,配不同平台的解释器同样代码可在不同平台上运行实现跨平台目的节省开发者的劳动二、看例子来理解1、汇编语言例子假设处理器可以识别的指令为:取数据,存数据,加,减,乘,除,处理器有数据寄存器1、数据寄存器2希望完成如下运算:2+3*5假设原始数据分别位于内存单元甲:2乙:3丙:5要求运算结果存在内存单元甲内:可设计汇编程序如下:取内存单元乙内容到寄存器1取内存单元丙内容到寄存器2做乘运算(假设结果保存在寄存器1中)取内存单元甲内容到寄存器2做加运算(假设结果保存在寄存器1中)存寄存器1中数据到内存单元甲中这就是汇编程序,执行这段程序即可得到预期效果.2、习语言例子同样上面的运算,用习语言可以表达为:整数类型甲=2,乙=3,丙=5;甲=甲+乙*丙;由以上可见,习语言表达比汇编语言精简,逻辑更清晰直观二、汇编语言汇编语言是使用处理器的指令集直接对硬件进行编程的,不同的处理器有不同的指令集和编程模型,所用的汇编语言也不同汇编语言设计的活动依次有:1、任务分析或构思2、汇编语言实现3、汇编,有报错的话则转步骤2修改。
4、连接,运行5、结果是预期的吗?不是则调试分析6、结束由于汇编语言和硬件紧密相关,复杂度比较高,不建议一般人员学习故此处省略不做进一步说明四、习语言习语言由预处理器、编译器、汇编器、连接器、调试器组成习语言源程序是纯文本文件,可以使用任何纯文本编辑器进行书写和编辑也可以使用WPS进行编写,保存时保存为纯文本文件即可预处理器对源文件中的包含文件和宏进行解析处理,生成无预处理指令的习语言文件然后由编译器进行编译,生成汇编代码汇编器对汇编代码进行编译,生成目标代码文件,连接器将一个或多个目标代码文件与库文件进行连接,生成可执行文件执行可执行文件,若碰到运行错误,可以使用调试器跟踪运行,分析软件存在的问题并解决汇编器、连接器、库文件和调试器通常都和特定的操作系统、特定的处理器相关,差别比较大本文将主要关注源文件的编写方法习语言原文件由预处理指令、声明语句和函数体组成一)、预处理指令预处理指令以#开头1、习语言支持的预处理指令有:#定义XXXyyy#包含“文件名”#如果<表达式〉#或者<表达式〉#否则#如果结束#取消定义XXX#如果已定义XXX#如果未定义XXX定义一个宏XXX内容为yyy包含另外一个文件的内容到本文件中判断表达式,若为真,则执行后续语句如果前面的判断为假,则判断本行的表达式,若为真则执行后续语句前面的判断都为假则执行本行后的语句标志如果判断语句块的结束取消宏XXX的定义如果宏XXX在本行之前已定义,则执行后续语句如果宏XXX在本行之前未定义,则执行后续语句如果条件语句后面的表达式必须为预处理期间可以计算的常量逻辑表达式,可包含如下预处理函数:已定义(XXX)此预处理函数判断宏XXX是否在本行之前已定义,已定义则返回真,否则返回假。
2、语言支持的内置宏有:文件名—:内容为当前文件名字符串表示行—:内容为当前行整数表示日期—:内容为当前日期,字符串表示时间—:内容为当前时间,字符串表示3、包含文件搜索路径“#包含”宏指令后跟的“文件名”可以有两种表示方法:双引号将文件名括起来“文件名”或尖括号将文件名括起来<文件名〉双引号引起来的包含文件将首先在当前目录查找,若找不到,再搜索“包含文件路径”.尖括号括起来的文件名则只在“包含文件路径”中搜索包含文件路径”为系统环境变量,可以包含多个搜索目录,用分号(;进行分割二)预处理器用法预处理器用法:预处理[配置项][文件名]配置项为可选项,可选配置项如下:-警告开-警告关-搜索路径-后搜索路径-无标准路径-输出文件名-定义宏名字输出所有警告信息不输出标准警告信息在接口文件标准搜索路径前增加搜索路径在接口文件标准搜索路径后增加搜索路径不使用接口文件标准搜索路径指定输出文件预定义宏:宏名字-定义宏名字=值预定义宏:宏名字等于值-不定义宏名字-无预定义宏-无特殊宏-安静-版本-帮助取消宏名字指定的宏的定义取消系统预定义宏不定义特殊宏安静模式,不显示版本信息显示版本信息和设置显示帮助信息(二)习语言保留字1、编译指令#编译指令#行2、类型保留词字符类型,字节类型字类型双字类型汉字类型短整数类型,整数类型,自然数类型小数类型浮点数类型双精度类型,高精度类型,枚举类型,结构类型,联合类型,长整数类型,时间类型长度类型字符串类型变参类型,空类型,浮点数双精度;小数字节自然数以上类型亦支持简短表示如下:字符短整数整数长整数2、控制用保留词如果,或者,否则,步进循环,重复,直到,当,分支,若等于,其他值,跳出,继续,跳转到,返回,开始,结束,3、变量修饰保留词外部的,易变的,静态的,无符号,寄存器,4、运算符保留词类型长度,加,减,乘,除,模除,加加,减减,等,加等,减等,乘等,除等,模等,施T.等于,不等于,大于,小于,大于等于,小于等于,左移,右移,与,或,非,位与,位或,取反,异或,4、其他保留词类型定义,习调用,标准调用,内联,_汇编,真,假,五、工程构建器(一)如果要做的软件项目比较大,通常用工程的方法来进行组织管理,软件通常由多目录下的多个文件组成,为了方便多个文件的编译,就需要使用工程构建器来自动管理项目目标的生成和更新。
工程构建器会读取“构建指导书”根据其中的构建指令进行工程构建工程构建器简称“构建”构建指导书主要是对目标和依赖项进行描述,当目标文件不存在或修改日期比某一依赖项的修改日期早时,则执行目标后续的命令行,这些命令行通常是对依赖项进行编译,重新生成目标文件二)工程构建器用法工程构建器用法:构建[-<配置项>][<变量>=<值〉...][<目标〉...]配置项为可选项,工程构建器支持如下配置项:可选配置项:-路径<路径〉-调试-测试-指导书<文件名〉-搜索<路径〉-宏函数-预处理让工程构建器到指定路径下进行构建打开调试模式输出构建需要执行的命令,但不执行,测试用使用由<文件名〉指定的构建指导书进行构建添加一个构建指导书搜索路径列表输出内置宏函数$(vfunc>vparams>)列表输出预处理指令-定义<变量名>[=<字符串〉]定义宏变量-关警告关闭警告信息-安静-帮助安静模式,不显示所执行的命令显示帮助信息如:输入构建执行,则查找构建指导书,并对其中的(缺省目标)第一个目标进行构建.输入构建指导书我的指导书执行,则查找“我的指导书”进行分析和目标构建(三)构建指导书的编写构建指导书主要由目标、依赖项、命令行组成,还可以包含注释,变量定义,变量引用,宏函数调用等。
1、目标、依赖项、命令行的用法如下:目标...:依赖项...命令行目标从行首开始,可以有多个,之间用空格分开,若有多个目标,则依次对每个目标进行是否需要更新的判断,若需要更新,则执行后面的命令行依赖项可以是空或一个或多个文件名,若为空,则目标需要更新,若为一个或多个文件,则比较目标和依赖项的修改日期,过有任何一个依赖项的修改日期比目标新,则目标需要更新命令行行首要有一个或多个空格,以和目标行进行区分,命令行可以有多行,每行代表一条命令命令行若以“@”开头,表示命令安静执行不输岀;命令行若以“-”开头,表示忽略命令行返回的错误码通常工程构建器遇到命令行执行出错时,将停止后续命令的执行)命令行可以包含任何合法的外部命令和命令参数,可以包含变量引用2、注释行注释行用法如下:【注释:XXX】或【注释】XXX或#XXX或##XXX上面的“XXX”代表任意的注释内容注释行通常从行首开始,(以和命令行进行区分),将使工程构建器忽略掉整行3、当一行过长时,可以在行尾用“\”作为结束,另起一行继续书写工程构建器把“\”结尾的行和下一行作为一行对待可用如下几种方法定义:4.1、变量名=短语变量被引用时再展开。
4.2、变量名+=短语4.3、变量名:=短语4、为了方便书写和移植,构建指导书中通常会定义一些变量,变量通常代表一个或一组短语,变量:定义变量,内容为短语,短语中可包含对其他变量的引用,引用在此:变量目前内容后面增。